加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

这样做数据整理,可以停止激发MySQL妨碍

发布时间:2018-10-16 17:28:13 所属栏目:编程 来源:DBAplus社群
导读:【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道 凡是来说,机能监控类营业场景具稀有据导入量大、表空间增添快的特点,为了停止磁盘空间被占满,并进步SQL执行服从,要按期对汗青数据举办整理。按照数据收罗频率和保存周期的差异,可在应

分区表的另一个甜头是对付应用措施来说不消修改代码,通过对后端数据库举办配置,以表的时刻字段做分区字段,就可以轻松实现表的拆分,必要留意的是查询字段必需是分区键,不然会遍历全部的分区表,下面看一下详细的实验进程:

Step 1:起首,建设分区表。在这里我们就以perf_biz_vm表为例,建设沟通表布局的新表,并把它定名为perf_biz_vm_new,操作create_time索引字段做分区字段,按天做分区并与主键一路建设连系索引,建设语句:

代码如下:

  1. CREATE TABLE `perf_biz_vm_new` ( 
  2.  
  3. `CREATE_TIME` datetime NOT COMMENT '机能收罗时刻', 
  4.  
  5. `VM_ID` varchar(80) NOT COMMENT '假造机ID', 
  6.  
  7. `PROCESSOR_USED` varchar(100) DEFAULT COMMENT 'CPU操作率(%)', 
  8.  
  9. `MEM_USED` varchar(100) DEFAULT COMMENT '内存的行使率(%)', 
  10.  
  11. `MEM_UTILITY` varchar(100) DEFAULT COMMENT '可用内存量(bytes)', 
  12.  
  13. `BYTES_IN` varchar(100) DEFAULT COMMENT '流入流量速度(Mbps)', 
  14.  
  15. `BYTES_OUT` varchar(100) DEFAULT COMMENT '流出流量速度(Mbps)', 
  16.  
  17. `PROC_RUN` varchar(100) DEFAULT COMMENT 'CPU运行行列中历程个数', 
  18.  
  19. `WRITE_IO` varchar(100) DEFAULT COMMENT '假造磁盘写入速度(Mb/s)', 
  20.  
  21. `READ_IO` varchar(100) DEFAULT COMMENT '假造磁盘读取速度(Mb/s)', 
  22.  
  23. `PID` varchar(36) NOT , 
  24.  
  25. PRIMARY KEY (`PID`,`CREATE_TIME`), 
  26.  
  27. KEY `mytable_categoryid` (`CREATE_TIME`) USING BTREE, 
  28.  
  29. KEY `perf_biz_vm_vm_id_create_time` (`VM_ID`,`CREATE_TIME`) 
  30.  
  31. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='假造机机能收罗表' 
  32.  
  33. /*!50500 PARTITION BY RANGE COLUMNS(CREATE_TIME) 
  34.  
  35. (PARTITION p20180225 VALUES LESS THAN ('20180226') ENGINE = InnoDB, 
  36.  
  37. PARTITION p20180226 VALUES LESS THAN ('20180227') ENGINE = InnoDB, 
  38.  
  39. PARTITION p20180227 VALUES LESS THAN ('20180228') ENGINE = InnoDB, 
  40.  
  41. PARTITION p20180228 VALUES LESS THAN ('20180229') ENGINE = InnoDB, 
  42.  
  43. PARTITION p20180229 VALUES LESS THAN ('20180230') ENGINE = InnoDB) */ 

Step 2:用新的分区表替代原有旧表。这里必要留意的是,执行rename操纵会对perf_biz_vm表的元数据举办修改,需提前搜查有无对此表的Delete、Update、Insert事宜与DDL操纵,不然斗嘴会发生元数据锁(Metadata Lock)。

我们的做法是提前将营业侧的按时器停掉,并在营业低谷时执行如下语句,将旧表和新表通过rename的方法交流,让新表纳入行使。时代如有营业挪用,则会短暂断开营业。

  1. rename table perf_biz_vm to perf_biz_vm_old; 
  2. rename table perf_biz_vm_new to perf_biz_vm; 

Step 3:查察到新表稀有据写入,云监控页面数据表现正常,声名营业规复。云主机监控数据的生涯周期是两天,因此必要将旧表两天前的数据拷贝到新表,该步调通过脚原来完成,可参考以下剧本:

代码如下:

  1. #!/bin/bash  
  2. function insert{  
  3. end_time="$1 $2"  
  4. start_time="$3 $4"  
  5. mysql -u'user' -p'passwd' << !  
  6. use monitor_alarm_openstack;  
  7. set innodb_flush_log_at_trx_commit=0;  
  8. start transaction;  
  9. insert into perf_biz_vm select * from perf_biz_vm_old where create_time < '$end_time' and create_time > '$start_time';  
  10. commit;  
  11. select TABLE_ROWS from information_schema.tables where TABLE_SCHEMA ="monitor_alarm" and TABLE_NAME="perf_biz_vm";  
  12. !  
  13. }  
  14. base_time="2018-02-27 2:00:00"  
  15. while true  
  16. do  
  17. #end_time=$(date -d "-1hour $base_time" +%Y-%m-%d" "%H:%M:%S)  
  18. end_time=$base_time  
  19. start_time=$(date -d "-1hour $end_time" +%Y-%m-%d" "%H:%M:%S)  
  20. #base_time=$end_time  
  21. base_time=$start_time  
  22. echo "Cur_time: $(date +%Y%m%d" "%H%M%S)" | tee -a 1.log  
  23. echo "Range: $end_time $start_time" | tee -a 1.log  
  24. insert ${end_time} ${start_time} | tee -a 1.log  
  25. sleep 2  
  26. done 

Step 4:编写存储进程用于按期建设新的分区,并删除几天前旧的分区:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读