mysql4.0チューニング
諸事情で今となってはレガシーなmySQL4.0に大量のデータをプログラムからぶちこむことになり。。
1時的にでもパフォーマンスをあげなければいけなくなった。
条件
MySQL4.0対象テーブルのストレージエンジンはMyISAM、数百万レコード
3年以上稼働しており、枯れているのでmy.cnfはいじらず。。
検討
- 対象テーブルのindexを一旦解除し、index作成のオーバーヘッドを減らす。
- 対象テーブルのindexを試しに一つ削除してみる
mysql> drop index index_name on table_name;- 消し終わるのに45minかかってしまった。。これでは意味が無い。
- 試しにcreate indexしても同じくらいの時間を要する。一つのindexでこれだけ時間かかってはたまらない。
- alter table disable keysで一時的にindexを無効にしてみる
- ほぼ一瞬で完了。
- しかし、プログラムでデータインサートしており、その際に対象テーブルの参照も行われるので、indexがないことにより逆にめちゃくちゃ時間かかる
- ためしにalter table enable keysでindexしたところ、これも1時間近くかかる
- optimize table table_nameをしてみる
- analyze table table_nameをしてみる
- optimize tableのindexのみ版
- optimizeと比較してかなり早くおわった。
- ただしプログラム実行時間にそこまで違いがないような。。。
- alter table table_name key MyISAM
- 今度はこれで試す
- 対象テーブルのindexを試しに一つ削除してみる