10053 trace PL/SQL
Date: Wed, 1 Sep 2010 08:11:53 -0700
Message-ID: <AANLkTimgCJA1GSHst066KknxN4FN1N_8YkChuA2LOPE6_at_mail.gmail.com>
Hello List,
This is 64-bit 10.2.0.4 on RHEL 5.1 x86_64.
I have a small PL/SQL procedure which is using the "wrong" index.
The SQL only does this within the procedure - I cannot replicate the issue externally with SQL*Plus.
I'd like to run a 10053 trace on it to determine why.
I tried adding:
execute immediate 'alter session set events ''10053 trace name context forever''';
execute immediate 'alter session set tracefile_identifier = slow_plsql';
as shown below, however, it doesn't produce the 10053 trace in the file.
[It does produce the file, but there isn't anything in the file other than the header.]
I also tried externally tracing the session using oradebug; that doesn't work, either.
I know a hard parse is required for 10053 to emit.
I first tried changing the comment to change the statement, however that didn't work.
I then used the following to "ensure" the statement is not in the cache (as sqldba) and "force" a hard parse:
select sql_text, address, hash_value, executions, loads, version_count, invalidations, parse_calls from v$sqlarea where sql_text like '% slow%';
alter session set events '5614566 trace name context forever';
exec sys.dbms_shared_pool.purge('&address, &hash_value','C');
It still doesn't appear that the 10053 trace is working as I expect.
Before the run, the above select on v$sqlarea shows the "DECLARE" statement is not in the cache.
After the run, the select shows the "DECLARE" statement and that it was executed & had only 1 parse call as expected.
Any help?
For what it's worth, this is the code:
SET SERVEROUTPUT ON
SET LINESIZE 100
DECLARE
TYPE RESULTSET IS REF CURSOR;
P_RV RESULTSET;
P_RESULT_SET RESULTSET;
v_trst_key hsr_translation.TRST_KEY%TYPE; v_tran_created_date hsr_translation.TRAN_CREATED_DATE%TYPE; v_tran_pkey hsr_translation.TRAN_PKEY%TYPE; v_conv_key hsr_translation.CONV_KEY%TYPE; v_busn_name_src hsd_business.BUSN_NAME%TYPE; v_busn_name_dest hsd_business.BUSN_NAME%TYPE; v_busn_key_src hsr_translation.BUSN_KEY_SRC%TYPE; v_busn_key_dest hsr_translation.BUSN_KEY_DEST%TYPE; v_dcls_name hsd_document_class.DCLS_NAME%TYPE; v_tran_processing_mode hsr_translation.TRAN_PROCESSING_MODE%TYPE;
CURSOR C1 (P_FROM_DATE in VARCHAR2, V_FROM_DATE in DATE, V_TO_DATE in DATE,
P_FROM_KEY in INTEGER, P_TO_KEY in INTEGER, P_CONV_KEY INTEGER )
IS
SELECT /* slow2 */ t.TRST_KEY,t.tran_created_date,t.tran_pkey,t.conv_key
,SRC_BUSN.busn_name
busn_name_src,DEST_BUSN.busn_name busn_name_dest
,t.busn_key_src,t.busn_key_dest,d.dcls_name,t.tran_processing_mode
FROM hsr_translation t,hsd_business SRC_BUSNP_FROM_KEY INTEGER := NULL;
,hsd_business DEST_BUSN,hsd_document_class d
WHERE t.tran_created_date <= V_TO_DATE AND ( (P_FROM_DATE IS NOT NULL AND t.tran_created_date >= V_FROM_DATE) OR (P_FROM_DATE IS NULL)) AND t.tran_pkey <= P_TO_KEY AND ( (P_FROM_KEY IS NOT NULL AND t.tran_pkey > P_FROM_KEY) OR (P_FROM_KEY IS NULL)) AND t.conv_key = P_CONV_KEY AND d.dcls_pkey (+) = t.dcls_key AND SRC_BUSN.busn_pkey (+) = t.busn_key_src AND DEST_BUSN.busn_pkey (+) = t.busn_key_dest; ORDER BY TRAN_CREATED_DATE DESC; P_CONV_KEY INTEGER := 505467; P_FROM_DATE VARCHAR2(32) := NULL; P_TO_DATE VARCHAR2(32) := '2010-07-27 20:09:21';
P_TO_KEY INTEGER := 5104895; V_FROM_DATE DATE;
V_TO_DATE DATE; BEGIN V_FROM_DATE := TO_DATE(P_FROM_DATE, 'yyyy-mm-dd hh24:mi:ss'); V_TO_DATE := TO_DATE(P_TO_DATE, 'yyyy-mm-dd hh24:mi:ss');
execute immediate 'alter session set events ''10053 trace name context
forever''';
execute immediate 'alter session set tracefile_identifier = fast_plsql';
OPEN C1 (P_FROM_DATE, V_FROM_DATE, V_TO_DATE, P_FROM_KEY, P_TO_KEY, P_CONV_KEY); DBMS_OUTPUT.PUT_LINE('Running using cursor C1');
LOOP FETCH C1 INTO v_trst_key, v_tran_created_date, v_tran_pkey, v_conv_key, v_busn_name_src, v_busn_name_dest, v_busn_key_src, v_busn_key_dest, v_dcls_name, v_tran_processing_mode; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_trst_key || ' ' || v_tran_pkey); END LOOP; CLOSE C1;
END;
/
Thanks in advance,
Rich
-- http://www.freelists.org/webpage/oracle-lReceived on Wed Sep 01 2010 - 10:11:53 CDT