MySQLパーティショニングのまとめ

2月 27, 2010

MySQLにパーティショニングという機能があることを最近知った。調べても正直ついて
いけてないが、いつか利用することもあるかもしれないのでまとめておく。

パーティショニングとはテーブルを分割して性能を向上させるための技術で、MySQL5.1
以降実装された。1つのテーブルを分割することにより高速化や要領拡大を実現し、
巨大なテーブルを使用する場合に威力を発揮する。

ちなみにオフィシャルサイトによれば「コンパイル時の不手際」により、MySQL 5.1.12
のバイナリ配布にはパーティショニングは含まれていないため、利用するにはバージョン
アップが必要。

ソースからコンパイルする場合は、- -with-plugins=partitionとともにconfigureを実行する。
(- -with-partitionオプションはもう古いようで警告が出るが、有効にはしてくれる)

パーティショニングを利用するには、テーブル作成時に指定する。
コマンドの具体例に関しては割愛するが、基本構文だけでも書いておくと以下のようになる。

PARTITION BY パーティショニングの種類(定義)

ここで言うパーティショニングの種類とは後述するRANGE、LISTなどである。
なおテーブルの基本的動作は通常のテーブルと変りなく、データ操作においてはパーティ
ショニングを意識する必要はない。

水平パーティショニングと垂直パーティショニング
MySQL 5.1がサポートするのは、行ごとにそれぞれパーティションへ振り分けるタイプの
水平パーティショニングである。
ちなみに垂直パーティショニングはテーブルの一部の列だけを抜き出す形で分割を行い、
カラムごとにそれぞれパーティショニングに割り当てられることになる。

パーティショニング 4つの種類
パーティショニングはある特定のカラム値に注目して行われ、カラム値の評価の仕方により
パーティショニングは次の4つの種類に分類される。

1.RANGE
パーティションごとに範囲を指定して振り分ける。
カラムの値の範囲をパーティションごとに設定する。

2.LIST
パーティションに振り分けられるべき値を直接指定(リストアップ)する。

3.HASH
整数値のカラムに対してMOD()関数(割り算の余り)によりパーティション
の振り分けを行う。

4.KEY
文字列のカラムに対してPASSWORD()関数により算出されるハッシュ値を用いる。

RANGEおよびLISTは、指定したカラム(フィールド)の値によってパーティションに
振り分けるため、どのパーティションにどのようなデータが含まれるか容易にわかる。
逆にパーティションによって格納するデータ量に偏りが発生する可能性はある。

HASHおよびKEYは、パーティションに格納するデータ量に偏りがないように機械的に
振り分けを行う。

と、いうことだそうだ。この辺りは以下リンクを参考にした(というか抜粋)。
第1回:ここが新しい!MySQL 5.1 – パーティショニング
[MySQLウォッチ]第40回 パーティショニングで高速化し大量データに備える

インスタンス全体においてパーティショニングが有効かどうかを確認するには、以下
コマンドを実行し、”have_partitioning “が”YES “ならOK。

mysql> SHOW VARIABLES LIKE ‘%partition%’;

あれこれ書いたけど、理解するには実際に自分で使ってみるしかないでしょうね。

Posted by Le Blue | Categories: MySQL |

No Responses so far | Have Your Say!

Comments are closed.