mysql - 大数据量下的操作相关 (4KW记录,32G)

这个时候务必使用SSD硬盘。 

导出需要30分钟。 

导入需要至少1小时(google cloude), 3 小时(SSD), 4小时(SATA硬盘) 

所以,一次导入成功之后,可以copy mysql data_dir , 这样下次就直接复制磁盘就好了。 否则使用SQL恢复的话,4MB/s. 

删除: delete from where ...  ,大约一秒钟1W条。

这个帖子非常经典:https://stackoverflow.com/questions/812512/faster-way-to-delete-matching-rows

不能使用delete删除大数据,因为 在 inno db模式下,delete是需要回滚的, 每个delete操作,如果中途取消,都会完美恢复原来的记录。 而且就算你的delete执行完了, 数据库中的数据也会留下,直到某个 别的进程不再使用那条记录了,才会被删掉。 

解决办法: 参考:https://stackoverflow.com/a/834221/445908

mysql> create table orders_temp like orders;
Query OK, 0 rows affected (0.66 sec)

mysql> insert into orders_temp select * from orders where member_id != 19 ;
Query OK, 531 rows affected (1.66 sec)
Records: 531  Duplicates: 0  Warnings: 0

mysql> drop table orders;
Query OK, 0 rows affected (0.63 sec)

mysql> rename table orders_temp to orders;
Query OK, 0 rows affected (0.12 sec)

执行

insert into orders_temp select * from orders where member_id != 19 ;
如果报错 The total number of locks exceeds the lock table size
需要设置Innodb buffer pool size的值就好了,默认的值是8M;

查看值是多少

mysql > show variables like '%buffer%';
  1. 找到mysql的配置文件中(Linux 在/etc/my.cnf)
  2. [mysqld]配置项中添加进innodb_buffer_pool_size=64MB这行值, 当然如果机器内存足够大,可以按照自己需求设置
  3. 重启mysql(service mysqld restart)

重启之后,可以到mysql下面再次执行show variables like '%buffer%';命令,看看是不是相应的buffer值已经被改变了。

 
posted @ 2021-01-05 17:51  吕兴杰  阅读(148)  评论(0)    收藏  举报