MySQLのチューニングについて
はじめに
今回はMySQLのチューニング時の考え方について書いていこうとおもいます。
また、本記事はどこを見直すとよいかについてのみ触れるため、
具体的なチューニングの仕方につては本記事ではふれません。
まずはじめにチューニングとはなんのためにやるのでしょうか。
チューニングは「より短い時間でデータを出し入れできるようにする」ために行います。
そこでMySQLのチューニングは以下の3つに分類して考えていきます
- サーバサイド
- サーバサイド以外
- 周辺システム
それぞれについて考えていきたいと思います。
サーバサイド
サーバサイドのチューニングでまず考えられるのが
「MySQLのパラメータチューニング」
です。
特に見直すならばメモリ関連とディスクI/O関連のパラメータを見直すと良いみたいです。
MySQLのパラメータ以外ではOS寄りのチューニングがあります。
例えば
- ディスクI/O関連のkernelパラメータの調整
- 適切なファイルシステムの選択とマウントオプションの調整
などが挙げられます。
また、データサイズやアクセスが増大した場合にはパーティショニングを見直すと良いみたいです。
パーティショニングの見直しデーブルのデータを分割してDBサーバを分けることで、キャッシュに乗りやすくなったり、アクセスの分散ができます。
サーバサイド以外
サーバサイド以外のチューニングでは以下のものが挙げられます。
- テーブル設計の見直し
- SQLの最適化
テーブル設計の見直しでは適切なインデックスの作成や意図的な非正規化を行うとよいみたいです。
SQLの最適化ではインデックスをうまく使うようにしたり、テーブルの結合の順序、方法を調整するとよいみたいです。
特にSQLの最適化はチューニング効果が劇的に高いことが多く、スロークエリなどで原因の究明も行いやすいので比較的取り掛かりやすいチューニングです。
周辺システム
チューニングというとSQLやサーバのパラメータの最適化に目がいきがちになりますが、
チューニングに目標は
より短い時間でデータを出し入れできるようにする
です。
なのでSQLやパラメータ以外にも目を広げてみましょう!
たとえばDBサーバとクライアントの間にmemcachedなどのキャッシュサーバをいれることが挙げられます。
このように、「より短い時間でデータを出し入れできるようにする」を目標に考えれば、
DBサーバ以外の部分にも目がいき、よりよいチューニングができるのではないでしょうか。
おわりに
今回の記事ではMySQLのチューニングの見るところについて書きました。
また別途具体的なチューニング方法については書きたいと思っています。
この記事はほぼサーバなどを触ったことがない人物が学んだことを整理するために書いていますので間違いなどが多々あると思います。間違いなどありましたら是非コメントなどで教えていただけると幸いです。