如何定位占用oracle数据库cpu过高的sql?

如何定位占用oracle数据库cpu过高的sql?,第1张

ORACLE查询当前执行效率低的sql\x0d\x0a--CPU高的SQL\x0d\x0aselect sql_text from v$sql order by cpu_time desc\x0d\x0a--逻辑读多的SQL:\x0d\x0aselect * from (select buffer_gets, sql_text\x0d\x0afrom v$sqlarea\x0d\x0awhere buffer_gets >500000\x0d\x0aorder by buffer_gets desc) where rownum 回答于 2022-11-16

topas/top 看下是不是oracle进程占用的cpu。

然后查看下oracle数据库中都在跑哪些语句

多数都是效率较差的sql语句导致cpu使用率过高的,一般通过优化sql即可解决。

可用如下语句查看哪些执行时间较长的sql:

Select b.USERNAME,

b.SID,

a.SQL_ID,

a.SQL_TEXT,

a.sql_fulltext,

b.EVENT,

a.executions,

-- trunc(((decode(a.EXECUTIONS,0,0,a.cpu_time / a.executions)) / 10000)) c_time, ---单位零点秒

trunc(((decode(a.EXECUTIONS,0,0,a.ELAPSED_TIME / a.executions)) / 10000)) e_time,

--trunc(cpu_time/10000) cpu_time,

trunc(a.ELAPSED_TIME/10000) ELAPSED_TIME ,

a.DISK_READS,

a.BUFFER_GETS,

b.MACHINE,

b.PROGRAM

From v$sqlarea a, v$session b

Where executions >=0

And b.status = 'ACTIVE'

and a.SQL_ID = b.SQL_ID

-- and b.USERNAME='DB_WTDZ'

-- and trunc(((a.cpu_time / a.executions) / 1000000))>5

Order By e_time desc


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10825505.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存