Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于oracle中session跟踪的总结(56天)

关于oracle中session跟踪的总结(56天)

作者头像
jeanron100
发布于 2018-03-13 10:30:51
发布于 2018-03-13 10:30:51
1.2K0
举报

数据库中的session在操作中可能会有各种各样的问题,比如一条sql语句执行失败,某一个应用在一些特定的场景下就会有一些性能问题等等,有时候在代码层去做一些debug来说肯定是不实际的,而且也不一定能够迅速的排查问题,对于session的监控显得尤为重要。可以灵活的开启和关闭,在数据库层面,session层面,甚至特定的应用层面都能够进行监控,今天和大家分享一下对于的session监控常用的一些方法。 1.dbms_system.set_sql_trace_in_session 可以对其他的session进行跟踪,功能比较全面,在早期版本中使用比较多。 2.dbms_system.set_ev 可以灵活的指定相应的诊断时间,可以对其他的session进行跟踪,功能比较全面。 3.dbms_monitor 在10g,11g及后期版本中大量使用。可以对其他的session进行跟踪,说是dbms_system的升级版本。 4.sql_trace 对当前session进行跟踪。 5.session level event 对当前的的session进行跟踪。 6.oradebug 可以绑定进程,session 对于oradebug,个人想专门开一个专题,自己好好琢磨一下,稍后分享,这篇文章会对以上的5种方法进行总结。 1.dbms_system.set_sql_trace_in_session 启用两个session session1: SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 9 session 2: 查到具体的session信息以后,开始进行跟踪。 SQL> exec dbms_system.set_sql_trace_in_session(254,9,true); PL/SQL procedure successfully completed. session1: 在session1中进行一些操作,以便跟踪。 SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 关闭跟踪。 SQL> exec dbms_system.set_sql_trace_in_session(254,9,false); PL/SQL procedure successfully completed. trace files: 得到具体的trace文件,可以使用tkprof进行格式化。 SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=9); SPID ------------------------ 2688 -rw-r----- 1 ora11g dba 128 Apr 27 01:43 TEST01_ora_2688.trm -rw-r----- 1 ora11g dba 3871 Apr 27 01:43 TEST01_ora_2688.trc 2.dbms_system.set_ev session1: 得到要监控的session的信息 SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 17 session2: 开启监控。 SQL> exec dbms_system.set_ev(254,17,100046,12,''); PL/SQL procedure successfully completed. --虽然定义的事件不正确,但是还是执行成功,不过不会有trace日志生成。 重新开启监控 SQL> exec dbms_system.set_ev(254,17,10046,12,''); PL/SQL procedure successfully completed. session1: 开始一些操作,以便跟踪。 SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 结束监控 SQL> exec dbms_system.set_ev(254,17,10046,0,''); PL/SQL procedure successfully completed. 查看trace日志 SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=17); SPID ------------------------ 3497 -rw-r----- 1 ora11g dba 100 Apr 27 04:10 TEST01_ora_3497.trm -rw-r----- 1 ora11g dba 3294 Apr 27 04:10 TEST01_ora_3497.trc 3.dbms_monitor session1: SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 7 session2: 开启监控 SQL> exec dbms_monitor.session_trace_enable(254,7); PL/SQL procedure successfully completed. session1: SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 结束监控。 SQL> exec dbms_monitor.session_trace_disable(254,7); PL/SQL procedure successfully completed. trace files: SQL> select process,paddr,sid from v$session where sid=254; PROCESS PADDR SID ------------------------ ---------------- ---------- 2560 000000007278E200 254 查看v$process得到spid SPID PID USERNAME ------------------------ ---------- --------------- 2561 27 ora11g -rw-r----- 1 ora11g dba 454 Apr 27 01:35 TEST01_ora_2561.trm -rw-r----- 1 ora11g dba 29887 Apr 27 01:35 TEST01_ora_2561.trc 4.sql_trace 只针对当前session SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 13 开启sql跟踪 SQL> alter session set sql_trace=true; Session altered. SQL> select count(*)from cat; COUNT(*) ---------- 2 关闭sql跟踪 SQL> alter session set sql_trace=false; Session altered. trace files: SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=13); SPID ------------------------ 2780 -rw-r----- 1 ora11g dba 121 Apr 27 01:52 TEST01_ora_2780.trm -rw-r----- 1 ora11g dba 3594 Apr 27 01:52 TEST01_ora_2780.trc 5.session level event 开启诊断事件 10046,当前session中查看trace 日志 SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 11 开启跟踪 SQL> alter session set events '10046 trace name context forever,level 12'; Session altered. SQL> select count(*)from cat; COUNT(*) ---------- 2 结束跟踪 SQL> alter session set events '10046 trace name context off'; Session altered. trace files: SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=11); SPID ------------------------ 2713 -rw-r----- 1 ora11g dba 134 Apr 27 01:50 TEST01_ora_2713.trm -rw-r----- 1 ora11g dba 4087 Apr 27 01:50 TEST01_ora_2713.trc 6.oradebug 后期补充。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2014-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【DB笔试面试688】在Oracle中,跟踪会话执行语句的方法有哪几种?
因为TRACE的目标范围不同,所以导致必须使用不同的方法。若作用于数据库全局的,则改初始化参数。若只作用于当前会话的,则就用ALTER SESSION命令。若作用于其它会话的,则就用DBMS_SYSTEM包。
AiDBA宝典
2019/11/15
1.1K0
简单分析shared pool(一) (r3笔记46天)
oracle中的shared pool很重要,但是感觉知之甚少。今天想在原来的认识上能够有一点更深入的了解。 简单做了一个总结。 首先是转储一下shared pool共享内存的内容。 SQL> alter session set events 'immediate trace name heapdump level 2'; Session altered. 这个步骤会得到一个trace文件。简单的换算一下,就得到了trace文件的大体信息。 SQL> select sid from v$mystat
jeanron100
2018/03/14
6790
简单分析shared pool(一) (r3笔记46天)
session跟踪失效的问题和分析(57天)
最近碰到一个奇怪的问题,在生产和其他比较正式的环境中进行sql trace都没问题,但就是测试环境的数据库不知道怎么的, 设置sql_trace,开启诊断事件,dbms_system,dbms_monitor都试了,就是没有trace日志,我都怀疑是不是有些配置给禁用了。 查看基本的参数设置,没有发现什么问题。 SQL> show parameter statis NAME TYPE VALUE -----------------
jeanron100
2018/03/14
9880
启用 Oracle 10046 调试事件
    Oracle 10046是一个Oracle内部事件。最常用的是在Session级别设置sql_trace(alter session set sql_trace=true)即是开启了级别为1的10046调试事件。当设置了10046事件之后,Oracle 将产生一个dump文件。通过得到的dump文件进行进一步分析,可以得到Oracle 内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着举足轻重的作用。
