スロークエリを改修した場合の性能比較をご紹介します。
ボトルネック
負荷テストの結果、DBサーバのCPUリソースが100%張り付き状態になっていました。
3秒以上のクエリを確認しましたが、該当するスロークエリは存在しません。1秒以上にしたところ1種類のスロークエリが特定できました。
該当SQLに対してExplainを実施したところ、利用しているビュー内でフルスキャンを実施していることが判明しました。
スロークエリが発生する場合は、3秒以上かかるようなクエリが出ることが多くあります。今回のケースでは、そこまで極端な速度遅延は発生していませんでしたが、呼び出し頻度が高いクエリだったためにDBサーバのCPUを食いつぶす結果となっていました。
実際のスループットと平均応答速度の推移は次のようになりました。
※グラフの見方は、「限界スループットの確認方法」を参照ください
チューニング内容
ビューで全件取得(フルスキャン)し、そこから日付で絞り込みを行うつくりになっていました。長年の運用でデータ量も非常に多い状態でした。そこで、次の改修をご提案し対応いただきました。
- ビューの利用をやめ通常のSQLとし、事前に日付で絞り込みを行うことでフルスキャンを回避させる
性能比較
チューニングを実施いただき、スループットは10倍以上、平均応答速度も5分の1と大幅に性能向上を図ることができました。
下のグラフはチューニング前後のスループットと平均応答速度を比較したものです。
まとめ
データ量が多くフルスキャンしているSQLを改修することで、10倍以上の性能向上を実現できました。
性能限界の原因となっているボトルネックを特定し、ピンポイントでチューニングができると大きな成果を上げることが可能です。
具体的な進め方が気になる方は、「負荷テストのすすめかた」をご覧ください。
ディーネットでは、負荷テストに関するお問い合わせも受け付けておりますので、お気軽にご相談ください。