こんにちは。ES/1 Shelty担当の川越です。
2023年8月にリリース予定のSQL分析機能についてご紹介いたします。
ES/1 SheltyのSQL分析機能では、ざっくりと以下のことができるようになります。
それでは、どのように分析を行うのかさっそくご紹介いたします。
システムダッシュボードから「アプリケーション→SQL一覧」メニューを選択すると、以下のSQL一覧画面が表示されます。
この画面では、表示されている期間にアプリケーションサーバーから発行されたSQLを一覧表示しています。
「平均SQL実行時間」「総実行時間」等の項目でソート表示できるので、レスポンスに影響を与えていたSQLを判別できるようになります。
チューニング対象となるSQLを抽出する際は、「負荷率」の降順でソートしていただくことをおすすめします。
「負荷率」はSQLを処理していた時間のうち、当該SQLの実行時間が占めていた割合を指します。算出方法は下記の通りです。
負荷率%=当該SQLの総SQL実行時間 / 全SQLの総SQL実行時 * 100
負荷率の降順でソートすることにより、チューニング対象のSQLが見つけやすくなります。
例えば、平均SQL実行時間や最大SQL実行時間が長いSQLがあったとしても、そのSQLがあまり発行されていないSQLの場合は、システム全体のレスポンスには大きな影響はありません。
しかし、単発での処理時間がそれほど長くない場合も、頻繁に発行されるSQLであれば、累積処理時間が長くなり、トランザクションレスポンスに大きな影響を及ぼす場合があります。
負荷率を基準にソートすると合計処理時間の割合が高いSQLを抽出できるので、システム全体として、最もレスポンスに影響を及ぼすSQLを見つけることができます。
SQL一覧画面でSQLをクリックすると、SQL詳細画面に遷移します。
こちらの画面から当該SQLが発行されていたトランザクションを確認することができます。
SQL詳細画面では、選択したSQLが発行されたトランザクションを一覧表示します。
トランザクションIDをクリックするとメソッドツリー画面に遷移し、レスポンス全体に占めるSQL処理時間を確認できます。
また、SQL一覧やSQL詳細画面では、SQLは最大128文字までの表示となりますが、メソッドツリー画面ではSQLの全文を確認可能です。
加えて、Java Agentのデータ収集設定でバインド変数を表示する設定を有効化している環境では、バインド変数の値についても表示されます。
もう一つの分析方法としては、リソース使用状況に変化があった場合に実行しているSQLを確認するケースです。
DBサーバーのリソース使用状況が変化した時間帯に実行していたSQLを辿ることができます。
サーバー詳細画面にて、例えばDB時間が急増している時間帯で「システムのSQL一覧へ」ボタンをクリックし、同じ時間帯に実行していたSQLを確認します。
この際、対象時刻はできるだけ事象が発生している時間帯にピンポイントで合わせておくのがおすすめです。
問題があった時間帯に実行していたSQLに絞り込んで表示するため、DB負荷状況に影響を及ぼしているSQLを特定するのに役立ちます。
なお、注意が必要な点として以下がございます。
SQL分析機能をご利用いただける環境は以下の通りです。
該当する環境では、新たな設定等を実施することなく本機能をご利用いただけます。
SQL分析機能は2023年8月リリース予定です。
本機能をSQLチューニングにお役立ていただければ幸いです。