性能测试 数据库优化调试之oracle10046事件跟踪
最近在测试一个项目的过程中,发现当数据量达到百万条级别的时候,ORACLE数据库CPU达到100%,并且长时间的CPU100%导致Linux OS 保护性自动重启。就冲CPU100%,很明显的肯定是劣质的SQL语句执行造成的,那么如何入手解决SQL语句的问题呢?使用oracle 10046事件跟踪是个不错的选择。
下面就拿此次Linux环境下的ORACLE性能优化调试为例子:
* 首先,在Linux上,找到ORACLE正在执行的PID。方法是top命令或者ps命令,找到活动比较频繁,CPU占用高,内存也占用比较高的PID。比如PID=2166
* 接着,打开sqlplus,需要使用sysdba角色用户登录。
SQL> select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr = b.addr
SPID SID SERIAL#
----------------------------------------------------------------
2166 152 213
2286 159 223
2316 156 203
.....
从结果集中找到SPID=2166 这行数据
* 启动10046 跟踪
SQL>execute sys.dbms_system.set_ev(152,213,10046,1,'');
procedure successfully completed.
--set_ev函数中的第4个参数1代表开启跟踪。
* 对被测试的系统进行操作比如CRUD等。如果手头有自动化测试工具,可以适当的给系统加加压。
* 关闭10046事件跟踪
SQL>execute sys.dbms_system.set_ev(152,213,10046,0,'');
procedure successfully completed.
--set_ev函数中的第4个参数0代表关闭跟踪。
* 获取trc文件,一般是oracle的在udump目录下,trc文件名为ora_SPID名称.trc(如ora_2166.trc)
* 执行oracle的tkprof命令,将ora_2166.trc转化为文本文件。
tkprof ora_2166.trc ora_2166.sql
* 打开trc ora_2166.sql文件可以看到sql执行语句以及sql执行占用CPU的时间、执行计划等。
* 最后找出占用CPU比较高的 sql语句,进行优化(表结构优化、sql语句优化等)。
性能测试 数据库优化调试之oracle10046事件跟踪
最新推荐文章于 2024-06-03 21:21:38 发布
本文介绍了一种通过Oracle 10046事件跟踪来优化数据库性能的方法。具体步骤包括定位高负载进程、启用跟踪、执行操作、禁用跟踪及分析追踪文件。此法有助于找出并优化消耗大量CPU资源的SQL语句。
539

被折叠的 条评论
为什么被折叠?



