大家好,项目上线后,日常情况下每天大约有8万德业务量,这时候oracle数据库主机的cpu大约为30%左右,但是当有批量业务的时候,比如一小时有20万的业务量的时候,数据库主机的cpu就达到99%左右了,表里面都建索引了,回进行很多insert、update、select操作,现在小弟想通过一个sql语句查询出查询出到底是程序中哪个sql语句消耗的cpu过多同时请各位高手帮忙分析下数据库本身的哪些参数设置会对cpu的使用率影响较大? 小弟在此谢过!!
ps: 请给出sql语句的同时顺便写下注释,sql语句尽量写简单点,同时写下执行sql语句的用户需要的权限

解决方案 »

  1.   

    数据库中的V$SQL动态表应该可以帮你找到哪个sql语句消耗的cpu多
      

  2.   

    select * from v$sqlarea order by cpu_time desc
    select * from v$sql order by cpu_time desc
    应该都行吧
      

  3.   


    列出使用频率最高的5个查询:
    select sql_text,executions
    from (select sql_text,executions,
       rank() over
        (order by executions desc) exec_rank
       from v$sql)
    where exec_rank <=5;消耗磁盘读取最多的sql top5:
    select disk_reads,sql_text
    from (select sql_text,disk_reads,
       dense_rank() over
         (order by disk_reads desc) disk_reads_rank
       from v$sql)
    where disk_reads_rank <=5;找出需要大量缓冲读取(逻辑读)操作的查询:
    select buffer_gets,sql_text
    from (select sql_text,buffer_gets,
       dense_rank() over
         (order by buffer_gets desc) buffer_gets_rank
       from v$sql)
    where buffer_gets_rank<=5;我估计业务量的突然增加导致IO的增加是造成CPU利用率升高的主因,楼主用上面的语句分析下哈。
      

  4.   


    多谢您。 业务量的突然增加导致IO的增加是造成CPU利用率升高的主因,您的意思是磁盘io导致的?oracle数据库的参数对io有影响吗?
      

  5.   

    select * from v$sqlarea order by cpu_time desc 
    select * from v$sql order by cpu_time desc 
      

  6.   

    做一个statspack吧,这样可以更全面的了解系统瓶颈在那儿