「再帰的SQL」の編集履歴(バックアップ)一覧はこちら

再帰的SQL」(2007/09/25 (火) 17:33:57) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

「RECURSIVE」および「NON-RECURSIVE」の違いについて、 再帰的コール(RECURSIVE CALL)とは: ユーザが発行したSQL文を実行するために、Oracleは追加の文を発行しなければ ならないことがあります。このような文を再帰的コールまたは再帰的SQL文とい います。たとえば、十分な領域のない表に行を挿入しようとすると、Oracleは 再帰的コールを実行して動的に領域を割り当てます。SQLトレース機能が使用可能 になっているときに、再帰的コールが発生すると、TKPROFは再帰的コールの原因 となった文に加えて再帰的SQL文の統計を表示します。 再帰的コールの見分け方: TKPROFで出力されているSQL文が再帰的SQL文かそうでないかは、各SQL文の最後 の「recursive depth」情報で判断します。この値が1以上の場合、そのSQL文は 再帰的SQL文としての統計情報となります。 再帰的SQL文でない場合 ******************************************************************************** select * from emp   call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 1 0 1 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 1 2 4 14 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 2 2 5 14 Misses in library cache during parse: 1 Optimizer goal: CHOOSE Parsing user id: 48 <<- ※何も出力されていません ******************************************************************************** 再帰的SQL文の場合 ******************************************************************************** select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ where robj#=:1 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 1 0.00 0.00 0 1 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 3 0.00 0.00 0 1 0 0 Misses in library cache during parse: 1 Optimizer goal: CHOOSE Parsing user id: SYS (recursive depth: 1) <<- ※再帰的SQL文です ******************************************************************************** 「recursive depth」(以下、DEPTH)は、SQL 文が発行された再帰レベルを示します。 たとえば、値 0 はユーザーがその文を発行したことを示します。値 1 は、Oracleが 値 0 の文(ユーザー発行の文)を処理する再帰的コールとして、その文を生成した ことを示します。値n は、Oracle がその文を値 n-1 の文を処理する再帰的コールと して生成したことを示します。 注意:内部表に対する処理だけが再帰的SQL文となるわけではありません。     PL/SQLブロックでストアド・プログラム(パッケージ、プロシージャ、ファンクションなど)を呼ぶ処理を行った場合、     ストアド・プログラムの中で実行されるSQL文はSELECTやUPDATEであっても再帰的SQL文とみなされ、再帰的SQL文     の統計情報として出力されます。 全体の統計情報について:  全体の処理にかかった統計情報は、トレース・ファイルの最後に出力されている OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS  という統計情報で確認します。 OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS = 非再帰的SQL文の統計情報の合計 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS = 再帰的SQL文の統計情報の合計 処理全体にかかった時間は、この両者を合計した時間になります。 (※ SQLトレースを取得する際に初期化パラメータtimed_statisticsをTRUEにしていない場合には処理時間は常に0.00となります。)

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー