MySQLのパーティショニングのメモです。
MySQLのログ関係のテーブルなど、高速にINSERTする時のエンジンは、MyISAMが早いです。
しかし、MyISAMエンジンでレコードをたくさん削除するとロックして死ねます。
1.MyISAMでレコードをたくさん削除してテーブルロック
2.MySQLでさばけないスレッドがたまる
3.WEBサーバのリクエストもそこでストップ
4.ロードアベレージが上昇
5.WEBサーバがビジーになる
のような感じでしょうか。
そんなことにならないためにもパーティション機能を使い、パーティションの削除と同時にレコードも削除する方法をすると、高速にデリートすることができました。
パーティショニングするとサーバ上のMySQLデータのファイルが分割されて、いろいろ高速化されるみたいです。
以下にパーティションのクエリ例をメモ書きしときます。
MySQL5.1でも使えるそうですが、MySQL5.5でやってます。
パーティションの作成
# パーティションの作成
ALTER TABLE test PARTITION BY RANGE COLUMNS (`update`) (
PARTITION p20120101 VALUES LESS THAN ('2012-01-02'),
PARTITION p20120102 VALUES LESS THAN ('2012-01-03'),
PARTITION p20120103 VALUES LESS THAN ('2012-01-04'),
PARTITION p20120104 VALUES LESS THAN ('2012-01-05'),
PARTITION p20120105 VALUES LESS THAN ('2012-01-06'),
PARTITION p20120106 VALUES LESS THAN ('2012-01-07'),
PARTITION p20120107 VALUES LESS THAN ('2012-01-08'),
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE=myisam
);
パーティションの確認
# パーティションの確認
SHOW CREATE TABLE test
パーティションの追加
# パーティションの追加
ALTER TABLE test REORGANIZE PARTITION pmax INTO(
PARTITION p20120101 VALUES LESS THAN ('2012-01-02'),
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE=myisam
);
パーティションの削除(レコードも消える)
# パーティションの削除(レコードも消える)
ALTER TABLE test DROP PARTITION p20120101
パーティションのリセット(レコード消えない)
# パーティションのリセット(レコード消えない)
ALTER TABLE test REMOVE PARTITIONING
レコードがどこのパーティションにあるか確認
# レコードがどこのパーティションにあるか確認
explain partition select * test
当社ではMySQLに詳しいデータベースエンジニアや、やってみたい方を募集しています。求人情報の詳細はこちら
コメントを残す