1

挿入ステートメントと更新ステートメントの実行に、テストサーバーよりも本番サーバーでの実行に時間がかかる理由を理解しようとしています。SQLDeveloperで実行されているブロックの状態を監視する方法がわかりません。非常に多くの行が挿入された後のrownumとsysdateの出力のようなものが良いスタートです。

ブロックの実行中にdbms_output.put_lineステートメントを出力する方法はありますか?

現在、Oracle11gでSQLDeveloper3.1.07を実行しています。

ソリューションを追加するために編集:

PROCEDURE log_timestamp (
    PI_trans_num    number  
) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    INSERT INTO timestamp_log (log_timestamp, trans_num)
    VALUES (SYSTIMESTAMP, PI_trans_num);
    COMMIT;
END log_timestamp;
4

3 に答える 3

2

行ごとにPL/SQLのパフォーマンスを監視するためのより良い方法の1つは、DBMS_Profilerを使用することです。これにより、各行の実行統計と実行回数がわかります。

もちろん、SQL実行の問題を診断することはありませんが、各ステートメントの実行にどれだけの実行時間が費やされているかがわかります。

于 2012-06-01T10:38:41.317 に答える
2

もう1つの方法は、DBMS_Application_Infoを使用することです。

「アクション名」を設定し、v $ session_longopsを介して進行状況レポートを維持することにより、v$sessionのセッションにメタデータを追加して進行状況を共有できます。

于 2012-06-06T07:31:02.057 に答える
1

dbms_output.put_lineステートメントは、pl / sqlブロックが実行された後にのみ表示されるため、コードの実行中に問題を特定するのには適していません。

長時間実行されているプロセスを追跡したい場合は、自律型トランザクションを使用してデータベーステーブルにログを記録し(現在のトランザクションに干渉しないように)、ログテーブルを監視できます。

別のアプローチをとると、テストサーバーと本番サーバーの両方で実行されている挿入ステートメントと更新ステートメントの説明プランを確認できます。これにより、時差を説明する本番システムの違いが識別される場合があります。

于 2012-06-01T06:07:12.517 に答える