[MySQL]MySQLでパーティショニングを使う場合の例

logo-mysql-110x57
MySQLでパーティショニングを使う場合の例

#既存のテーブルにパーティションを作成
ALTER TABLE table_name 
PARTITION BY RANGE (id) (
PARTITION 1000000_table_name VALUES LESS THAN (1000000),
PARTITION 2000000_table_name VALUES LESS THAN (2000000),
…
 PARTITION p_max_table_name VALUES LESS THAN MAXVALUE
)
#最大値をLESS THAN MAXVALUEで指定しているが、可能であれば余裕をもってパーティションを定義しておき、足りなくなりそうだったら追加していく方が良い。


#パーティショニングテーブルの追加
ALTER TABLE table_name
  ADD PARTITION ( PARTITION p50_table_name VVALUES LESS THAN (50));

#パーティショニング状態の確認
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS 
WHERE TABLE_NAME='table_name';

#パーティショニングの解除
ALTER TABLE table_name REMOVE PARTITIONING;

#パーティショニングテーブルの削除(データが削除されます)
ALTER TABLE table_name
ADD PARTITION ( PARTITION p_max_table_name VALUES LESS THAN MAXVALUES);

ちなみに、テーブル数を増やしすぎるとmysqldの扱えるファイルディスクリプタ数(一度に開けるファイル数=テーブル数)が足りなくなってしまうことがあります。
/etc/my.cnf に以下のようにopen_files_limitを設定しましょう。
数値は、使っているテーブル数とサーバーの搭載メモリで決定することになります。
[mysqld_safe]
open_files_limit = 8192

タイトルとURLをコピーしました