巨大な Oracle Trace ファイルがあります。このファイルを作成したアプリケーションは、1 時間 15 分実行されました。この Tracefile では、1 時間強の実行時間で 4 つの Select が見つかりました。問題は、これらの選択がオプティマイザーによってサンプリングされることです。
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE
NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false')
NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),:"SYS_B_00"),
NVL(SUM(C2),:"SYS_B_01")
FROM
(SELECT /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("LST_G") FULL("LST_G")
NO_PARALLEL_INDEX("LST_G") */ :"SYS_B_02" AS C1, CASE WHEN
"LST_G"."SENDUNG_TIX"=:"SYS_B_03" AND "LST_G"."LST_K"=:"SYS_B_04" AND
"LST_G"."LST_ART"=:"SYS_B_05" AND "LST_G"."FAK_TIX"=(-:"SYS_B_06") THEN
:"SYS_B_07" ELSE :"SYS_B_08" END AS C2 FROM "TMS1033"."LST_G" SAMPLE BLOCK
(:"SYS_B_09" , :"SYS_B_10") SEED (:"SYS_B_11") "LST_G") SAMPLESUB
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 56076 3.93 4.21 0 0 0 0
Execute 56076 1.98 1.80 0 0 0 0
Fetch 56076 1127.54 1122.77 222 46487004 0 56076
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 168228 1133.45 1128.79 222 46487004 0 56076
これは4つのうちの1つで、見た目はほとんど同じです。元のステートメントを見つけたと思いますが、これらは Uniface サービスから実行されます。Uniface がどのように機能するのかわかりません。私はただのデータベース担当者です。問題は、オプティマイザーがこのステートメントを再構築する理由がわからないことです。dynamic_sample
元のものはヒントを使用しません。また、元のステートメントもトレース ファイルに追加されていることがわかりました。
select count(*)
from
lst_g where sendung_tix = 10330805990396 and lst_k = 'E' and lst_art = 'G'
and fak_tix = -4
そのため、これらのサンプルステートメントが何であるかわかりません。何か案が?
どうもありがとう。