【原創】阿裏雲RDS數據庫超大表分區實現
阿新 • • 發佈:2018-06-06
cpu bind 實現 表分區 HR 表數 alt bold inf
[背景]
- 一張數據量約1億條數據的表,由於最初設計疏忽,未做分區,現需要根據創建時間字段來做分區;
- 業務要求,該表僅需要保留3個月的數據,數據量在9千萬~1億3千萬左右;
- 業務允許短時間停機,10分鐘左右;
- 該表數據,僅最近14天左右數據會有更新操作,其余數據為統計查詢;
- 原表創建時間用的timestamp,無法作為分區字段;
- ID為主鍵;
[RDS信息]
- 數據庫類型:MySQL 5.6;
- CPU:8核;
- 最大連接數:8000;
- 最大IOPS:12000;
[解決思路]
- 創建新的分區表,與原表保持同樣的結構,將創建時間類型改為datetime;
- 分批寫入歷史數據,每次1000萬,大約7分鐘時間;(查出最近14天會更新的最小ID,這批數據停機插入!
- 停機插入最後的14天數據;
- Rename表,重啟服務;
insert my_table_temp select * from my_table where id>= 150000000 and id< 160000000;
RENAME TABLE my_table TO my_table_to_delete; RENAME TABLE my_table_temp TO my_table ; DROP TABLE my_table_to_delete;
[總結]
這種方案還是有些限制的,比如能段時間停服務,且有明確歷史數據不會更新,否則可能需要添加trigger來解決了。
【版權申明】未經博主同意,謝絕轉載!(請尊重原創,博主保留追究權)
https://www.cnblogs.com/cooqer/p/9139873.html
出自【Cooqer的博客】
【原創】阿裏雲RDS數據庫超大表分區實現