1. 程式人生 > >【原創】阿裏雲RDS數據庫超大表分區實現

【原創】阿裏雲RDS數據庫超大表分區實現

cpu bind 實現 表分區 HR 表數 alt bold inf

[背景]

  1. 一張數據量約1億條數據的表,由於最初設計疏忽,未做分區,現需要根據創建時間字段來做分區;
  2. 業務要求,該表僅需要保留3個月的數據,數據量在9千萬~1億3千萬左右;
  3. 業務允許短時間停機,10分鐘左右;
  4. 該表數據,僅最近14天左右數據會有更新操作,其余數據為統計查詢;
  5. 原表創建時間用的timestamp,無法作為分區字段;
  6. ID為主鍵;

[RDS信息]

  1. 數據庫類型:MySQL 5.6;
  2. CPU:8核;
  3. 最大連接數:8000;
  4. 最大IOPS:12000;

[解決思路]

  1. 創建新的分區表,與原表保持同樣的結構,將創建時間類型改為datetime;
  2. 分批寫入歷史數據,每次1000萬,大約7分鐘時間;(查出最近14天會更新的最小ID,這批數據停機插入!
  3. 停機插入最後的14天數據;
  4. 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數據庫超大表分區實現