Leshami
2018/08/14
7540
SQL Tuning 基础概述
实例级别还可以在pfile/spfile参数文件中加 sql_trace = true
Alfred Zhao
2019/05/24
3960
使用logon trigger完成动态的session跟踪(r4笔记第29天)
在之前讨论过 关于oracle中session跟踪的总结,可以参见链接 http://blog.itpub.net/23718752/viewspace-1150568/ 基本的session跟踪方法都做了讨论,但是在实际应用中场景可能要复杂一些,比如我们可以对指定的session开诊断事件,如果session中运行的某个环节出现问题,可以根据诊断事件得到比较明细的递归sql来逐步查看排除,知道问题的根源。 但是如果不确定session的情况,因为每次连接进来的session都是不固定的,这样就很难开诊断事
jeanron100
2018/03/15
6880
Oracle 11g R2性能优化 SQL TRACE
作为Oracle官方自带的一种基本性能诊断工具,SQL Trace可以用来评估当前正在运行的SQL语句的效率,同时为该语句生成统计信息等,并保存这些信息到指定路径下的跟踪文件(trace)当中。SQL Trace会将一条SQL语句或者PL/SQL包执行过程全部输出到跟踪文件(trace)当中,可以通过分析跟踪文件(trace)来分析SQL语句的执行效率并进行性能诊断与优化。
星哥玩云
2022/08/17
6190
【DB笔试面试664】在Oracle中,模拟死锁产生的一个场景。
Oracle中的死锁比较复杂,产生死锁的原因也有很多种,曾经有面试官让面试人员口头模拟死锁产生的一个场景。
AiDBA宝典
2019/10/23
7320
【DB笔试面试664】在Oracle中,模拟死锁产生的一个场景。
关于oracle session的简单测试(r2笔记95天)
平时查看v$session的时候要定位一个session,需要sid,serial#这个两个值,其实更多时候我们关注更多的是sid,对于serial#却不太了解。 至少从v$mystat中,可以看
jeanron100
2018/03/14
7190
启用用户进程跟踪
仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)
Leshami
2018/08/07
6000
绑定变量及其优缺点
    绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容 易折断。凡事皆有利弊二性,因地制宜,因时制宜,全在如何权衡而已。本文讲述了绑定变量的使用方法,以及绑定变量的优缺点、使用场合。
