Oracleで実行計画を取得するいくつかの方法分析
1.実行計画-Explayin PlanExplayin planはSQL文で入力し、このSQL文の実行計画を見積もり、実行計画を計画表に出力する。まず、あなたが実行するSQL文の前にexplin plan forを追加します。この時に生成される実行計画は計画表に格納されます。ステートメントは次の通りです。explin plan for SQL文は次の通りです。計画表で先ほど作成した実行計画を調べてください。文は以下の通りです。xplan.display);なお、Explayin planは実行計画のみを生成しており、SQL文を実際に実行しないため、実行計画が外れている可能性があります。
1)現在の環境は計画生成時と異なる可能性があります。2)バインディング変数のデータタイプは考慮されません。3)変数の覗きは行わない。
2.クエリメモリにキャッシュされている実行計画(dbms_)xplan.display_cursor)実行中のSQL文または実行終了直後のSQL文の実際の実行計画(すなわち、library cacheにおける実行計画を取得する)を取得したいなら、動的性能ビューで照会することができます。方法は以下の通りです
1)SQL文を取得した遊標は父の遊標と子の遊標に分けられ、父の遊標はsql_id(または共同addressとhash_)valueフィールドは、サブラベルはchild_によって表されます。numberフィールドの表示。
SQL文が実行されている場合、v$sessionからその遊覧情報を取得することができます。例えば、select status、sql_id,sql_ちどり_number from v$session where status='ACTIVE'and…
SQL文にはいくつかのキーワードが含まれていると知っているなら、v$sqlビューからそのラベル情報を取得することができます。アイドルnumber,sql_text from v$sql where sql_text like'%キーワード''
2)ライブラリキャッシュの実行計画を取得するために、キャッシュライブラリの実行計画を取得するために、動的性能ビューv$sql_を直接照会することができます。planとv$sql_プラン.statisticsallなど、より便利な方法はsql_idとサブラベルはパラメータとして、以下の文を実行します。select*from table(dbms_)xplan.display_cursorid,チド_number);
3)前回の実行計画を取得する:set serverout offselect*from table(dbms_xplan.display_cursor(null,null,‘ALLSTATS LAST’);
3.照会履歴実行計画(dbms_xplan.display_awr)AWRは、タイミングよく動的性能ビューの実行計画をdba_に保存します。hist_sqlplanビューでは、履歴実行計画を確認するには、以下の方法で照会することができます。xplan.display_awr('s ql*)id;;
4.sqlplusでSQLを開発するのは(Autotrace)set auttraceというのはsqlplusツールの一つの機能で、sqlplusで接続されたsessionでしか使えません。開発時にSQL文の性能をテストするのにとても適しています。以下のいくつかのパラメータがあります。
SET AUTOTRACE OFF------実行計画と統計情報は表示されません。これはデフォルトモードSET AUTOTRACE ON EXPLANです。最適化器実行計画SET AUTOTRACE ON STATISTICSのみ表示されます。統計情報SET AUTOTRACE ON-----------実行計画と統括情報は同時にSET AUTOTRACE TRACONYを表示します。予想される実行計画だけを表示して、同じくexplin plan 5.Traceファイルクエリの詳細な実行計画を生成します。Trace,10046)SQL_TRACEを初期化パラメータとしてインスタンスレベルで有効にしても良いし、セッションレベルでのみ有効にしても良いし、インスタンスレベルではSQL_を有効にしても良い。TRACEは、バックグラウンドプロセスおよびすべてのユーザープロセスを含むすべてのプロセスの活動を追跡することになります。これは通常、より深刻なパフォーマンス問題を引き起こすので、一般的にはsql_を使用します。traceは現在のプロセスを追跡します。方法は以下の通りです。
SQL>alter session set sql_trace=true;追跡されたSQL文…SQL>alter session set sql_trace=false;他のプロセスを追跡するなら、Oracleから提供されるシステムパックDBMS_SYSTEM.SET_SQL_TRACE_IN_SESSIONは、例えばSQL>exec dbms_system.set_sqlトレイ同前session(sid,serial璣,true)--追跡を開始するSQL>exec dbms_system.set_sqlトレイ同前session(sid,serial38089;,false)--トレースを終了します。
traceファイルを生成した後、sql traceで生成されたトレースファイルをtkprofツールで読みやすい形式に変換します。文法は以下の通りです。tkprof inputfile outputfile 10046イベントはSQL_uです。TRACEのアップグレード版は、追跡セッションであり、Traceファイルを生成します。ただし、その内容はより詳細です。
1)現在の環境は計画生成時と異なる可能性があります。2)バインディング変数のデータタイプは考慮されません。3)変数の覗きは行わない。
2.クエリメモリにキャッシュされている実行計画(dbms_)xplan.display_cursor)実行中のSQL文または実行終了直後のSQL文の実際の実行計画(すなわち、library cacheにおける実行計画を取得する)を取得したいなら、動的性能ビューで照会することができます。方法は以下の通りです
1)SQL文を取得した遊標は父の遊標と子の遊標に分けられ、父の遊標はsql_id(または共同addressとhash_)valueフィールドは、サブラベルはchild_によって表されます。numberフィールドの表示。
SQL文が実行されている場合、v$sessionからその遊覧情報を取得することができます。例えば、select status、sql_id,sql_ちどり_number from v$session where status='ACTIVE'and…
SQL文にはいくつかのキーワードが含まれていると知っているなら、v$sqlビューからそのラベル情報を取得することができます。アイドルnumber,sql_text from v$sql where sql_text like'%キーワード''
2)ライブラリキャッシュの実行計画を取得するために、キャッシュライブラリの実行計画を取得するために、動的性能ビューv$sql_を直接照会することができます。planとv$sql_プラン.statisticsallなど、より便利な方法はsql_idとサブラベルはパラメータとして、以下の文を実行します。select*from table(dbms_)xplan.display_cursorid,チド_number);
3)前回の実行計画を取得する:set serverout offselect*from table(dbms_xplan.display_cursor(null,null,‘ALLSTATS LAST’);
3.照会履歴実行計画(dbms_xplan.display_awr)AWRは、タイミングよく動的性能ビューの実行計画をdba_に保存します。hist_sqlplanビューでは、履歴実行計画を確認するには、以下の方法で照会することができます。xplan.display_awr('s ql*)id;;
4.sqlplusでSQLを開発するのは(Autotrace)set auttraceというのはsqlplusツールの一つの機能で、sqlplusで接続されたsessionでしか使えません。開発時にSQL文の性能をテストするのにとても適しています。以下のいくつかのパラメータがあります。
SET AUTOTRACE OFF------実行計画と統計情報は表示されません。これはデフォルトモードSET AUTOTRACE ON EXPLANです。最適化器実行計画SET AUTOTRACE ON STATISTICSのみ表示されます。統計情報SET AUTOTRACE ON-----------実行計画と統括情報は同時にSET AUTOTRACE TRACONYを表示します。予想される実行計画だけを表示して、同じくexplin plan 5.Traceファイルクエリの詳細な実行計画を生成します。Trace,10046)SQL_TRACEを初期化パラメータとしてインスタンスレベルで有効にしても良いし、セッションレベルでのみ有効にしても良いし、インスタンスレベルではSQL_を有効にしても良い。TRACEは、バックグラウンドプロセスおよびすべてのユーザープロセスを含むすべてのプロセスの活動を追跡することになります。これは通常、より深刻なパフォーマンス問題を引き起こすので、一般的にはsql_を使用します。traceは現在のプロセスを追跡します。方法は以下の通りです。
SQL>alter session set sql_trace=true;追跡されたSQL文…SQL>alter session set sql_trace=false;他のプロセスを追跡するなら、Oracleから提供されるシステムパックDBMS_SYSTEM.SET_SQL_TRACE_IN_SESSIONは、例えばSQL>exec dbms_system.set_sqlトレイ同前session(sid,serial璣,true)--追跡を開始するSQL>exec dbms_system.set_sqlトレイ同前session(sid,serial38089;,false)--トレースを終了します。
traceファイルを生成した後、sql traceで生成されたトレースファイルをtkprofツールで読みやすい形式に変換します。文法は以下の通りです。tkprof inputfile outputfile 10046イベントはSQL_uです。TRACEのアップグレード版は、追跡セッションであり、Traceファイルを生成します。ただし、その内容はより詳細です。