程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 清理8組nodes中表的歷史數據,平均每個node中的表有1.5億條記錄

清理8組nodes中表的歷史數據,平均每個node中的表有1.5億條記錄

編輯:MySQL綜合教程

清理8組nodes中表的歷史數據,平均每個node中的表有1.5億條記錄   清理8組nodes中表的歷史數據,平均每個node中的表有1.5億條記錄,需要根據date_created字段清理8000W數據記錄,這個字段沒有索引。   環境介紹  線上磁盤空間不足,truncate了許多能動的表,磁盤空間還是占據了87%,我們的nagios報警閥值是80%。所以不斷的還會收到email以及短信報警。需要根據時間字段date_created清理,但是在設計之初由於當初的開發人員考慮不足所以date_created字段沒有建立索引。另外這些數據可以不用備份,直接刪除掉。   問題來了,這麼大記錄量的表,根據date_created字段刪除記錄,而且還沒有索引,難度肯定非常大。enl.ibd文件大小29G大小,磁盤剩余空間32G,兩者差距比較小。

[mysql@xxxx-xxx ide]$ ll -h enl.ibd
-rw-rw---- 1 mysql mysql 29G Aug 30 07:21 enl.ibd

 

  方案策劃中,大概准備采用shell命令。 雖然date_created 沒有索引,但是我們做過實驗
mysql> select * from enl where date_created < "2013-01-01 00:00:00" limit 1000;
......
1000 rows in set (0.00 sec)

 

看來執行效果還不錯,那再試下delete效果
mysql> delete from enl where date_created < "2013-01-01 00:00:00" limit 1000;
Query OK, 1000 row affected (2.00 sec)

 

  看起來可以每次刪除1000條,寫腳本delete吧
for ((i=0;i<1000000;i++));do mysql -uroot -e 'use iden;delete  from enl where date_created < "2013-01-01 00:00:00" limit 1000;';done

 

  等delete操作完成之後,找業務低峰期執行 alter table enl  engine=innodb;來釋放磁盤空間。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved