性能测试 数据库优化调试之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-01-29 17:02:30 发布