TECHNOLOGY

FAQ (よくある質問)

QUESTION ( SQ0902083 )

ISQLからクエリを実行した際に表示される実行時間が正確ではない

ANSWER

クエリ単体の厳密な実行時間を確認する場合は、パフォーマンス・テスト・ユーティリティを使用することをお勧めします。
SELECT文の実行時間を確認する場合、FETCHTSTを使用します。

FETCHTST は、SQL AnywhereのSamplesフォルダ内の以下の場所にあります。
SA11 : SamplesSQLAnywherePerformanceFetch
SA10 : SamplesSQLAnywherePerformanceFetch
ASA9 : SamplesASAPerformanceFetch

実行例
>fetchtst.exe -c “uid=dba;pwd=sql;eng=demo10″ query1.sql

実行結果の例
Statement 1 (line 1): SELECT i.ID,i.LineID,i.ProductID,i.Quantity, …
Rows fetched = 1000
PREPARE: 0.000 seconds
DESCRIBE: 0.000 seconds
OPEN: 0.002 seconds
FETCH first row: 0.050 seconds, 31 I/Os, 618 per second
FETCH remaining rows: 0.019 seconds
CLOSE: 0.000 seconds
DROP: 0.000 seconds
Total: 0.072 seconds, 31 I/Os, 427 per second
Fetch rate: 1097 rows in 0.070 seconds, 15775.663 per second

基本的には上の結果から次の4点を確認します。
OPEN: カーソルのオープンにかかった時間
FETCH first row: 最初のローのフェッチ時間
FETCH remaining rows: 残りのローのフェッチ時間
Total: 全体の処理時間

パフォーマンス・テスト・ユーティリティの詳細につきましては、ユーティリティ付属のreadme.txtをご参照下さい。

【注意】
一度クエリを実行すると、そのクエリで使用されたデータがデータベース・サーバ・キャッシュにキャッシュされることに注意してください。
テーブルなどのデータがデータベース・サーバ・キャッシュされている状態でクエリを実行した場合、初回の実行時間とは大幅に異なる結果が得られることがあります。

この為、連続してパフォーマンスのテストを行う場合は、データベース・サーバ・キャッシュを明示的にクリアしてください。

キャッシュをクリアするには、sa_flush_cache システム・プロシージャを使用します。

実行例
call sa_flush_cache()

sa_flush_cache システム・プロシージャの詳細につきましては、以下のオンライン・マニュアルをご参照下さい。
http://www.ianywhere.com/developer/product_manuals/sqlanywhere/1001/ja/html/dbrfja10/rf-sa-flush-cache-system-sysproc.html/rf-sa-flush-cache-system-sysproc.html