- 浏览: 442751 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的yeol:
正在学习EJB 感觉有些吃力
Ejb3学习之二----Ejb3的Ejb Bean类型介绍 -
phoenix5870:
默认就是singleton的。
Spring中的Singleton模式和Java中的Singleton模式 -
jhys7s8jd:
pdf打印机下载 无水印http://www.onlinedo ...
PDFCreate工具的使用 -
wang371134086:
:e vil:
浅谈Struts2中的拦截器实现责任链模式 -
liu765023051:
亲,local与remote有什么区别呢
EJB学习之三---Local和Remote接口
使用SQL_TRACE进行数据库诊断
- 博客分类:
- 数据库
From:http://www.eygle.com/archives/2004/10/use_sql_trace_to_diagnose_database.html
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。
本文就SQL_TRACE的使用作简单探讨,并通过具体案例对sql_trace的使用进行说明.
一、 基础介绍
(a) SQL_TRACE说明
SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。
1. 在全局启用
在参数文件(pfile/spfile)中指定:
sql_trace =true
在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。
提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调.
2. 在当前session级设置
大多数时候我们使用sql_trace跟踪当前进程.通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),
研究SQL执行,发现后台错误等.
在session级启用和停止sql_trace方式如下:
启用当前session的跟踪:
SQL> alter session set sql_trace=true;
Session altered.
此时的SQL操作将被跟踪:
3. 跟踪其他用户进程
在很多时候我们需要跟踪其他用户的进程,而不是当前用户,这可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
来完成
SET_SQL_TRACE_IN_SESSION过程序要提供三个参数:
通过v$session我们可以获得sid、serial#等信息:
获得进程信息,选择需要跟踪的进程:
设置跟踪:
可以等候片刻,跟踪session执行任务,捕获sql操作...
....
停止跟踪:
(b) 10046事件说明
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
1. 在全局设置
在参数文件中增加:
event="10046 trace name context forever,level 12"
此设置对所有用户的所有进程生效、包括后台进程.
2. 对当前session设置
通过alter session的方式修改,需要alter session的系统权限:
3. 对其他用户session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:
其中的参数SI、SE来自v$session视图:
查询获得需要跟踪的session信息:SQL> select sid,serial#,username from v$session where username is not null;SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
执行跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');
PL/SQL procedure successfully completed.
结束跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');
PL/SQL procedure successfully completed.
(c) 获取跟踪文件
以上生成的跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得:
SQL> select
2 d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name 3 from 4 ( select p.spid 5 from sys.v$mystat m,sys.v$session s,sys.v$process p 6 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, 7 ( select t.instance from sys.v$thread t,sys.v$parameter v 8 where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, 9 ( select value from sys.v$parameter where name = 'user_dump_dest') d 10 / TRACE_FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/admin/hsjf/udump/hsjf_ora_1026.trc
(d) 读取当前session设置的参数
当我们通过alter session的方式设置了sql_trace,这个设置是不能通过show parameter的方式得到的,我们需要通过dbms_system.read_ev来获取:
SQL> set feedback off
SQL> set serveroutput on SQL> declare
2 event_level number;
3 begin
4 for event_number in 10000..10999 loop
5 sys.dbms_system.read_ev(event_number, event_level);
6 if (event_level > 0) then
7 sys.dbms_output.put_line(
8 'Event ' ||
9 to_char(event_number) ||
10 ' is set at level ' ||
11 to_char(event_level)
12 );
13 end if;
14 end loop;
15 end;
16 /
Event 10046 is set at level 1
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。
本文就SQL_TRACE的使用作简单探讨,并通过具体案例对sql_trace的使用进行说明.
一、 基础介绍
(a) SQL_TRACE说明
SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。
1. 在全局启用
在参数文件(pfile/spfile)中指定:
sql_trace =true
在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。
提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调.
2. 在当前session级设置
大多数时候我们使用sql_trace跟踪当前进程.通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),
研究SQL执行,发现后台错误等.
在session级启用和停止sql_trace方式如下:
启用当前session的跟踪:
SQL> alter session set sql_trace=true;
Session altered.
此时的SQL操作将被跟踪:
SQL> select count(*) from dba_users; COUNT(*) ---------- 34 结束跟踪: SQL> alter session set sql_trace=false; Session altered.
3. 跟踪其他用户进程
在很多时候我们需要跟踪其他用户的进程,而不是当前用户,这可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
来完成
SET_SQL_TRACE_IN_SESSION过程序要提供三个参数:
SQL> desc dbms_system ... PROCEDURE SET_SQL_TRACE_IN_SESSION Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SID NUMBER IN SERIAL# NUMBER IN SQL_TRACE BOOLEAN IN ...
通过v$session我们可以获得sid、serial#等信息:
获得进程信息,选择需要跟踪的进程:
SQL> select sid,serial#,username from v$session 2 where username is not null; SID SERIAL# USERNAME ---------- ---------- ------------------------------ 8 2041 SYS 9 437 EYGLE
设置跟踪:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,true) PL/SQL procedure successfully completed.....
可以等候片刻,跟踪session执行任务,捕获sql操作...
....
停止跟踪:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,false) PL/SQL procedure successfully completed.
(b) 10046事件说明
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
1. 在全局设置
在参数文件中增加:
event="10046 trace name context forever,level 12"
此设置对所有用户的所有进程生效、包括后台进程.
2. 对当前session设置
通过alter session的方式修改,需要alter session的系统权限:
SQL> alter session set events '10046 trace name context forever'; Session altered. SQL> alter session set events '10046 trace name context forever, level 8'; Session altered. SQL> alter session set events '10046 trace name context off'; Session altered.
3. 对其他用户session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:
SQL> desc dbms_system ... PROCEDURE SET_EV Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SI BINARY_INTEGER IN SE BINARY_INTEGER IN EV BINARY_INTEGER IN LE BINARY_INTEGER IN NM VARCHAR2 IN ...
其中的参数SI、SE来自v$session视图:
查询获得需要跟踪的session信息:SQL> select sid,serial#,username from v$session where username is not null;SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
执行跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');
PL/SQL procedure successfully completed.
结束跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');
PL/SQL procedure successfully completed.
(c) 获取跟踪文件
以上生成的跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得:
SQL> select
2 d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name 3 from 4 ( select p.spid 5 from sys.v$mystat m,sys.v$session s,sys.v$process p 6 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, 7 ( select t.instance from sys.v$thread t,sys.v$parameter v 8 where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, 9 ( select value from sys.v$parameter where name = 'user_dump_dest') d 10 / TRACE_FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/admin/hsjf/udump/hsjf_ora_1026.trc
(d) 读取当前session设置的参数
当我们通过alter session的方式设置了sql_trace,这个设置是不能通过show parameter的方式得到的,我们需要通过dbms_system.read_ev来获取:
SQL> set feedback off
SQL> set serveroutput on SQL> declare
2 event_level number;
3 begin
4 for event_number in 10000..10999 loop
5 sys.dbms_system.read_ev(event_number, event_level);
6 if (event_level > 0) then
7 sys.dbms_output.put_line(
8 'Event ' ||
9 to_char(event_number) ||
10 ' is set at level ' ||
11 to_char(event_level)
12 );
13 end if;
14 end loop;
15 end;
16 /
Event 10046 is set at level 1
发表评论
-
Oracle的Hash Join之探究整理
2012-04-08 15:48 11321Hash join算法原理 自从or ... -
Oracle Event 10046
2012-03-29 23:17 1599下面是一个10046的例子,可以用来分析具体的一些sql执行计 ... -
Oracle索引之B-Tree和Bitmap索引对比
2012-03-23 18:32 2330B树索引是所有大型关系 ... -
Oracle性能优化五大工具介绍
2012-03-23 15:55 1540本文介绍了Oracle性能优化工具Oracle数据库在线数据字 ... -
Oracle事物处理中回滚段容量的问题
2012-03-23 15:33 1598在执行大事务时,有时oracle会报出如下的错误: ORA- ... -
Oracle 中条件分歧总结
2011-06-01 23:17 1309Oracle 中条件分歧总结: * Decode * IF ... -
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
2011-06-01 23:07 2278转载:http://blog.csdn.net/songsen ... -
View的作用
2010-11-11 00:53 3134这篇文章重要讲述下关 ... -
Oracle For Update 行锁
2010-11-08 23:43 1927转自:http://hi.baidu.com/mcj0127/ ... -
Mysql的存储引擎:InnoDB和MyISAM区别
2010-10-05 02:25 1338InnoDB和MyISAM是许多人在 ... -
SSMAを活用してMySQL/AccessからSQL Server/Azureへマイグレーション
2010-09-10 23:03 2302作者 Abel Avram , 翻訳者 (株)ネクストスケープ ... -
Oracle 嵌套事务与自治事务思考
2010-04-22 21:35 6206关键字 嵌套事务和自治事务的概念 嵌套事务的使用 ... -
Oracle中Cursor介绍
2010-04-21 22:09 1734关键字 概念 类型 异常处理 一 概念 游标是SQL ... -
Oracle 10g 中动态性能视图
2010-04-16 19:18 2023动态性能视图用于记录当前例程的活动。启动例程时,oracle会 ... -
Oracle 和 Sql Server中日期的显示问题
2010-03-10 02:01 2825在日常的项目中,经常遇见User需要显示不同的日期格式。当然, ... -
Oracle中RowNum的用法
2010-02-08 22:05 1775ROWNUM,是一种伪列,它根据特定记录返回一个序列化的数字。 ... -
ORACLE 分析函数解析
2010-01-17 21:29 1311分析函数是oracle 8.1.6中就引入的一个全新的概念,为 ... -
ORACLE LOB大对象处理
2010-01-16 21:42 2422ORACLE LOB大对象处理 主要是用来存储大量数据的数据库 ... -
DUMP用法
2010-01-16 09:13 1819一 DUMP():查看表中列在datafile中的存储内容,它 ... -
全角,半角互换
2010-01-12 12:08 2004对于全角和半角互换,oracle 提供了两个函数to_mult ...
相关推荐
数据库、数据表、数据表I/O优化原则 2、选用适合的ORACLE优化器 3、访问Table的方式 ...8、使用sql_trace/10046事件进行数据库诊断 9、当前会话的所有SQL语句生成执行计划 10、如何干预执行计划 - - 使用hints提示
通过对 trace 档的分析,不仅可以掌握该 session 的活动, 也可以找出这个 session 中的瓶颈所在,对 session 的跟踪是 DBA 进行系统调优、故障诊断的常用方法。 对当前会话的活动进行跟踪及停止跟踪: alter ...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 ... 10.4 使用SQL_TRACE/10046事件进行数据库诊断 10.5 使用物化视图进行翻页性能调整 10.6 一次横跨两岸的问题诊断 10.7 总结
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 ... 10.4 使用SQL_TRACE/10046事件进行数据库诊断 10.5 使用物化视图进行翻页性能调整 10.6 一次横跨两岸的问题诊断 10.7 总结
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 ... 10.4 使用SQL_TRACE/10046事件进行数据库诊断 10.5 使用物化视图进行翻页性能调整 10.6 一次横跨两岸的问题诊断 10.7 总结
10.4 使用SQL_TRACE/10046事件进行数据库诊断 497 10.4.1 SQL_TRACE及10046事件的基础介绍 497 10.4.2 诊断案例之一:隐式转换与索引失效 502 10.4.3 诊断案例之二:跟踪后台错误 506 10.4.4 10046与等待...
Oracle诊断案例-I/O子系统 1 系统软硬件现状 1 Vmstat数据 2 Statpack数据 2 业务分析 3 数据库性能分析 3 修改建议 4 调整后性能的改善 5 Oracle诊断案例-Spfile案例 5 ...Oracle诊断案例-Sql_trace之一 38
并分析hanganalyze 生成的trace文件,看是否可以找到引起数据库hang 住的会话的信息。 (3)做systemstate dump 此时生成systemstate dump的时间会比较长,尤其是在会话数量较多的情 况下。且生成dump文件的...
§12.8 使用SQL_Trace和TKPROF 151 §12.8.1 设置跟踪初始化参数 152 §12.8.2 启用SQL_Trace实用工具 152 §12.8.3 用TKPROF格式化跟踪文件 153 §12.8.4 解释TKPROF输出文件 155 §12.8.5 解释计划(Explain Plan)...
1z0-033-11(A)(好) SQL优化 SQL优化器的使用 查询计划 计划稳定性的概要 TRACE TKTOP使用 13 1z0-033-11(B) 13 1z0-033-11(B) 发布不同oracle文件的原因 诊断表空间 表空间分区原因 检查点工作 检查点优化 调整...
Microsoft SQL Server数据库的有用链接,脚本,工具和最佳实践 目录 回购文件夹和文件 (完整列表-613跟踪标志) (完整清单-从SQL Server 1.0到SQL Server 2019 ) 很棒SQL Server诊断信息查询(作者Glenn Alan ...
Oracle数据库SQL执行计划的取得和解析 11gR2频繁遭遇Checkpoint incompelte 12C_19C统计信息最佳实践 并行不悖 - Oracle数据库的并行执行 抽丝剥茧_一起有关新冠病毒疫情的勒索病毒案例 从内存故障到CPU过高Oracle...
包括 JWT 鉴权,CORS跨域,AES 对称加密,引入ELK体系方便日志查看,jaeger进行trace查看,skywalk MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于美国甲骨文公司...
20.3.1 使数据库支持SQL Server高速缓存 禁用功能695 20.3.2 使表支持SQL Server 高速缓存禁用功能695 20.3.3 对SQL Server的影响695 20.3.4 查看支持SQL 高速缓存禁用功能的表696 20.3.5 使表不...
13.7.2 SQL Server Yukon 2005和XML数据类型 459 13.8 小结 459 第14章 站点导航 461 14.1 基于XML的站点地图 461 14.2 SiteMapPath 服务器控件 463 14.2.1 PathSeparator属性 465 14.2.2 PathDirection 属性 ...
一、SQL................................................... 1.1、基本概念:........................................... 1.2、数据库安全:......................................... 1.3、基本的SQL SELECT ...