Leshami
2018/08/14
1.5K0
查看Oracle执行计划的几种常用方法-系列3
续上篇:http://blog.csdn.net/bisal/article/details/39225373
bisal
2019/01/29
7950
【SQL】历史SQL监控(Historical SQL Monitoring ) 功能(12c)
Oracle 11g版本 推出了实时SQL监控功能(Real-Time SQL Monitoring),用于实时地监视执行中SQL的性能;Oracle 12c 对其进一步进行了扩展,推出了历史SQL监控功能(Historical SQL Monitoring)。
SQLplusDB
2020/03/26
1.8K0
在线重定义(online redefinition)真的在线吗?
最近用Online Redefinition解决了一批普通大表(超千万级别)转换成分区表,后期方便做数据裁剪(truncate partition),Online Redefinition的优点是支持在线操作,但在操作过程中还是发生了一些生产操作的事故,分享出来让大家避坑。
布衣530
2025/01/17
1370
在线重定义(online redefinition)真的在线吗?
Oracle日常性能问题查看
1 判断回滚段竞争的sql --当Ratio大于2时存在回滚段竞争,需要增加更多的回滚段) select rn.name, rs.GETS, rs.WAITS, (rs.WAITS / rs.GETS) * 100 ratio from v$rollstat rs, v$rollname rn where rs.USN = rn.usn; 2 判断恢复日志竞争的sql --immediate_contention或wait_contention的值大于1时存在竞争) select name, (t.IMME
星哥玩云
2022/08/17
4840
Oracle日常性能问题查看
####### Scripts Summary #######
Scripts Summary Version: 1.0.1 issueDate: 2017-11-11 modifiedDate: 2017-11-28
Alfred Zhao
2019/05/24
5780
Oracle数据库的初始化与跟踪学习方法
编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友们。 10046 事件是 Oracle 提供的内部跟踪事件,是对 SQL_TRACE 的增强,通过10046可以通知Oracle内核执行SQL_TRACE类的跟踪操作。如果我们需要获得更多的跟踪信息,就需要用到10046事件,而在实际工作中最常用的就是10046事件。 自11g开始,10046获得了更多的增强,包括明确的在设置中指定SQL_trac
数据和云
2018/03/07
1.5K0
Oracle数据库的初始化与跟踪学习方法
SQL调优和诊断工具之SQL Trace (10046 Event)介绍
为了诊断SQL性能或者其他方面的问题,有时我们需要跟踪SQL语句和的执行过程,这时我们可以启用SQL Trace (10046 Event)来收集语句的执行过程和各种相关信息。
SQLplusDB
2022/08/19
8510
寻找SQL执行线索的武器库
碰到一些SQL问题,有时常规的方式,例如执行计划,不足以给出问题的线索。因此,可能还需要跟踪这条SQL,通过Oracle提供的trace,了解它内部执行的机制,从中寻找线索。
bisal
2023/03/07
7280
寻找SQL执行线索的武器库
网罗收集10046的各种Case,方便trace信息的收集 | Oracle官方博客转载
原文链接:https://blogs.oracle.com/database4cn/10046casetrace
SQLplusDB
2020/08/13
5620
相关推荐
【DB笔试面试688】在Oracle中,跟踪会话执行语句的方法有哪几种?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档