ขั้นตอนอย่างง่ายในการสร้าง
trace file จาก Session อื่น
PURPOSE
แสดงการสร้าง
Trace file จาก session อื่น เพื่อต้องการ สร้าง trace File กับ
process ที่กำลังทำงานอยู่
AUDIENCE
สำหรับ
Developer และ Database Administrators ซึ่งต้องการตรวจสอบการทำงานของ
Application
HOW
TO CREATE A SQL TRACE FILE FROM ANOTHER SESSION
เราต้องมีขั้นตอนใดกันบ้างในการสร้าง
Trace file โดยที่ผู้ที่ต้องการสร้าง file นั้นอยู่คนละ session
กับ Application ที่ทำงานอยู่
1.
เริ่มด้วยใช้คำสั่ง Alter system โดย set timed_statistics =true;
| $ sqlplus system/manager@viper
SQL> alter system
set timed_statistics=true;
System altered.
SQL> |
2.
แสดงหมายเลขของ Session (Session ids) ในระบบที่เรากำลังทำงานอยู่
ก่อนที่ Application ที่เราสนใจจะทำการ Connect เข้ามา
| SQL>
SQL>
select sid,serial#,username from v$session;
SID SERIAL# USERNAME
----------
---------- ------------------------------
1 1
2 1
3 1
4 1
5 1
6 1
7 3 SYSTEM
7
rows selected.
SQL> |
3.
ให้ Application ที่เราต้องการตรวจจับทำการ Connect กับ Database
ที่เราทำงานอยู่ ในตัวอย่างนี้เราของยกตัวอย่างโดยใช้ sql*plus ในการเปิด
Connection
| $sqlplus
scott/tiger@viper |
4.
Execute คำสั่ง query เพื่อตรวจสอบ session อีกครั้ง
| SQL>
SQL>
select sid,serial#,username from v$session;
SID SERIAL# USERNAME
----------
---------- ------------------------------
1 1
2 1
3 1
4 1
5 1
6 1
7 3 SYSTEM
8 14 SCOTT
8
rows selected.
SQL> |
ซึ่งจะเห็นได้ว่ามี
user SCOTT ทำการ create session โดยที่มี SID=8 และ SERIAL#=14
**
นอกจากวิธีเปรียบเทียบค่า ใน v$session ก่อนและหลังนี้แล้ว ก็ยังมีวิธีอื่น
ที่ดูสมเหตุสมผล กว่าในกรณีที่เรารู้ชื่อเครื่อง และ login name
ของ Operating System อาจลอง "desc v$session " ดูนะครับมีหลาย column
ที่มีประโยชน์ ซึ่งก็ทำให้เรารู้ SID,SERIAL# ของ Session ที่เราต้องการเปิด
trace file ด้วยเช่นกัน อย่างเช่น
| SQL>
SQL>
select sid,serial#,username,machine,terminal from v$session
SID SERIAL# USERNAME MACHINE TERMINAL
----------
---------- ---------- ------------------------------ ----------
1 1 dec4100.exzilla.net UNKNOWN
2 1 dec4100.exzilla.net UNKNOWN
3 1 dec4100.exzilla.net UNKNOWN
4 1 dec4100.exzilla.net UNKNOWN
5 1 dec4100.exzilla.net UNKNOWN
6 1 dec4100.exzilla.net UNKNOWN
8 14 SCOTT SWDG\FUJU FUJU
9 105 SYSTEM dec4100.exzilla.net ttyp1
8
rows selected.
SQL> |
เรา
Select ชื่อ column ที่เป็น MACHINE และ TERMINAL เพิ่มก็จะทำให้เราหา
SID,SERIAL# ของ Session ที่เราต้องการได้ง่ายขึ้น ซึ่งจากตัวอย่าง
เราจะรู้ว่า มีการ login ด้วย user ชื่อ SCOTT จากเครื่อง ชื่อ SWDG\FUJU,
TERMINAL ชื่อ และมีค่า SID=8,SERIAL#=21
5.
และเพื่อต้องการสร้าง Trace File ของ ข้อมูลที่เกิดขึ้นใน session
ที่เราต้องการ เราจะใช้ se_sql_trace_in_session procedure ซึ่ง
defined อยู่ใน DBMS_SYSTEM package. เป็นตัวจัดการ
| SQL>
exec sys.dbms_system.set_sql_trace_in_session(8,14,true);
PL/SQL
procedure successfully completed.
SQL> |
6.
เริ่ม Execute คำสั่ง จาก application ที่เราต้องการตรวจจับ
| SQL>
select ename,job,hiredate,dname from emp e,dept d where
e.deptno = d.deptno; |
7.
ค้นหา Trace file ที่เกิดขึ้นใน USER_DUMP_DEST เราอาจตรวจสอบตำแหน่งที่อยู่ของ
Trace file ได้โดย
| SQL>
SQL>
select value from v$parameter where name = 'user_dump_dest'
VALUE
--------------------------------------------------------------------------------
/oracle/OraHome1/admin/viper/udump
SQL> |
8.
และเพื่อรู้ว่า File ใดเป็น file ที่เกิดขึ้นจากการ trace นั้น เราก็สามารถค้นหาได้โดย
| $
cd /oracle/OraHome1/admin/viper/udump
$
pwd
/oracle/OraHome1/admin/viper/udump
$
grep 8.14 *
ora_855.trc:***
2001-05-16 23:48:14.768
ora_855.trc:***
SESSION ID:(8.14) 2001-05-16 23:48:14.766
$ |
9.
ยุติการ generation trace file
การยุติการสร้าง
trace file สามารถทำได้โดย การ kill session นั้นออกไป หรือ
| SQL>
exec sys.dbms_system.set_sql_trace_in_session(8,14,false);
PL/SQL
procedure successfully completed.
SQL> |
10.
เพื่อให้ trace file ที่เกิดขึ้นเป็น Format ที่เราอ่านรู้เรื่องและต้องการดู
execution plan ก็ควรใช้ tkprof ในการแปลง file
| $
tkprof ora_855.trc /tmp/out.txt explain=scott/tiger@viper |
ซึ่งก็จะได้
/tmp/out.txt ที่แสดง execution
plan ของ instructions ของ application ที่เราสนใจอยู่
Sample
output file from tkprof command
| select
ename,job,hiredate,dname
from
emp e,dept d where e.deptno = d.deptno
call
count cpu elapsed disk query current rows
-------
------ -------- ---------- ---------- ---------- ----------
----------
Parse
1 0.00 0.04 0 0 0 0
Execute
1 0.00 0.00 0 0 0 0
Fetch
2 0.00 0.01 0 2 8 14
-------
------ -------- ---------- ---------- ---------- ----------
----------
total
4 0.00 0.05 0 2 8 14
Misses
in library cache during parse: 1
Optimizer
goal: CHOOSE
Parsing
user id: 20 (SCOTT)
Rows
Execution Plan
-------
---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
0 MERGE JOIN
0 SORT (JOIN)
0 TABLE ACCESS (FULL) OF 'DEPT'
0 SORT (JOIN)
0 TABLE ACCESS (FULL) OF 'EMP' |
Reference:
[1]
Michele Cyran. Designing and Tuning for Performance Release 2
(8.1.6), United State: Oracle Corporation,December 1997
|