首先我们一般可以利用以下的语句来识别Oracle“低效执行”的SQL语句:
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT
FROM V$SQLAREA
WHERE EXECUTIONS>0
AND BUFFER_GETS >0
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8
ORDER BY 4 DESC;
还有一些实时监控ORACLE的语句可以参考Oracle数据库性能监控。
当然我们更需要使用TKPROF工具来查询SQL性能状态:
SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中. 这个跟踪文件提供了许多有用的信息。
例如:解析次数、执行次数、CPU使用时间等.
这些数据将可以用来优化你的系统.
设置SQL TRACE在会话级别: 有效
ALTER SESSION SET SQL_TRACE TRUE;
设置SQL TRACE 在整个数据库有效
SQL_TRACE=TRUE,
TIMED_STATISTICS=ON
USER_DUMP_DEST参数说明了生成跟踪文件的目录
用TKPROF工具解析阅读TRC文件,之后Jason会重点介绍下。
之后我们还需要用EXPLAIN PLAN 分析SQL语句。
EXPLAIN PLAN 是一个很好的分析SQL语句的工具
它甚至可以在不执行SQL的情况下分析语句
通过分析,我们就可以知道ORACLE是怎么样连接表Plan_table
@\RDBMS\ADMIN\utlxplan.sql
Explain Plan 的用法如下,
explain plan
[set statement_id = ‘text’]
[into [owner.]table_name]
for statement;
或者设置AUTOTRACE
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabledS
P2-0611: Error enabling STATISTICS report
SQL>@\SQLPLUS\admin\plustrace.sql
AUTOTRACE
SQL> SET AUTOTRACE ON
SQL> SET AUTOTRACE TRACEONLY
SQL> SELECT …..
Oracle提供了不少有用的工具,在利用tuning task,tuning set调优oracle中Jason也介绍了些,之后会提供TKPROF的用法