PLSQL programlarının ve SQL cümlelerinin trace raporunun alınması (tkprof)
sys kullanıcısı ile
|
1 |
alter system set timed_statistics=true; çalıştırılır. |
Kullanıcı Oluşturulur
|
1 2 3 4 5 6 |
CREATE USER OMER IDENTIFIED BY VALUES omer DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK; |
2 adet rol atanır
|
1 2 3 |
GRANT CONNECT TO OMER; GRANT RESOURCE TO OMER; ALTER USER OMER DEFAULT ROLE CONNECT; |
6 Sistem hakkı
|
1 2 3 4 5 6 |
GRANT EXECUTE ANY PROGRAM TO OMER; GRANT UNLIMITED TABLESPACE TO OMER; GRANT ALTER SESSION TO OMER; GRANT CREATE SESSION TO OMER; GRANT CREATE PROCEDURE TO OMER; GRANT CREATE TABLE TO OMER; |
1 Tablespace kota
|
1 |
ALTER USER OMER QUOTA UNLIMITED ON USERS; |
Ömer kullanıcısı ile bağlantı yapılır.
|
1 |
sqlplus omer/omer |
Tablo oluşturulur
|
1 2 3 4 5 6 7 8 |
CREATE TABLE OMER.emp ( employee_id NUMBER(10), last_name VARCHAR2(50), First_name VARCHAR2(50), department_id NUMBER(20), salary NUMBER(20) ) |
Trace Raporu alınacak programcık çalıştırılır.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
declare begin execute immediate 'alter session set max_dump_file_size="2000M"'; execute immediate 'alter session set tracefile_identifier=''DENEME'''; execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; for aa in 1..10000 LOOP insert into emp (employee_id, firs_name, last_name, department_id, salary) values (192100 + aa, 'mehmet', 'Derviş', 1, 112600 + aa); commit; end loop ; end; |
/u01/app/oracle/admin/orcl/udump dizininde orcl_ora_14912_DENEME.trc adında trace dosyası oluşturur.
trace dosyasını okunur hale getirmek için
|
1 |
tkprof orcl_ora_14912_DENEME.trc Rapor_ismi |
|
1 |
more Rapor_ismi komutu ile rapor incelenebilir. |
Prosedür oluşturularak trace raporu oluşturulması
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
create or replace PROCEDURE TraceBaslat (pRepName VARCHAR2) IS vTraceString VARCHAR2 (100); BEGIN vTraceString := 'ALTER SESSION SET TRACEFILE_IDENTIFIER='; vTraceString := vTraceString || CHR (39); vTraceString := vTraceString || pRepName; vTraceString := vTraceString || CHR (39); EXECUTE IMMEDIATE vTraceString; EXECUTE IMMEDIATE 'ALTER SESSION SET MAX_DUMP_FILE_SIZE="2000M"'; vTraceString := 'ALTER SESSION SET EVENTS '; vTraceString := vTraceString || CHR (39); vTraceString := vTraceString || '10046 trace name context forever, level 12'; vTraceString := vTraceString || CHR (39); EXECUTE IMMEDIATE vTraceString; END; |
Çalıştırılması
|
1 2 3 4 5 6 7 8 9 |
DECLARE PREPNAME VARCHAR2(200); BEGIN PREPNAME := NULL; OMER.TraceBaslat ( PREPNAME ); COMMIT; END; |
Session Bazında Trace raporunun alınması
|
1 |
alter system set timed_statistics=true; |
|
1 |
alter session set max_dump_file_size=2000M; |
|
1 |
show parameter user_dump |
|
1 |
alter session set SQL_TRACE true; |
Sorgular yapılır
|
1 |
alter session set SQL_TRACE false; |
Farklı bir session için
|
1 2 3 4 5 6 7 |
alter system set timed_statistics=true; alter session set max_dump_file_size=20000; select SID, SERIAL#, username from v$session where username=’MEHMET’; SID SERIAL# ---------- 163 110 |
Elde edilen bu SID ve SERIAL# değerleri, aşağıdaki şekilde kullanılarak trace başlatılır.
|
1 2 3 |
execute dbms_system.set_sql_trace_in_session('163','110',true); --sonlandırmak için false kullanılır. show parameter user_dump alter system set timed_statistics=true; |
DISPLAY_CURSOR, memory deki çalışma planlarını (execution plan) gosterir.
DISPLAY_AWR, memory de olmasa bile, AWR 'deki çalışma planlarını (execution plan) gosterir. (son 8 gün, bu default değer değiştirildi ise -+ gun)
trcsess : Trace dosyalarından aranan sessionın sql planları ayrıştırılabilir. Sonrasında tkprof ile okunur hale getirilebilir.
servis ismi module (program) ismine göre filtreleme yapabilir.
not : session=sid.serial#
|
1 |
EXECUTE dbms_monitor.session_trace_enable (226, 219); |
|
1 2 |
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace trcsess output=hr_session.txt session=226.219 *.trc |
|
1 2 3 4 5 |
EXPLAIN PLAN SET STATEMENT_ID = 'testabc' FOR SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; |
|
1 |
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY()); |
Aşağıdaki statement_id kullanılarak da sorgulanabilir.
|
1 2 |
SELECT plan_table_output FROM TABLE(dbms_xplan.display('plan_table','testabc','serial')); |
|
1 2 |
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('b62q7nc33gzwx')); --sql_id |
|
1 2 |
SELECT PLAN_TABLE_OUTPUT FROM TABLE (DBMS_XPLAN.DISPLAY_AWR('454rug2yva18w')); |
|
1 2 |
SELECT plan_table_output FROM TABLE(dbms_xplan.display('plan_table','demo01','serial')); |
