#DBバックアップがだんだん遅くなってきた!
- 運用当初は40分で完了していた日時DBバックアップ(全テーブルのmysqldump)
- 1年ほど運用を続けていくうちに遅くなっていき、最終的に80分かかるようになった
##mysqldumpはテーブル全件のselect
- selectが遅くなっている原因の一つが、テーブルのフラグメント化
- 主に行の削除で歯抜けが発生し、検索効率が悪くなっている
##速くするために「OPTIMIZE TABLE」を実施
OPTIMIZE TABLE テーブル名;
- OPTIMIZE TABLEはinnoDBで実施すると、全件削除+投入になる
- delete→insertを毎日繰り返しているようなテーブルに効果が高い
##具体的には以下のようにしてます
- ロックがかかるので、システム稼働中は流せない
- 全テーブルを5回に分け、システム停止時間帯に実施
- 01:16:28 ⇒ 00:51:28 25分速くなった!
- ほっておくとまた遅くなるので、cronで月に一度実施するように設定
※MySQLのバージョンは5.5です