MySQL 新增表分区很慢,转移大表数据


问题:

MySQL (version 5.7.26) 数据库有一批表 xxx_yyy,由于评估的数据量可能比较大,因此每张表都设置了表分区,把每个月的数据保存在单独的分区里。

那么如果每年年末,没有提前创建好第二年的表分区,当第二年的数据写入时,就会出现以下报错:

ERROR 1526 (HY000): Table has no partition for value from column_list

 

解决:

今年的表分区忘了创建,因此需要批量对以 xxx_ 开头的表创建分区。执行开发提供的存储过程 tmp_addpart("20220101", "20201231") 将遍历指定的表,依次创建表分区。

经过观察,1G 数据的表新建一年的 12 个分区大约需要 6 分钟。观察到还有一些大表(数据亿条以上,大小超过 10G)。

耗时的原因是:如果分区字段不在主键内,需要对表进行主键重建。如果按照大表的数据量,主键重建的速度会非常非常慢。

因为这些表算是中间表,除非重新回溯计算,否则不太会用到历史数据。因此考虑将这些大表的数据进行备份(简单点,直接对表重命名,再创建一个新表)。

RENAME TABLE xxx_yyy TO old_xxx_yyy
CREATE TABLE xxx_yyy LIKE old_xxx_yyy
DESCRIBE xxx_yyy

 

就先这样临时解决吧~

—END—


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM