SQLの実行からレスポンスが返却されるまでの時間を計測し、記録した時間を出力する方法はいくつかあります。ここでは、いくつかの方法を紹介します。
- SQLPlusやSQLclを使用:
コマンドラインツールを使用して、SQLの実行時間を計測する方法です。SQLPlusやSQLclには、コマンドの前後でタイムスタンプを取得する機能があります。
SET TIMING ON
...
--SQLの実行
SELECT * FROM your_table;
--結果出力
SELECT systimestamp FROM dual;
SET TIMING ONコマンドは、SQL*Plusがコマンドの実行時間を表示するように設定します。
- PL/SQLブロックを使用:
PL/SQLブロックを使用して実行時間を計測し、ログに記録する方法です。
DECLARE
v_start_time TIMESTAMP;
v_end_time TIMESTAMP;
v_elapsed_time INTERVAL DAY TO SECOND;
BEGIN
-- 開始時刻の記録
v_start_time := SYSTIMESTAMP;
-- 実行するSQLクエリ
-- 以下は例です。実行したいSQLに変更してください。
EXECUTE IMMEDIATE 'SELECT * FROM your_table';
-- 終了時刻の記録
v_end_time := SYSTIMESTAMP;
-- 実行時間の計算
v_elapsed_time := v_end_time - v_start_time;
-- 実行時間の出力
DBMS_OUTPUT.PUT_LINE('開始時刻: ' || TO_CHAR(v_start_time, 'YYYY-MM-DD HH24:MI:SS.FF3'));
DBMS_OUTPUT.PUT_LINE('終了時刻: ' || TO_CHAR(v_end_time, 'YYYY-MM-DD HH24:MI:SS.FF3'));
DBMS_OUTPUT.PUT_LINE('経過時間: ' || v_elapsed_time);
END;
/
上記のPL/SQLブロックは、開始と終了のタイムスタンプを取得し、実行時間を計算して出力します。DBMS_OUTPUTを使って結果を表示しますが、これをログファイルや別のテーブルに記録することも可能です。
- バッチスクリプトを使用:
SQLクエリの実行をスクリプト化して、実行時間を計測する方法です。以下はBashスクリプトの例です(UNIX/Linux環境)。
#!/bin/bash
start_time=$(date +%s%N)
# 実行するSQLクエリ
sqlplus -s user/password@service <<EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE
SET TIMING ON
SET SERVEROUTPUT ON
--
-- 実行したいSQLクエリ
SELECT * FROM your_table;
EXIT;
EOF
end_time=$(date +%s%N)
elapsed_time=$((end_time - start_time))
elapsed_seconds=$(echo "scale=3; $elapsed_time / 1000000000" | bc)
echo "実行時間: $elapsed_seconds 秒"
このスクリプトは、SQL*Plusを使ってSQLクエリを実行し、開始時刻と終了時刻の差から実行時間を計算して表示します。
- EXTENDED SQL TRACEを使用:
Oracleのトレース機能を使用して、SQLステートメントの詳細なパフォーマンスデータを収集する方法です。
ALTER SESSION SET sql_trace = true;
-- 実行するSQLクエリ
SELECT * FROM your_table;
ALTER SESSION SET sql_trace = false;
トレースファイルが生成され、詳細な実行情報が記録されます。tkprofツールを使用すると、トレースファイルを解析して実行時間を確認することができます。
これらの方法のいずれかを使用して、SQLの実行からレスポンスが返却されるまでの時間を計測し、記録することができます。具体的な要件に応じて、適切な方法を選択してください。

コメント