MySQL データベースが遅いときの調査方法と高速化テクニック

サーバー設定

MySQL の速度が遅いときの調査方法と高速化のテクニックを紹介します。
データベースの速度改善には、SQL の改善・サーバー改善の2つのアプローチがあります。

MySQL 8 のインストール手順 (CentOS)
MySQL 8 のインストール手順 (Ubuntu)



MySQL のスロークエリで原因を調べる

初めに、SQL クエリを見直す方法について紹介します。

データベースにデータを追加したり取り出す際には、SQL と呼ばれる言語を使用します。
SQL は書き方ひとつでパフォーマンスが大きく変わることがよくあります。

 
MySQL には、パフォーマンスの悪い(速度の遅い)SQLクエリを見つけるために
「スロークエリ」と呼ばれるログ機能が搭載されています。

秒単位で基準値を設定でき、基準値より処理が長いクエリを記録してくれます。
「3秒」に設定した場合は、処理に3秒以上要したクエリが記録対象です。

 
スロークエリを解消することが、データベース高速化の第一歩です。
MySQL(データベース)の負荷を下げられる他、アプリケーションの高速化にも繋がります。

MySQL のクエリを改善して高速化

上記のスロークエリで遅い SQL を発見したら、クエリの改善を実施しましょう。
SQL クエリのパフォーマンス改善には様々な方法がありますが、主な点は以下の通りです。

  • 必要なカラムのみを取得する(SELECT * を利用しない)
  • 取得するデータを絞り込む(WHERE 句を活用する)
  • テーブル結合時はなるべく行数を絞り込む
  • 文字列検索で前方一致を使用しない(LIKE 句の先頭に % を付けない)
  • ORDER BYGROUP BY を必要以上に多用しない
  • インデックスを適切に設定する
  • インデックスが効いているカラムに関数(CAST, FORMATなど)を適用しない

 
可能であれば、テーブル設計の段階から上記を考慮できるとベストです。

MySQL の設定を見直して高速化

MySQL サーバー側の設定を見直すことでも、パフォーマンス改善が見込めます。

innodb_file_per_table を有効化する

このオプションを有効にすると、テーブル単位でデータを分割管理するようになります。
初期値では全データが一箇所で管理されてしまうため、有効化することをオススメします。

クエリキャッシュを有効化する

同じ SQL が何度も使用される場合には非常に有効です。
一度実行した SQL の結果をキャッシュしておくため、2回目以降の応答時間が短縮されます。

スレッドキャッシュを有効化する

データベースに対して、頻繁に接続や切断が発生する場合に有効です。
接続時に使用するスレッドを使い回すことで、サーバー負荷の軽減を図れます。

まとめ

MySQL データベースが遅い場合の調査方法と高速化テクニックを紹介しました。
SQL クエリの改善、サーバー設定の見直しといった2パターンがあり、どちらも重要な要素です。

データベースが全体的に遅い場合はサーバー側の設定、
特定の処理のみ遅い場合は SQL クエリの改善から先に着手することをオススメします。

【関連記事】

MySQL のクエリ結果を整形して見やすくする
AWS の「RDS」と「EC2 + MySQL」を比較
Aurora エンドポイントの使い分けを解説