• Oracle用户进程跟踪


    用户进程跟踪

    1 分为 基于会话级别跟踪和 实例级别跟踪;
    2 会话级别跟踪又包括 当前会话跟踪和 非当前会话跟踪
    3 跟踪文件位置由user_dump_dest设定,大小由max_dump_file_size 决定
    4 生成的跟踪文件名为<SID>_ora_<SPID>.trc  其中SID为实例名称,SPID为系统进程号
    5 通过v$session中的SQL_TRACE,SQL_TRACE_WAITS,SQL_TRACE_BINDS展示了一个会话的跟踪状态

    注:
        在专用服务器模式中:仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)
        在共享模式中:对任何一个会话的跟踪会分布到每个共享服务器进程所生成的跟踪文件内。这时可以用tkprof合并多个sql跟踪文件

    1.1 基于会话级别跟踪

    1.1.1 针对当前会话跟踪

     1 --以DBA权限 查看用户跟踪文件所在的位置
     2 SQL> show parameter user_dump 
     3 
     4 NAME                                 TYPE        VALUE
     5 ------------------------------------ ----------- ------------------------------
     6 user_dump_dest                       string      /u01/admin/sun/udump
     7 SQL> 
     8 
     9 --清空先前产生的跟踪文件
    10 SQL> ! rm -f /u01/admin/sun/udump/*.trc
    11 
    12 
    13 --开启一个会话连接
    14 SQL> conn hr/hr123
    15 Connected.
    16 SQL> 
    17 
    18 --开启当前会话跟踪
    19 SQL> alter session set sql_trace=true;
    20 
    21 Session altered.
    22 
    23 SQL> 
    24 
    25 --执行测试SQL语句
    26 --跟踪完毕后执行下面的语句关闭跟踪
    27 SQL> alter session set sql_trace = false;
    28 
    29 Session altered.
    30 
    31 SQL> 
    32 
    33 
    34 --通过DBA用户获取其SPID
    35 SQL> select s.username,s.sid,p.spid from v$session s,v$process p
    36   2  where s.paddr = p.addr and s.username = 'HR';
    37 
    38 USERNAME                              SID SPID
    39 ------------------------------ ---------- ------------
    40 HR                                    141 1255
    41 
    42 SQL>
     1 #可以使用vi,taik等工具 查看产生的跟踪会话文件
     2 bash-3.00$ vi  sun_ora_1255.trc
     3 ............
     4 =====================
     5 PARSING IN CURSOR #5 len=18 dep=0 uid=55 oct=3 lid=55 tim=6241133514 hv=2637153722 ad='5d4e9008'
     6 select * from jobs  --此处是我的测试sql
     7 END OF STMT
     8 PARSE #5:c=130000,e=189841,p=9,cr=124,cu=0,mis=1,r=0,dep=0,og=1,tim=6241133508
     9 EXEC #5:c=0,e=28,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=6241133636
    10 FETCH #5:c=10000,e=37492,p=6,cr=6,cu=0,mis=0,r=1,dep=0,og=1,tim=6241171200
    11 FETCH #5:c=0,e=41,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,tim=6241171781
    12 FETCH #5:c=0,e=266,p=0,cr=2,cu=0,mis=0,r=3,dep=0,og=1,tim=6241174115
    13 STAT #5 id=1 cnt=19 pid=0 pos=1 obj=51968 op='TABLE ACCESS FULL JOBS (cr=9 pr=6 pw=0 time=37479 us)'
    14 *** 2013-08-10 10:15:16.843
    15 =====================
    16 PARSING IN CURSOR #1 len=35 dep=0 uid=55 oct=42 lid=55 tim=6317825775 hv=310044142 ad='5d4e3c80'
    17 alter session set sql_trace = false --关闭当前跟踪操作
    18 END OF STMT
    19 PARSE #1:c=0,e=661,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=6317825738
    20 EXEC #1:c=0,e=558,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=6317826627

    1.1.2 针对非当前会话跟踪

     1 --开启user1 会话连接
     2 SQL> conn user1/user1
     3 Connected.
     4 SQL>
     5 
     6 --用DBA 用户查看
     7 SQL> select s.username,s.sid,p.spid from v$session s,v$process p
     8   2  where s.paddr = p.addr and s.username = 'USER1';
     9 
    10 USERNAME                              SID SPID
    11 ------------------------------ ---------- ------------
    12 USER1                                 137 1325
    13 
    14 SQL> select sid,serial# from v$session where username = 'USER1';             
    15 
    16        SID    SERIAL#
    17 ---------- ----------
    18        137        118
    19 
    20 SQL>
    21 
    22 --另开启hr 会话连接
    23 SQL> conn hr/hr123
    24 Connected.
    25 SQL> 
    26 --在hr会话中开启对user1的跟踪
    27 SQL> exec dbms_monitor.session_trace_enable(session_id=>137,serial_num=>118);
    28 
    29 PL/SQL procedure successfully completed.
    30 
    31 SQL> 
    32 
    33 --执行SQL 语句则开始跟踪
    34 --跟踪完毕后执行下面的语句关闭跟踪
    35 SQL> exec dbms_monitor.session_trace_disable(session_id=>137,serial_num=>118);
    36 
    37 PL/SQL procedure successfully completed.
    38 
    39 SQL> 
     1 --查看产生的跟踪会话文件
     2 bash-3.00$ vi sun_ora_1325.trc
     3 =====================
     4 PARSING IN CURSOR #1 len=39 dep=0 uid=61 oct=6 lid=61 tim=8939219692 hv=1424147089 ad='5d4ddba4'
     5 update t
     6 set name = 'TRACE'
     7 WHERE ID =7
     8 END OF STMT
     9 PARSE #1:c=60000,e=46632,p=0,cr=4,cu=0,mis=1,r=0,dep=0,og=1,tim=8939219683
    10 EXEC #1:c=10000,e=18323,p=0,cr=37,cu=3,mis=0,r=1,dep=0,og=1,tim=8939238175
    11 WAIT #1: nam='SQL*Net message to client' ela= 4 driver id=1650815232 #bytes=1 p3=0 obj#=52616 tim=8939238400
    12 WAIT #1: nam='SQL*Net message from client' ela= 940 driver id=1650815232 #bytes=1 p3=0 obj#=52616 tim=8939239394
    13 STAT #1 id=1 cnt=0 pid=0 pos=1 obj=0 op='UPDATE  T (cr=37 pr=0 pw=0 time=17923 us)'
    14 STAT #1 id=2 cnt=1 pid=1 pos=1 obj=52616 op='TABLE ACCESS FULL T (cr=37 pr=0 pw=0 time=263 us)'
    15 WAIT #0: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=52616 tim=8939239595

    1.2 基于实例级别跟踪

     1 --清除跟踪文件夹下先前产生的跟踪文件
     2 SQL> ! rm -f /u01/admin/sun/udump/*.trc
     3 
     4 
     5 --设置实例级别的跟踪
     6 SQL> conn /as sysdba
     7 Connected.
     8 SQL> alter system set sql_trace = true;
     9 System altered.
    10 SQL> 
    11 
    12 --开启hr会话测试
    13 SQL> conn hr/hr123
    14 Connected.
    15 SQL> select JOB_TITLE,MIN_SALARY,MAX_SALARY from jobs where JOB_ID='ST_MAN';
    16 
    17 JOB_TITLE                           MIN_SALARY MAX_SALARY
    18 ----------------------------------- ---------- ----------
    19 Stock Manager                             5500       8500
    20 
    21 SQL>
    22 
    23 --开启user1会话测试
    24 SQL> conn user1/user1
    25 Connected.
    26 SQL> select * from t;
    27 
    28         ID NAME
    29 ---------- ----------------
    30          8 inspur
    31          1 oracle
    32 
    33 。。。。。
    34 
    35 --查看SPID
    36 SQL> select s.username,s.sid,p.spid from v$session s,v$process p
    37   2  where s.paddr = p.addr; 
    38   
    39 USERNAME                              SID SPID
    40 ------------------------------ ---------- ------------
    41 HR                                    137 1378
    42 USER1                                 141 1384
     1 --查看其各自产生的跟踪文件
     2 bash-3.00$ ls -l *.trc
     3 -rw-r-----   1 oracle   oinstall   17919 Aug 10 11:11 sun_ora_1378.trc  --对hr用户的跟踪
     4 -rw-r-----   1 oracle   oinstall   11140 Aug 10 11:13 sun_ora_1384.trc  --对USER1用户的跟踪
     5 bash-3.00$ 
     6 
     7 --关闭实例级别的跟踪
     8 SQL> alter system set sql_trace = false;
     9 
    10 System altered.
    11 
    12 SQL> 
  • 相关阅读:
    java.util.concurrent学习
    mysql慢查优化总结
    mysql怎么限制某些查询语句的执行?
    数据库操作提交事务如果不关闭,会有什么样的后果?
    apache的500错误是写到哪个文件里面
    apache也可以做负载均衡,跟nignx的区别是什么?
    ajax提交请求为啥url要用这个函数encodeURI
    MySQL性能调优与架构设计读书笔记
    java枚举的作用
    linux的命令
  • 原文地址:https://www.cnblogs.com/polestar/p/3251126.html
Copyright © 2020-2023  润新知