MySQL - オーバーヘッドの最適化!
Updated:
WordPressをしばらく使用していると、時々MySQLが原因で動作が重くなることがあります。 その主な原因は、DBへのINSERTやDELETEが頻繁に行われることによるフラグメンテーションの増加です。 今日はその解決方法についてです。
解決方法
その1.phpMyAdminによるテーブル最適化
過去記事「MySQL − オーバーヘッドの削除!」を参照。
その2.SQL文による最適化
MySQLサーバにログイン後、以下のコマンドを実行する。 (参照 → MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.2.5 OPTIMIZE TABLE 構文)
OPTIMIZE TABLE wp_options;
※上記はwordpressデータベースのwp_optionsテーブルの例です。 ※この方法はストレージエンジン「MyISAM」、「InnoDB」のテーブルに有効です。
その3.コマンドラインからの最適化
シェルコマンドラインで以下のコマンドを実行する。 (参照 → MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.11 mysqlcheck - テーブル メンテナンスと修復プログラム)
mysqlcheck -o -r -u root -phogehoge wordpress
※上記はMySQLサーバにrootでログインし、wordpressデータベースの全テーブルを最適化・修復する例です。 ※この方法はストレージエンジン「MyISAM」のテーブルに有効です。「InnoDB」のDBには無効です。
思いつくのは以上3つの方法です。
当方は、以前はphpMyAdminで閲覧したついでに上記の「その1」の方法で最適化していましたが、最近は毎日cronによる自動化処理にしています。
自動化処理
上記の「その3」の処理を自動化します。 以下の処理はScientificLinux6.1サーバにおける処理です。お使いの環境によっては適宜読み替えてくさい。
1.実行シェル作成
ルートに「mysql-optimize.sh」というファイルを以下の内容で作成します。
#!/bin/bash
mysqlcheck -o -r -u root -phogehoge wordpress
2.実行シェルに実行権限
作成した「mysql-optimize.sh」に実行権限を与える。
# chmod 700 mysql-optimize.sh
3.cron設定
「mysql-optimize.sh」を定期実行するためにcron登録します。 「/etc/cron.d」ディレクトリに「mysql-optimize」というファイルを以下の内容で作成します。
0 2 * * * root /root/mysql-optimize.sh > /dev/null
※上記は毎日午前2時にroot権限でルートの「mysql-optimize.sh」を実行し、エラーがあったらroot宛にメール通知する例です。
以上です。
Comments