在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

上一篇: load SQL in Oracle, using oracle views?

下一篇: Intentionally corrupt the file system