Yahoo MySQL Partition Manager 使用教學
當資料表的資料量過大時,可透過 partition 進行切表,藉此提升查詢效率。
也由於是切表,當資料在做 housekeeping 時,也不會造成資料表的 lock。
今天要跟大家介紹,使用 mysql 時,如何動態且有效率地去進行 partition 劃分。
創建
partition有些限制,如:partition的值,需要是pk的一部分。
或是當有partition時,創建unique key需要包含partition的值。
Quick Start
我們介紹的工具是 Yahoo 出的MySQL Partition Manager,我們可以透過簡單資料表 insert 就達到每日定時切分 partition。
我們希望可以做到每天執行每日切分,並且多切兩天的日期。
以下是範例,請參考:
首先可先執行以下 SQL 檔案
創建欲使用
partitiontable將欲切分的資料表寫入設定
這邊針對
partition_manager_settings表,進行說明column由於原本create_time欄位使用的 type 為datetime,因此需要加上TO_DAYS(create_time)granularity單位為秒,increment為每次增加切分的單位時長buffer為需要多創建的時間
1
2
3INSERT INTO partition_manager_settings (`table`, `column`, granularity, increment, retain, buffer) VALUES ('game_record', 'TO_DAYS(create_time)', 1, 86400, null, 172800);
INSERT INTO partition_manager_settings (`table`, `column`, granularity, increment, retain, buffer) VALUES ('player_order', 'TO_DAYS(create_time)', 1, 86400, null, 172800);
INSERT INTO partition_manager_settings (`table`, `column`, granularity, increment, retain, buffer) VALUES ('player_wallet_history', 'TO_DAYS(create_time)', 1, 86400, null, 172800);執行 SP
執行 SP 後會先拆分,後續每日會有event進行切分工作。1
call partition_manager();
驗證
執行日期為 2023-08-29 切分了 3 個 partition,分別為 1693353600 、 1693353600 與 1693526400 。1
2
3
4
5
6
7partition by range (to_days(`create_time`)) (
partition p_START values less than (0),
partition p_1693353600 values less than (1693353600),
partition p_1693440000 values less than (1693440000),
partition p_1693526400 values less than (1693526400),
partition p_END values less than (MAXVALUE)
);
1693353600換算時間為2023-08-30 00:00:00
當create_time為2023-08-29的資料時,皆會在此partition內。
這次的介紹就到這邊,如果有其他問題請再跟我說。
Reference
Donate
謝謝您的支持與鼓勵