oracle的Toad挂起了这个查询:从V $ sqltext_with_newlines中选择sql_text,其中address =(选择DECODE)

时间:2011-07-13 21:47:06

标签: oracle toad

它的用途是什么?

select sql_text
from V$sqltext_with_newlines where
address = (select DECODE(RAWTOHEX(sql_address), '00', prev_sql_addr, sql_address
)
 from   V$session
 where username = :uname
 and sid = :snum)
ORDER BY piece

我只知道它是由toad生成的,并且挂起了一个非常强大的生产环境

一些表会议显示了这一点:

COUNT(0) EVENT
---------- ----------------------------------------------------------------
         1 smon timer
         1 db file parallel read
         1 pmon timer
         1 read by other session
         1 SQL*Net message to client
         1 PL/SQL lock timer
         2 SQL*Net break/reset to client
         2 PX Deq Credit: send blkd
         7 db file scattered read
         8 db file sequential read
        12 jobq slave wait
        14 PX Deq: Execution Msg
        30 rdbms ipc message
       333 SQL*Net message from client
       450 latch: library cache

1 个答案:

答案 0 :(得分:2)

这似乎是一个非常简单的查询,如果它真的导致问题,我会感到惊讶。数据字典视图通常使用数十个表,但此查询的执行计划在我的系统上只有9个步骤,查询运行得非常快。即使优化器完全错误地计划,所涉及的表也不是很大,所以事情不应该太慢。

查询真的在做什么,或者只是坐在那里等待某人检索更多行?尝试使用这样的东西来找出它消耗的资源。运行它几次,如果数字不增加查询不是问题:

select elapsed_time/1000000 elapsed_seconds, cpu_time/1000000 cpu_seconds
    ,user_io_wait_time/1000000 user_io_wait_seconds, buffer_gets
    ,executions, v$sql.*
from v$sql
where lower(sql_text) like lower('%DECODE(RAWTOHEX(sql_address)%');

您的查询似乎检索当前正在运行的语句,尽管我不确定TOAD使用它的确切内容。也许它是会话浏览器的一部分? TOAD和所有类似的查询工具在后台运行许多这样的查询。我从未见过他们打倒服务器。虽然使用TOAD很可能会出现一些错误导致UI冻结并使其在查询中看起来非常困难。