MySQL4でテーブルパーティショニング      



2007年10月21日

MySQL4でテーブルパーティショニング

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

チックなことをMERGEテーブル(MRG_MyISAM)を使ってやってみたので備忘録。

まず制限事項
・REPLACE構文が使用不可

ついでに圧縮テーブルの制限事項
・読み取り専用になる


構成としては

A
├A000
├A001
└A002

AはMERGEテーブルなので実データはない。
A000がアクティブテーブル、A001,A002はいわゆるアーカイブ。
なので、A001とA002は圧縮テーブルを使用してみる。

A000のデータが一定量を超えたらAXテーブルに移動して、MERGEテーブル
をリビルドするローテートの部分は手動か、別途シェルでも作成する
必要がある。

ローテートサイズは、テーブル構成やサーバ性能にもよるが、データサイズで200Mとか。

(200*1024*1024)/AVG_ROW_LENGTH=ローテートレコード数

以下AAテーブルを上記構成にした時の作業ログ。

mysql>SHOW TABLE STATUS LIKE AA \G

で、テーブル構成を調べられる。

※AAテーブルは500Mbyte、150万レコード、AVG_ROW_LENGTH:140
 分割レコード数は60万

■データ分割 ・A001
mysql>CREATE TABLE A001 SELECT * FROM AA LIMIT 0,600000;
・A002
mysql>CREATE TABLE A002 SELECT * FROM AA LIMIT 600000,600000;
・A000
mysql>CREATE TABLE A000 SELECT * FROM AA LIMIT 1200000,600000;
■テーブル圧縮 cd 「AAテーブルデータが格納されているディレクトリ」
myisampack -v A001
myisamchk -rq --analyze --sort-index A001.MYI
myisampack -v A002
myisamchk -rq --analyze --sort-index A002.MYI

※テーブルを圧縮した後に必ずインデックスをリビルドしておかないとエラーになる。
 参考速度:テーブルデータ:235M、インデックスデータ52Mの場合で37s,18s
 @CPU:Xeon5110*2,Memory:4G,HDD:SAS 15Krpm*2(RAID-1)

圧縮率は約50%程。

■マージテーブル作成
mysql>SHOW CREATE TABLE AA;
でDDL作成して、MERGEテーブル用に修正すると
CREATE TABLE A (........) DEFAULT CHARSET=utf8
ENGINE = MERGE
UNION = (A001,A002,A000) INSERT_METHOD = LAST
となる。

※AUTO_INCREMENTは値指定無しでも自動的に最後尾に追加される

アクティブテーブルが閾値を超えた場合は、A003テーブルにローテート後、
MERGEテーブルを再構築(DROP、CREATE)する。

trackbacks

trackbackURL:

comments

comment form
comment form





MSN:chrome_fs@hotmail.co.jp
※メッセ専用

800*600 ATOM1.0
RSS1.0 RSS2.0
人気ブログランキング - Free Style