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 檔案
創建欲使用
partition
table將欲切分的資料表寫入設定
這邊針對
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
謝謝您的支持與鼓勵