mysql-定时对表分区
1, 分区
具体可见: http://blog.csdn.net/open_data/article/details/46893331
1, 分区类型:
RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
2), 为什么分区
为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。
分区的一些优点包括:
- 与单个磁盘或文件系统分区相比,可以存储更多的数据。
- 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。通常和分区有关的其他优点包括下面列出的这些。MySQL分区中的这些功能目前还没有实现,但是在我们的优先级列表中,具有高的优先级;我们希望在5.1的生产版本中,能包括这些功能。
- 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。
- 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。
- 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
3), 查看分区
SELECT
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
FROM
INFORMATION_SCHEMA.partitions
WHERE
TABLE_SCHEMA = schema()
AND TABLE_NAME='table';
或者
select partition_name, subpartition_name, table_rows
from information_schema.partitions
where table_name = 'jmx_sta';
2, 事件
具体可见:
http://blog.csdn.net/jesseyoung/article/details/35257527
https://www.cnblogs.com/zoro-zero/p/6511203.html
2.1, 查看事件的开启状态
show variables like '%event_schedule%';
2.2, 将事件更改为开启状态
set global event_scheduler = ON;
2.3 查看调度事件
show processlist;
2.4 查看事件
show events;
2.5 删除事件
drop event if exists event_second;
添加定时分区任务
1), 创建表并初始化分区(必须有初始化分区)
DROP TABLE IF EXISTS `jmx_sta`;
CREATE TABLE `jmx_sta` (
`host` varchar() DEFAULT NULL COMMENT '主机',
`time` TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
`object` varchar() DEFAULT NULL COMMENT '对象',
`attribute` varchar() DEFAULT NULL COMMENT '属性',
`value` DOUBLE,
PRIMARY KEY (`host`, `time`, `object`, `attribute`)
) ENGINE=InnoDB CHARSET=utf8
PARTITION BY RANGE (unix_timestamp(time)) (
PARTITION p20171231 VALUES LESS THAN (unix_timestamp('2017-12-31 23:59:59')),
PARTITION p20180101 VALUES LESS THAN (unix_timestamp('2018-01-01 23:59:59')),
PARTITION p20180102 VALUES LESS THAN (unix_timestamp('2018-01-02 23:59:59'))
);
2), 添加存储过程
DELIMITER $$
USE `iris`$$ #使用库
DROP PROCEDURE IF EXISTS `create_Partition_jmx_status`$$
CREATE DEFINER=`iris_admin`@`.%` PROCEDURE `create_Partition_jmx_status`() # grant的授权
BEGIN
#DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
SELECT REPLACE(partition_name,'p','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
WHERE table_name='jmx_status' ORDER BY partition_ordinal_position DESC LIMIT ;
SET @Max_date= DATE(DATE_ADD(@P12_Name+, INTERVAL DAY))+;
SET @s1=CONCAT('ALTER TABLE jmx_status ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (unix_timestamp (''',DATE(@Max_date),' 23:59:59'')))');
SELECT @s1;
PREPARE stmt2 FROM @s1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
COMMIT ;
END$$
DELIMITER ;
3, 添加定时事件
DELIMITER ||
CREATE EVENT Partition_jmx_status_perday
ON SCHEDULE
EVERY day STARTS '2018-01-05 23:59:50'
DO
BEGIN
CALL `create_Partition_jmx_status`;
END ||
DELIMITER ;
添加定时删除分区任务:
CREATE DEFINER=`iris_admin`@`.%` PROCEDURE `delete_Partition_jmx_status`()
BEGIN
#DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
SELECT REPLACE(partition_name,'p','') INTO @P13_Name FROM INFORMATION_SCHEMA.PARTITIONS WHERE table_name='jmx_status' ORDER BY partition_ordinal_position DESC LIMIT ;
SET @Min_date= DATE(DATE_SUB(@P13_Name+, INTERVAL DAY))+;
SET @s2=CONCAT('ALTER TABLE jmx_status DROP PARTITION p',@Min_date);
SELECT @s2;
PREPARE stmt2 FROM @s2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
COMMIT ;
END
2, 定时调用
在上一个的定时任务中, 在调用一次:
BEGIN
CALL `create_Partition_jmx_status`;
CALL `delete_Partition_jmx_status`;
END
mysql-定时对表分区的更多相关文章
- zabbix使用mysql数据库 对表分区
zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...
- MYSQL定时创建表分区
MYSQL定时创建表分区 一.存储过程-表分区-----------------------------------------------------------------需求: 每月创建一个分区 ...
- MySQL的表分区详解
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
- MySQL的表分区(转载)
MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
- MySQL数据库表分区功能详解
1.什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表 ...
- mysql数据库表分区详解(数量过大的数据库表通过分区提高查询速度)
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
- mysql中的分区
第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...
- mysql优化之分区
mysql分区类型 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会 ...
- MySQL定时执行脚本(计划任务)命令实例
在mysql中我们可以直接进行一些参数设置让它成定时为我们执行一些任务了,这个虽然可以使用windows或者linux中的计划任务实现,但是mysql本身也能完成 查看event是否开启 复制代码 代 ...
随机推荐
- C#-ado.net学习笔记-会有更新
ado.net 通用类对象.在本地内存暂存数据 托管类对象.让本地通用类对象连接数据库,让本地通用类对象和数据库同步 连接数据库 new connection(connectstring) comma ...
- 给公司服务器装web服务器,邮件服务器——安装SecureCRT
系统用centos5.9 首先在window上安装SecureCRT终端 1:首先验证安装secureCRT的本地机和linux服务器能否ping的通: 2:判断linux 服务端是否安装了ssh 若 ...
- C#、.Net经典面试题目及答案
1 请你说说 .NET 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建 和销毁的,所以不需要默认的构造函数和 ...
- STL-容器库101--array【C11】
1. 原型 C11提供 template < class T, size_t N > class array; T: 元素类型,以 array::value_type 作为别名使用:N: ...
- [LISP] LISP Collections
lispbox: https://common-lisp.net/project/lispbox/ SBCL: http://sbcl.org/ <Common Lisp in practica ...
- Delphi 在DLL中使用DevExpress控件时出错解决办法
测试环境 DevExpress VCL 14.1.3 和XE7 问题:在dll使用cxGrid控件时 如果不添加列标题 则不报错 查询无数据集显示,如果加上标题 就报错了 这段为报错部分 fun ...
- 设计模式:visitor
拜访者模式(visitor)适用于对复杂结构体进行解析的场景. 所谓复杂结构体,是指包含多个子元素的对象,比如集合,树,图,或者组合对象--.结构体中的每个元素,包括结构体本身实现接口: Elemen ...
- Android常用库和插件
下拉刷新 PullLoadMoreRecyclerView 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 https://github.co ...
- HSmartWindowControl 之 摄像头实时显示( 使用 WPF )
1.添加Halcon控件,创建WPF项目 在VS2013中创建一个WPF工程,然后添加halcon的控件和工具包,参见: HSmartWindowControl之安装篇 (Visual Studio ...
- Linux Compile Multiple C++ Files
Compile Two Files: $ CC -c Main.cc Sales_item.cc # by default generates a.exe # some compilers gener ...