昨天处理数据发现,有个表的主键是VARCHAR类型,数据量超一亿,不方便遍历,删主键再加主键操作超时,提示建议建个新表,然后 insert。
下面是我的步骤:
新建表:
CREATE TABLE `sai_new` ( |
插入数据:
INSERT INTO `sai_new` (`fid`, `xxx`, `live_city`) SELECT `id`, `xxx`, `live_city` FROM `sai_13_old`; |
这步很慢,最后直接报错。
ERROR 1206 (HY000): The total number of locks exceeds the lock table size |
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; |
调大:
SET GLOBAL innodb_buffer_pool_size = 13421772800; |
看下有没有改成功:
可以使用上面的目录,也可以这样。12.5G,增大为原来的100倍。
SELECT @@innodb_buffer_pool_size/1024/1024/1024; |
继续 insert, 奖励了2小时45分36秒后,数据迁移成功。
话说这磁盘写入也是真的慢。
innodb_buffer_pool_size
innodb_buffer_pool_size 是缓冲池大小,必须始终等于 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 或其倍数。主要影响读,且要注意这个参数增大会增大内存占用。