MySQL最適化

Oba-QサーバーのデータベースであるMySQLに
以前よりモタツキ感が出てきた気がするので
最適化してみました。
事故が有っても良いように必ずバックアップ
してからの作業となります。

Oba-Qサーバーは事情により未だCentOS6の最終版で
MySQLもver.5.1です。

特定のデータベースを最適化
mysqlcheck -o -u username -p databasename

すべてのデータベースを最適化
mysqlcheck -A -o -u username -p

usernameは通常rootですが、拙生は他の
ユーザー名でデータベースを作成しています。
ユーザーのパスワードを入れたら開始です。

テーブルごとのステータスがOKであることを確認します。
Table does not support optimize, doing recreate + analyze instead
status : OK

長い時間が掛かりましたが無事終了。

CentOS7の方のサーバーのあるCMSの特定
テーブルの挙動が怪しかったのでこれも最適化。
こちらはInnoDBです。

mysql -u username -p
パスワード入力
でmysqlに入ります。

>use databasename; 該当データベースへ
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

>show tabales;     テーブル一覧で確認
+————————————+
| Tables_in_databasenama |
+————————————+
| tablename1       |
| tablename2       |
| tablename3       |
| tablename4       |
+————————————+

 

いよいよ該当テーブルを最適化です。
>optimize table tablename;

+————-+————+————–+———————————————+
| Table   | Op      | Msg_type | Msg_text                          |
+————-+————+————–+———————————————+
|tablename |optimize | status     |recreate+analyze instead OK  |
+————-+————+————–+———————————————+
1 row in set (0.19 sec)

statusがOKなら一安心です。

立て続けに最適化を行なっても
Table is already up to date
と表示されるだけで無意味です。(笑

indexをマニュアルで最適化するには
analyze tableコマンドですが、InnoDBでは
頻繁に自動最適化が行われるため不要でしょう。

ストレージエンジンはMySQL5.5以降ではInnoDBが
デフォルトになっています。
MyISAMとの違いなどについては拙生は不案内で
トランザクション機能の有無くらいしか知りません。
でもクエリが中断された場合などのロールバックがある
だけでもInnoDBが優れているのだと思い込んでいます。(笑

HOME

おすすめ