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