truncate/drop表非常慢,怎么办?用硬链接,极速体验
这个这个,我必须花巨大篇幅,记录下今天清空表记录的英雄壮举,可知道一个drop操作,执行了一下午啊一下午,这是要急出翔的节奏。。呵呵,下面开始
我的需求:某表因历史原因,积压了1亿条记录,约占360G空间。我要清掉它,就是这么简单。
尝试1:作为DB小菜,首先想到的,当然是delete命令。于是欢快的执行了delete from mytable; 知道吗?一杯茶都喝完了,它还没有执行完。我的尊严受到了挑战,捉急了,开始google。
尝试2:好,换用truncate命令。truncate table mytable; 知道吗?第二坏茶喝完了,它还没有执行完。快急出翔了,继续google。
尝试3:好,干脆drop表好了。drop table mytable; 知道吗?第三杯茶喝完了,它还没有执行完。这下快吓尿了,这是什么情况。。。赶快找大牛问
当然,drop之前别忘了先备份一下表结构,一会儿drop完了还得重新建表,那得多麻烦呀,嘿嘿
create table mytable_bak like mytable; // 备份
drop table mytable; // 删表
alter table mytable_bak rename to mytable; // 重新命名
尝试4:大牛说,不妨改一下这两个开关,可以加速drop。于是,又等了10min,窗外雨都下停了,还是没有执行完。。。
truncate有索引的表和没有索引的表速度一样吗?
1 | insert into 结果表1 select col1,col2,col3... from 原始表1,原始表2 where XXX and XXX.... |
MySQL删除数据Delete与Truncate语句使用比较
作者: 字体:[增加 减小] 类型:转载 时间:2012-09-12
Check DB Server环境.
1 察看内存以及缓存
top - 07:55:56 up 256 days, 4:53, 3 users, load average: 0.00, 0.09, 0.22
Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombieCpu0 : 2.2%us, 0.9%sy, 0.0%ni, 96.4%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%stCpu1 : 2.4%us, 1.1%sy, 0.0%ni, 96.0%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%stCpu2 : 2.3%us, 0.9%sy, 0.0%ni, 96.3%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%stCpu3 : 2.2%us, 0.9%sy, 0.0%ni, 96.4%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%stMem: 32750360k total, 32472008k used, 278352k free, 271932k buffersSwap: 4194296k total, 505844k used, 3688452k free, 3554324k cached
2 察看系统版本
[novamysqladminlt@nucltmapc04db01 ~]$ cat /etc/issue
Red Hat Enterprise Linux Server release 6.3 (Santiago)Kernel \r on an \m
3 察看操作系统位数
[xxxxx@xxxxxx~]$ ldd /sbin/mii-tool
linux-vdso.so.1 => (0x00007fff9b1ff000) libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003ec2400000) libc.so.6 => /lib64/libc.so.6 (0x0000003ec0c00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003ec0800000) /lib64/ld-linux-x86-64.so.2 (0x0000003ec0400000)
4 察看磁盘
[xxx@xxx~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 505928 274840 272104 3558732 0 0 3 58 0 0 2 1 96 0 0 0 0 505928 274732 272104 3558772 0 0 0 112 1036 1438 1 1 98 0 0 1 2 505928 274732 272104 3558812 0 0 0 1796 960 1276 1 2 96 2 0 1 0 505928 269112 272104 3558836 0 0 0 5564 2005 1861 12 5 83 1 0 0 0 505928 274484 272104 3558864 0 0 0 112 1568 1969 11 2 87 0 0 0 0 505928 274484 272104 3558892 0 0 0 128 924 1221 1 2 97 0 0 1 0 505928 274468 272104 3558916 0 0 0 96 1563 1268 8 3 89 0 0
5 查看io资源
[xxx@xxx~]$ iostat -x 1
Linux 2.6.32-279.14.1.el6.x86_64 (nucltmapc04db01.abn-sjl.ea.com) 08/28/2013 _x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 2.30 0.00 0.98 0.44 0.02 96.26Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %utilvda 0.04 10.93 0.16 12.11 23.96 465.30 39.87 0.07 5.51 1.98 2.42dm-0 0.00 0.00 0.00 0.01 0.04 0.09 9.79 0.00 2.88 0.84 0.00dm-1 0.00 0.00 0.02 0.03 0.19 0.26 8.00 0.00 10.82 0.36 0.00dm-2 0.00 0.00 0.00 0.13 0.07 1.01 8.34 0.00 2.01 0.75 0.01dm-3 0.00 0.00 0.00 0.35 0.04 2.81 8.08 0.01 16.10 0.31 0.01dm-4 0.00 0.00 0.00 0.01 0.00 0.05 8.00 0.00 1.87 0.39 0.00dm-5 0.00 0.00 0.00 0.05 0.00 0.43 8.00 0.00 2.52 0.33 0.00dm-6 0.00 0.00 0.00 0.01 0.02 0.06 9.89 0.00 4.01 0.90 0.00dm-7 0.00 0.00 0.00 0.00 0.00 0.00 7.96 0.00 0.61 0.56 0.00dm-8 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 1.80 1.37 0.00dm-9 0.00 0.00 0.00 0.13 0.00 1.02 8.00 0.00 1.89 0.72 0.01dm-10 0.00 0.00 0.17 22.33 23.59 459.57 21.48 0.05 2.28 1.07 2.40dm-11 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 1.37 0.77 0.00dm-12 0.00 0.00 0.00 0.00 0.00 0.00 7.96 0.00 0.99 0.85 0.00avg-cpu: %user %nice %system %iowait %steal %idle 1.26 0.00 1.26 0.00 0.00 97.47Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %utilvda 0.00 17.00 1.00 7.00 8.00 192.00 25.00 0.01 0.75 0.38 0.30dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-10 0.00 0.00 1.00 24.00 8.00 192.00 8.00 0.02 0.92 0.12 0.30dm-11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00avg-cpu: %user %nice %system %iowait %steal %idle 9.55 0.00 4.02 0.00 0.25 86.18Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %utilvda 0.00 19.00 0.00 7.00 0.00 208.00 29.71 0.00 0.14 0.14 0.10dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-10 0.00 0.00 0.00 26.00 0.00 208.00 8.00 0.01 0.27 0.04 0.10dm-11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00dm-12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
(1)delete在事务中可以回滚
mysql>select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows inset (0.00 sec)
mysql>begin;
Query OK,0 rows affected (0.00 sec)
mysql>delete from t where id=2;
Query OK,1 row affected (0.04 sec)
mysql>select * from t;
+----+
| id |
+----+
| 1 |
+----+
1 row inset (0.00 sec)
mysql>rollback;
Query OK,0 rows affected (0.01 sec)
mysql>select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows inset (0.00 sec)
(2)truncate在事务中不能回滚
mysql>begin;
Query OK,0 rows affected (0.00 sec)
mysql>truncate table t;
Query OK,0 rows affected (0.03 sec)
mysql>rollback;
Query OK,0 rows affected (0.00 sec)
mysql>select * from t;
Empty set(0.00 sec)
mysql>
转 MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化
(2014-10-26 15:06:22)标签: |
如果需要保留的数据比较少的话,可以把要保留的数据备份出来。在drop表。重新创建,先不要急着创建索引、主键,把数据导回去,然后在建索引、约束之类的。