Oracle 11g R2性能优化 10046 event
作为SQL Trace的扩展功能,Oracle 10046 event(10046事件)是一个重要的调试事件,也可以说是系统性能分析时最重要的一个事件,它包含比SQL Trace更多的信息。但可惜的是,10046事件并不是Oracle官方提供给用户的诊断工具,官方文档上面也没有详细的说明,不过还是可以从很多国内外专家技术文档找到相关学习资料,本文主要参考Oracle MOS文档来学习总结下10046事件的用法。
关于SQL Trace的收集方式可以参考另一篇博文:Oracle 11g R2性能优化 SQL TRACE
关于10046 event trace的收集方式可以参考Oracle MOS文档:How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues (文档 ID 376442.1)
主要说明
10046 event根据跟踪的信息详细程度可以分成不同的等级,高级别向低级别兼容,即级别高的跟踪信息包含级别低的信息。
主要级别说明如下表所示:
级别(Level) | 说明(Description) |
---|---|
0 | 不生成跟踪统计信息,相当于SQL_TRACE=FALSE |
1 | 生成标准跟踪统计信息,相当于SQL_TRACE=TRUE,为默认级别 |
2 | 与级别1相同 |
4 | 级别1基础上 + 绑定变量跟踪 |
8 | 级别1基础上 + 等待事件跟踪 |
12 | 级别4 + 级别8 |
16 | 级别1基础上 + 每次执行时写入执行计划信息(11g新增) |
通常使用的级别为12,10046 event跟踪信息可以基本满足分析的需求。关于级别的详细说明可以参考国外大神Christian Antognini的博文:Event 10046 – Full List of Levels
常用使用方式
会话级别开启
根据参考的MOS文档描述,会话级别开启10046 event跟踪之前需设置几个会话级参数选项,如下:
tracefile_identifier
设置生成trace文件的标识符。statistics_level
指定数据库和操作系统统计信息的收集级别,取值为{typical|all|basic}。timed_statistics
指定是否收集与时间相关的统计信息,当statistics_level参数值为typical或all时默认值为true,当statistics_level参数值为basic时默认值为false。max_dump_file_size
指定trace文件(包括告警文件)的最大值,默认为unlimited,取值为{integer [K|M|G] | unlimited}。
会话级别参数设置:
SCOTT@dbabd> alter session set tracefile_identifier = '10046_SCOTT';
Session altered.
SCOTT@dbabd> alter session set timed_statistics = true;
Session altered.
SCOTT@dbabd> alter session set statistics_level = all;
Session altered.
SCOTT@dbabd> alter session set max_dump_file_size = unlimited;
Session altered.
- 开启10046 event跟踪:
-- 这里开启级别为12
SCOTT@dbabd> alter session set events '10046 trace name context forever,level 12';
Session altered.
- 执行需要跟踪语句:
-- 以查询scott.dept表为例
SCOTT@dbabd> select * from dept;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 关闭10046 event跟踪:
SCOTT@dbabd> alter session set events '10046 trace name context off';
Session altered.
或
SCOTT@dbabd> exit;
ORADEBUG开启
oradebug是一个SQL*PLUS命令行工具,它可以跟踪会话、dump内存结构、唤醒进程等。同时,oradebug也可以用来开启10046事件跟踪,并且它可以直接显示trace文件的路径,想要使用oradebug需要有sysdba权限。
关于oradebug详细说明可以参考:ORADEBUG introduction
在oradebug工作之前,必须确定连接的进程号,oradebug主要有如下连接进程方式:
SETMYPID Debug current process -- 跟踪当前会话进程
SETOSPID <ospid> Set OS pid of process to debug -- 通过操作系统的进程
SETORAPID <orapid> ['force'] Set Oracle pid of process to debug -- 通过Oracle的进程
如果无法获取OS pid或者Oracle pid,可以通过如下脚本获取:
- 获取OS pid和会话id(session id)
-- 脚本
column line format a80
set heading off
select 'ospid: ' || p.spid || ' # ''' || s.sid || ',' || s.serial# || ''' ' ||
s.osuser || ' ' || s.machine || ' ' || s.username || ' ' ||
s.program line
from v$session s, v$process p
where p.addr = s.paddr
and s.username <> ' ';
-- 输出
SYS@dbabd> column line format a80
SYS@dbabd> set heading off
SYS@dbabd> select 'ospid: ' || p.spid || ' # ''' || s.sid || ',' || s.serial# || ''' ' ||
2 s.osuser || ' ' || s.machine || ' ' || s.username || ' ' ||
3 s.program line
4 from v$session s, v$process p
5 where p.addr = s.paddr
6 and s.username <> ' ';
ospid: 24561 # '12,29' oracle dbabd SYS sqlplus@dbabd (TNS V1-V3)
ospid: 9769 # '138,365' oracle dbabd SCOTT sqlplus@dbabd (TNS V1-V3)
ospid: 24668 # '18,9' oracle dbabd SYS sqlplus@dbabd (TNS V1-V3)
一般通过操作系统进程就可以确定跟踪会话,也可以通过Oracle pid来跟踪。通过以上脚本也可以获取到会话id(session id),这里以SCOTT用户为例,SCOTT用户的sid为138。
- 获取Oracle pid
-- 脚本
select p.PID, p.SPID, s.SID
from v$process p, v$session s
where s.paddr = p.addr
and s.sid = &SESSION_ID; -- 输入上述脚本得到的sid,如138
-- 输出
SYS@dbabd> select p.PID, p.SPID, s.SID
2 from v$process p, v$session s
3 where s.paddr = p.addr
4 and s.sid = &SESSION_ID;
Enter value for session_id: 138
old 4: and s.sid = &SESSION_ID
new 4: and s.sid = 138
25 9769 138
- 确定oradebug连接进程
SYS@dbabd> oradebug setospid 9769
Oracle pid: 25, Unix process pid: 9769, image: oracle@dbabd (TNS V1-V3)
或
SYS@dbabd> oradebug setorapid 25
Oracle pid: 25, Unix process pid: 9769, image: oracle@dbabd (TNS V1-V3)
- 配置trace文件的标识符
SYS@dbabd> oradebug settracefileid 10046_SCOTT_ORADEBUG;
Statement processed.
- 开启10046 event跟踪
SYS@dbabd> oradebug event 10046 trace name context forever, level 12;
Statement processed.
- SCOTT用户模拟执行语句
SCOTT@dbabd> select * from dept;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 关闭10046 event跟踪
SYS@dbabd> oradebug event 10046 trace name context off;
Statement processed.
- 关闭trace文件
SYS@dbabd> oradebug close_trace;
Statement processed.
- 查询当前trace文件路径
SYS@dbabd> oradebug tracefile_name;
/data/app/oracle/diag/rdbms/dbabd/dbabd/trace/dbabd_ora_9769_10046_SCOTT_ORADEBUG.trc
DBMS_SYSTEM包开启
通过DBMS_SYSTEM包也可以开启10046 event跟踪,主要是包中存储过程SET_EV来完成,查看存储过程所需的参数选项:
PROCEDURE SET_EV
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SI BINARY_INTEGER IN -- SID
SE BINARY_INTEGER IN -- SERIAL#
EV BINARY_INTEGER IN -- 事件代码,如10046
LE BINARY_INTEGER IN -- 事件级别,如12
NM VARCHAR2 IN
通过以上参数选项分析,采用DBMS_SYSTEM包的方式最少需要获取SID,获取SID可以参考oradebug当中的脚本,这里不再重复说明,为了方便查找trace文件,也可以事先配置trace文件的标识符,还是以SCOTT用户为例,trace文件标识符为10046_SCOTT_DBMSSYSTEM。
- 配置trace文件标识符
SYS@dbabd> oradebug setospid 9769
Statement processed.
SYS@dbabd> oradebug settracefileid 10046_SCOTT_DBMSSYSTEM;
Statement processed.
- 开启10046 event跟踪:
SYS@dbabd> exec dbms_system.set_ev(138,365,10046,12,'');
PL/SQL procedure successfully completed.
- 关闭10046 event跟踪:
SYS@dbabd> exec dbms_system.set_ev(138,365,10046,0,'');
PL/SQL procedure successfully completed.
或
SYS@dbabd> exec dbms_system.set_sql_trace_in_session(138,365,false);
PL/SQL procedure successfully completed.
DBMS_MONITOR包开启
DBMS_MONITOR包也可以开启10046 event跟踪,通地包中存储过程SESSION_TRACE_ENABLE来完成。从本文前面部分的说明也可以了解到,级别为12的10046 event跟踪就是包含绑定变量与等待事件信息。关于存储过程SESSION_TRACE_ENABLE选项说明可以参考另一篇博文:DBMS_MONITOR包跟踪,这里以SCOTT用户为例,trace文件标识符为10046_SCOTT_DBMSMONITOR。
- 配置trace文件标识符
SYS@dbabd> oradebug setospid 9769
Statement processed.
SYS@dbabd> oradebug settracefileid 10046_SCOTT_DBMSMONITOR;
Statement processed.
- 开启10046 event跟踪
SYS@dbabd> exec dbms_monitor.session_trace_enable(138,365,true,true,'all_executions');
PL/SQL procedure successfully completed.
- 关闭10046 event跟踪
SYS@dbabd> exec dbms_monitor.session_trace_disable(138,365);
PL/SQL procedure successfully completed.
DBMS_SUPPORT包开启
还有一个DBMS_SUPPORT包可以开启10046 event跟踪。不过这个包的说明在官方文档中没有找到,默认没有安装,可以通过查看Oracle MOS文档安装:How to Install the DBMS_SUPPORT Package (文档 ID 377204.1),关于包的说明也可以参考文档:The DBMS_SUPPORT Package (文档 ID 62294.1)。这里以SCOTT用户为例,trace文件标识符为10046_SCOTT_DBMSSUPPORT。
- 查看DBMS_SUPPORT包信息
SYS@dbabd> desc dbms_support;
ERROR:
ORA-04043: object dbms_support does not exist
默认没有安装,提示未找到。
- 安装DBMS_SUPPORT包
SYS@dbabd> @?/rdbms/admin/dbmssupp.sql
Package created.
Package body created.
SYS@dbabd> grant execute on dbms_support to schema_owner; -- 授权执行权限给需要用户,如SCOTT
SYS@dbabd> create public synonym dbms_support for dbms_support; -- 创建同名的同义词
Synonym created.
- 查看DBMS_SUPPORT包
SYS@dbabd> desc dbms_support;
FUNCTION MYSID RETURNS NUMBER -- 查询当前会话的SID
FUNCTION PACKAGE_VERSION RETURNS VARCHAR2 -- 查询包版本
PROCEDURE START_TRACE -- 开启当前会话跟踪
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
WAITS BOOLEAN IN DEFAULT
BINDS BOOLEAN IN DEFAULT
PROCEDURE START_TRACE_IN_SESSION -- 开启其他会话跟踪
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SID NUMBER IN -- 对应SID
SERIAL NUMBER IN -- 对应SERIAL#
WAITS BOOLEAN IN DEFAULT -- 对应是否加入等待事件跟踪
BINDS BOOLEAN IN DEFAULT -- 对应是否加入绑定变量跟踪
PROCEDURE STOP_TRACE -- 关闭当前会话跟踪
PROCEDURE STOP_TRACE_IN_SESSION -- 关闭其他会话跟踪
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SID NUMBER IN
SERIAL NUMBER IN
-- 查询当前会话的SID
SYS@dbabd> select dbms_support.mysid from dual;
MYSID
----------
12
-- 查询包版本
SYS@dbabd> select dbms_support.package_version from dual;
PACKAGE_VERSION
--------------------------------------------------------------------------------
DBMS_SUPPORT Version 1.0 (17-Aug-1998) - Requires Oracle 7.2 - 8.0.5
- 配置trace文件标识符
SYS@dbabd> oradebug setospid 9769
Statement processed.
SYS@dbabd> oradebug settracefileid 10046_SCOTT_DBMSSUPPORT;
Statement processed.
- 开启10046 event跟踪
SYS@dbabd> exec dbms_support.start_trace_in_session(138,365,true,true);
PL/SQL procedure successfully completed.
- 关闭10046 event跟踪
SYS@dbabd> exec dbms_support.stop_trace_in_session(138,365);
PL/SQL procedure successfully completed.
数据库级别开启
10046 event跟踪也可以在数据库级别开启,但通常很少会这样用,因为会导致所有会话都被跟踪而影响整体性能。当动态开启整个数据库的跟踪时,会对之后创建的每个会话进行跟踪,而已经存在的会话不会被跟踪。
数据库级别的10046 event跟踪通常用于当提前知道会话会出现性能问题,但却无法明确具体是哪个会话时。
当问题会话被定位以及跟踪之后,确认收集了相关的跟踪信息就可以将数据库级别的跟踪进行关闭,因为这会影响系统整体的性能。开启数据库级别跟踪的用户需要有sysdba的权限,动态开启可以使用以下方式:
- 语句开启10046 event跟踪
SYS@dbabd> alter system set events '10046 trace name context forever,level 12';
System altered.
- 语句关闭10046 event跟踪
alter system set events '10046 trace name context off';
System altered.
DBMS_MONITOR包也可以开启数据库级别的10046 event跟踪,主要由DATABASE_TRACE_DISABLE和DATABASE_TRACE_ENABLE存储过程来完成。关于这两个存储过程的参数选项说明如下:
PROCEDURE DATABASE_TRACE_ENABLE -- 开启
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
WAITS BOOLEAN IN DEFAULT -- 对应是否加入等待事件跟踪
BINDS BOOLEAN IN DEFAULT -- 对应是否加入绑定变量跟踪
INSTANCE_NAME VARCHAR2 IN DEFAULT -- 实例名,如dbabd
PLAN_STAT VARCHAR2 IN DEFAULT
PROCEDURE DATABASE_TRACE_DISABLE -- 关闭
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
INSTANCE_NAME VARCHAR2 IN DEFAULT -- 实例名,如dbabd
- DBMS_MONITOR包开启10046 event跟踪
SYS@dbabd> exec dbms_monitor.database_trace_enable(true,true,'dbabd','all_executions');
PL/SQL procedure successfully completed.
- DBMS_MONITOR包关闭10046 event跟踪
SYS@dbabd> exec dbms_monitor.database_trace_disable('dbabd');
PL/SQL procedure successfully completed.
总结
以上总结了主要的几种开启10046 event跟踪的方法,但还是有很多方面并未涉及,包括多会话跟踪、指定sql_id过滤跟踪等,这些跟踪涉及得更为细致,对于具体问题的分析更为有效,日后也会进行总结梳理。对于10046 event产生的trace文件,同样也可以通过tkprof工具进行格式化后增加可阅读性,关于tkprof工具的主要使用方式也可参考另一篇博文:Oracle 11g R2性能优化 tkprof
参考
How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues (文档 ID 376442.1)
The DBMS_SUPPORT Package (文档 ID 62294.1)
Oracle TKPROF & SQL_TRACE
https://antognini.ch/2012/08/event-10046-full-list-of-levels/
http://www.juliandyke.com/Diagnostics/Tools/ORADEBUG/ORADEBUG.php
https://www.cnblogs.com/youngerger/p/8541885.html
https://oracle-base.com/articles/misc/sql-trace-10046-trcsess-and-tkprof
☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆
Oracle 11g R2性能优化 10046 event的更多相关文章
- Oracle 11g R2性能优化 tkprof
另一篇博文总结了关于SQL TRACE工具的使用方式,但是产生的trace文件格式阅读起来并不是十分友好,为了更好的分析trace文件,Oracle也自带了一个格式化工具tkprof.tkprof工具 ...
- Oracle 11g R2性能优化 SQL TRACE
作为Oracle官方自带的一种基本性能诊断工具,SQL Trace可以用来评估当前正在运行的SQL语句的效率,同时为该语句生成统计信息等,并保存这些信息到指定路径下的跟踪文件(trace)当中.SQL ...
- 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1) 打开服务(cmd— ...
- 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)安装后的初步使用(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1) 打开服务(cm ...
- Oracle 11g r2 Enterprise Manager (EM) 中文页面调整为英文页面
Oracle 11g r2 Enterprise Manager (EM) 在中文语言环境下, 部分功能(如包含时间的查询数据库实例: orcl > 指导中心 > SQL 优化概要 ...
- RedHat 6.7 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机双实例HA
环境 软硬件环境 硬件环境: 浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台. 软件环境: 操作系统:Redhat Enterpris ...
- RedHat 6.7 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机HA
环境 软硬件环境 硬件环境: 浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台. 软件环境: 操作系统:Redhat Enterprise ...
- centos 安装oracle 11g r2(一)-----软件安装
centos 安装oracle 11g r2(一)-----软件安装 1.进入管理员权限 [anzerong@localhost ~]# su - root password [root@localh ...
- Oracle 11g R2在 win7 64位的安装流程图解【含常见问题解决方案】
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一.Oracle 11 ...
随机推荐
- ssh项目问题01,为创建数据库抛出的异常
框架什么都搭建好了,但是一直抛出如图问题,网上资料很多让你设置时间之类的,也设置了还是继续抛异常,最后带我的师傅说没有创建数据库,我都要郁闷死了,网上那么多,很多写的都不能解决问题,还乱写,浪费别人时 ...
- lxml.etree.HTML(text) 解析HTML文档
0.参考 http://lxml.de/tutorial.html#the-xml-function There is also a corresponding function HTML() for ...
- 使php支持pdo_mysql
1.下载pdo_mysql包 wget https://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2.追加编译php,使其module目录下生产pdo_mysql.so ...
- Linux系统(和mac系统)chmod修改权限总结
在 Mac 系统的终端上修改文件权限使用的是 Linux 中的 chmod 命令. chmod 用户+操作+权限+文件 用户部分:使用字母 u 表示文件拥有者(user),g 表示拥有者所在群组(gr ...
- mac上adb command not found
第一种报错(使用的自带mac命令行) bash: adb: command not found 1.vim ~/.bash_profile ,如果.bash_profile不存在,先touch ~/. ...
- bootstrap_栅格系统_响应式工具_源码分析
-----------------------------------------------------------------------------margin 为负 使盒子重叠 等高 等高 ...
- Go语言基础之map
Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...
- [LeetCode] Similar RGB Color 相似的红绿蓝颜色
In the following, every capital letter represents some hexadecimal digit from 0 to f. The red-green- ...
- 27 ArcMap加载天地图服务一片空白怎么办
在ArcMap中添加WMTS Server,连接上了,但是不显示 天地图升级向导:http://lbs.tianditu.gov.cn/authorization/authorization.html ...
- windows系统 phpstudy2018 配置阿里云https最简单的流程!
一.从阿里去下载ssl文件放到C:\phpStudy\PHPTutorial\Apache\conf\cert 二.首先phpstudy开户php_openssl扩展,具体如下图 一般网上的教程,都要 ...