【定位oracle非常消耗cpu性能的sql,与临时解决办法】
·
排查核心步骤
“定位进程->查询oracle进程地址->查询oracle进程会话->查询oracle会话sql”
- 使用top命令定位服务器中cpu使用率超高的进程获取进程id

- 在oracle数据库中根据进程id,查询oracle进程信息,获取进程信息中的addr

- 在oracle中根据进程地址获取,进程对应的会话信息,获取会话信息中的sql_id

- 根据会话信息中的sql_id获取sql信息

排查sql
--替换你的进程id
select * from v$process where spid='180487';
--替换你的paddr
select sid,serial#,paddr,saddr,username,sql_id from v$session where paddr='00000009C1138758';
--替换你的sql_id
select * from v$sql where sql_id='7utq781km6h4t';
解决思路
解决思路分两步:
- 在数据库因慢sql受影响时,首先查询出满sql的会话,然后杀掉会话(杀会话时需要注意会话中的sql,会不会影响业务,比如sql是更新、插入)
--查会话
select sid,serial#,paddr,saddr,username,sql_id from v$session where paddr='00000009C1138758';
--杀会话
ALTER SYSTEM KILL SESSION '<sid>, <serial#>'
- 分析慢sql,对慢sql进行优化(这里就是一个系统性的工程,不在这里赘述了)
更多推荐
所有评论(0)