各位,我可以通过awrrpt找到占用cpu最多的sql语句,但是我如何通过sql id、sql module等确定这条语句的绝对路径呢,也就是说我可以找到其在数据库中的位置进行相应修改,谢谢。

解决方案 »

  1.   

    直接点SQL Statistics,不就有一个按  % Total DB Time 降序排的sql吗?
    前面是id, 后面有sql text的截断部分, 直接点sql id就点位过去了,不需要自己整sql啊
      

  2.   

    "数据库中的位置" 是指在某个scheme下吗?
      

  3.   

    直接点sql id就点位过去了,这个时候只有sql id 和 text 我想知道这个语句在那个scheme下?我可以找到并且修改,谢谢啦。
      

  4.   

    这个在awr rpt下面找不到,但是你的方法有效吗?比如说,一个语句,
    select * from scott.emp;这个语句代价很高,那么它在用户A下面和用户B下面执行有什么区别呢?
    优化只能针对scott的emp表吧?
      

  5.   


    呵呵,先谢谢你的回答,你说的很对。
    我只是原来在sql server中遇见过这样的代码,是存储过程中的select语句,
    select column_name,(select column_name from table_name) from table_name...。
    当是的情况是一启动服务,客户只要存储数据就特慢,sql server占用cpu 100%,
    我后来追踪原因是这个select语句的问题,原因是里面的select语句返回多行,外面的只是返回一行,我将语句改成
    select column_name,(select top 1 column_name from table_name) from table_name...。 就好了。
    所以才有今日一问,再次感谢你的关注了。
    PS:那个语句有可能是客户改的,但是你问最近有没有人改哪,他们是不会说的。
      

  6.   

    我觉得你这样找好象方法不对?
    不论这个sql在哪里运行,只需要知道这个sql语句是哪个用户执行就可以了
    用户可以访问哪些表,可能通过权限限制