在Oracle中使用oracle视图加载SQL?
我在寻找一个查询,它将返回一个高负载的sql语句列表。 我不想使用任何Oracle工具,如ADDM或AWR。 我需要一个查询语句,它将返回高负载的sql语句。
您可以直接查询AWR表,这可能是最简单的方法。
或者,我曾经在Oracle 8i上使用的一项简单技术(未启用统计信息)就是从v $ sql中选择具有最高缓冲区获取执行率的SQL。 您可以使用此查询来仅搜索高执行计数查询,或者执行高物理IO等的查询。
AWR和ASH表格将提供更好的信息,但这可能是一个简单的第一步:
select a.sql_id, a.ratio, a.executions
from
(
select sql_id, buffer_gets / executions ratio, executions
from v$sql
where executions > 10
order by 2 desc
) a
where rownum <= 10
要快速查找是否有长时间运行的进程占用了您的资源,请查看v $ sesson_long_ops:
SELECT * FROM v$session_longops
请参阅:http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm
我建议你也看看这个:http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm
然后你可以通过sid找到正在运行的sql:
SELECT sql_text FROM v$session s
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE sid=&sid
如果你正在运行unix你也可以看一下top
命令( top10
或者topas
在不同的unix版本),然后你可以使用最耗费CPU的查询的进程id,然后使用以下命令来获得有问题的sql。
SELECT
s.username,
sa.sql_text
FROM v$process p
INNER JOIN v$session s ON p.addr=s.paddr
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE s.username IS NOT NULL AND p.spid=&SPID
链接地址: http://www.djcxy.com/p/56473.html