1、 找出问题 SQL
1.1、查询 v$sql_area
查询 v$sql_area 表可以获取可能存在性能问题的 sql,其中字段 DISK_READS 是物理读的数量,EXECUTIONS 是时
间范围内的执行次数, DISK_READS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS)即单位次数内的物理读 ,
module 表示连接类型(如 jdbc、pl/sql developer 等)。
具体语句如下:
SELECT B.USERNAME USERNAME,
A.DISK_READS DISKREADS,
A.EXECUTIONS EXECUTIONS,
A.DISK_READS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)
DISK_READS_EXECUTIONS_RATIO,
A.MODULE CONNECT_TYPE,
A.SQL_ID,
A.SQL_TEXT
FROM V$SQLAREA A, DBA_USERS B
WHERE A.PARSING_USER_ID = B.USER_ID
AND b.USERNAME = 'OWMELOSWM'
AND A.MODULE = 'JDBC Thin Client'
ORDER BY DISK_READS_EXECUTIONS_RATIO DESC;
可以根据上面语句得到的 sql_id 查询具体的 sql 文本。
具体语句如下:
SELECT a.sql_id,a.sql_text,a.command_type FROM dba_hist_sqltext a WHERE a.sql_id =
'dau294sd51uv4';
1.2、查询 v$sql
这个视图类似于视图 v$sqlarea,用于查找性能有问题的 SQL,具体语句如下:
SELECT *
FROM (SELECT b.username,
sql_text,
address,
MODULE,
rank() over(ORDERBY buffer_gets DESC) AS rank_bufgets,
to_char(100 * ratio_to_report(buffer_gets) over(), '999.99')
pct_bufgets
FROM v$sql a, dba_users b
WHERE a.PARSING_USER_ID = b.user_id
ANDMODULE = 'JDBC Thin Client')