MySQLのパーティショニング

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に詳しいデータベースエンジニアや、やってみたい方を募集しています。求人情報の詳細はこちら

カテゴリー: mysql

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*