TOP > 機能紹介 > PerformanceDoctor > ルール詳細 ~フルスキャン

ルール詳細


メッセージ

テーブルのフルスキャンが発生している可能性があります。

【ルールID】 SQL.PLAN.FULLSCAN


メッセージからは、以下の内容がわかります。

  1. テーブル名
  2. 実行されたSQL
  3. SQLの実行箇所
  4. 実行計画
テーブルのフルスキャンが発生している可能性があります。

問題の概要

テーブルフルスキャンとは

テーブルフルスキャンは、テーブルに格納されているすべてのデータを走査し、
検索中の条件と一致するレコードを抽出します。


このため、大量のデータがテーブルに格納されていると、検索に時間がかかります。

この検索パフォーマンスを向上させるために、インデックスを作成する必要があります。

※ ENdoSnipeは、フルスキャンが実行されたことを検出します。



原因の特定

1.フルスキャンが実行されたSQLを確認します

  1. PerformanceDoctorで問題となるフルスキャンのメッセージが選択されていることを確認します。
  2. 詳細ビューでフルスキャンが実行されたSQLを確認します。
  3. SQLを確認します。
  4. 詳細ビューで実行計画を確認します。
  5. 詳細ビューのスタックトレースからSQLが実行された箇所を確認します。
  6. スタックトレースを確認します。


対処

PerformanceDoctorのメッセージからフルスキャンが実行されているテーブルがわかります。
対処として、該当するテーブルのインデックスを作成してください。

この場合は、「emp2」テーブルのename列に対してインデックスを作成します。

テーブルのフルスキャンが発生している可能性があります。



設定方法

ENdoSnipeでテーブルフルスキャンを検出したい場合は、以下の通り設定してください。
設定変更は、Javelinの設定ファイル(javelin.properties) または、BottleneckEyeのコントロール画面から
行うことができます。


No. プロパティ 設定値 概要
1 javelin.jdbc.enable true データベースアクセスを監視するかどうかを設定します。
javelin.jdbc.enableプロパティがtrueの場合、ENdoSnipeは、Javaアプリケーションのデータベースアクセスにおける性能問題に関する情報を取得します。
2 javelin.jdbc.recordExecPlan true SQLの実行計画を出力するかを設定します。
3 javelin.jdbc.execPlanThreshold 任意 SQLの実行時間の閾値を指定します。(単位:ミリ秒)
指定した時間を超過した場合に、実行計画を取得します。初期値は100です。
これは、javelin.jdbc.recordExecPlanプロパティがtrueの場合に有効です。
4 javelin.jdbc.recordStackTrace true スタックトレースを出力するかどうかを設定します。
5 javelin.jdbc.record.stacktraceThreashold 任意 スタックトレースを出力するための閾値を指定します。(単位:ミリ秒)
指定した時間を超過した場合に、スタックトレースを出力します。初期値は100です。
これは、javelin.jdbc.recordStackTraceプロパティがtrueの場合に有効です。