🤙

SQLチューニングについて解説

に公開

皆さんも経験があるかもしれませんが、データベースの処理速度が遅すぎてタイムアウトになったりして処理が完了できないことがあります。
例えば、店舗の売り上げ情報を出力する処理で、膨大な量のデータをいくつものテーブルから参照して、さらに計算処理が行われたりするため必然的に処理に時間を要しますし、そのデータ量が増えていくほど重たくなっていくます。
そんな時に、チューニングを行いSQLパフォーマンスを改善・向上させることで解決することが出来ます。
今回はSQLチューニングについて解説していきます。

SQLチューニングとは?

SQLチューニングとは、SQL文の実行速度やパフォーマンスを改善することです。
データベースの運用において、パフォーマンス低下を引き起こすSQL文を特定し、最適化することで、レスポンスタイムを短縮したり、処理速度を向上させたりするプロセスです。

チューニングの目的

  • 処理速度の向上
     SQL文の実行時間を短縮し、アプリケーションの応答性を改善します。
  • システムの安定性
     高負荷時にSQL文が原因でシステムが一時的に停止したり、不安定になるのを防ぎます。
  • リソースの最適化
    データベースサーバーのCPU使用率やメモリ使用量を削減し、システム全体の負荷を軽減します。

チューニング方法

まずはパフォーマンスが遅いSQL文を特定します。
私の実体験をもとに記載します。
例えば、メインのSQLクエリが4つ実行されてました。その中でどのクエリで処理が失敗または、タイムアウトの原因となっているかを絞ります。
AWSのCloudWatchでログを確認したところ、3番目のクエリがタイムアウトの原因ではないかとログを見て仮説を立てることが出来ました。
では次に何をしたか?そのクエリの実行計画を確認して、検索が全件検索になっている・インデックスを設定しているが検索が絞られていないことが判明しました。

実行計画を取得する

実行計画を表示させるには、対象SQLの先頭にEXPLAINをつけるだけです。
EXPLAIN SELECT * FROM ...
実行計画を見て、typeがALLになっていることと、インデックスを設定しているはずのに、rowsがほぼ全件検索していたことが原因だと判断出来ました。

まとめ

今回はSQLチューニングについて解説しました。皆さんも様々なチューニングのご経験があるかもしれませんので、私が紹介した原因解析よりももっと効率の良い解析の方法などありましたらぜひ自身のアカウントで共有してみてください。

Discussion