大量数据删除
来源:互联网 发布:java架构师是做什么的 编辑:程序博客网 时间:2024/05/16 09:48
今天领导安排一个任务,将一张日志表中7月份之前的日志都删除掉。
我查了一下数据量发现,现在总共有190多万的数据,7月份之前有150多万,这要删除大头啊。
开始,我使用delete语句,如下:
delete from log_table where create_time < '2013-07-01';
这时候问题就来了,我等了5分钟了,程序好像死在那里了,没反应。同时,操作系统还设置了超时限制,如果一定时间不操作,系统会自动断开连接(我是远程连接的服务器。
感觉时间有点长,就决定先删一小部分,6月份之前的,不多只有4万多条。但是在删除中报了一个错误。
经过一阵子谷歌(对数据库不熟悉),发现之前对数据操作没有完整执行,需要杀掉原来的执行线程。方法如下:
mysql>show processlist;+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+------+---------+------+-------+------------------+| 7 | root | localhost | yy | End | 154 | | delete ..... || 8 | root | localhost | NULL | Query | 0 | NULL | show processlist |+----+------+-----------+------+---------+------+-------+------------------+2 rows in set (0.00 sec)
发现id为7的线程是刚才执行的删除语句,已经不再执行了,但是仍然占着表,导致其他删除语句无法执行。
此时,需要杀掉线程。执行如下:
mysql> kill 7;mysql> show processlist;+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+------+---------+------+-------+------------------+| 8 | root | localhost | NULL | Query | 0 | NULL | show processlist |+----+------+-----------+------+---------+------+-------+------------------+1 row in set (0.00 sec)
此时,可以对日志表进行删除操作了。
就在删除过程中发现用delete删除数据特别慢,就用了一个其他的方式:
1.先将日志表结构和7月份及以后数据备份下来,我使用sql文件
mysql> mysqldump -u root -p dataname --add-drop-table --where="create_time > '2013-07-01' tablename > /home/root/log.sql
2.删除整个日志表
mysql> drop table table_name;
3.将第一步备份数据恢复回去
mysql> source /home/root/log.sql
至此完成数据的删除任务,使用最后的办法只需要几分钟,如果使用delete语句不知道需要多长时间。
-------------------------------------------------留作备忘--------------------------------------------
文中杀掉线程方式引用:http://blog.sina.com.cn/s/blog_56fd58ab0100q61s.html
阅读全文
0 0
- 有条件删除大量数据
- oracle 删除大量数据
- 大量数据删除
- 批量删除大量数据
- sqlserver 一次性删除大量数据
- Oracle大量删除数据方案
- 存储过程删除大量数据
- oracle删除大量重复数据
- MySQL删除表大量数据
- SQL Server2008 删除大量数据
- SQL分段处理删除大量数据
- sql分段处理删除大量数据
- ORACLE删除重复记录(大量重复数据)
- 创建过程删除大量数据的方法
- mysq怎么快速删除大量数据
- 删除大量Oracle数据方法总结
- 如何删除大量数据 sql server2005
- oracle 删除大量数据的方法
- loadrunner运行输出乱码解决办法
- TIM_OCMode_PWM2;TIM_OCMode_PWM1
- java获取当月第一天的零点零分和最后一天的23点59分
- eclipse中maven使用
- 将java的jar包导入oracle,通过oracle调用java方法
- 大量数据删除
- iOS UINavigationController 修改默认的动画
- JAVA排序
- 2016年GitHub上史上最全的Android开源项目分类汇总
- Android 禁止屏幕旋转 & 屏幕旋转不刷新 Activity & 动态更改屏幕方向
- Android之Eclipse导入Android源码
- LTE系统调试记录13: LTE物理传输资源(1)-帧结构和OFDM符号
- 正确下载安装与破解Unity5.x 最新版本的详细步骤
- RCNN,Fast-RCNN,Faster-RCNN,SSD,DPM检测框架