定位oracle非常消耗cpu性能的sql

排查核心步骤

“定位进程->查询oracle进程地址->查询oracle进程会话->查询oracle会话sql”

  1. 使用top命令定位服务器中cpu使用率超高的进程获取进程id
    在这里插入图片描述
  2. 在oracle数据库中根据进程id,查询oracle进程信息,获取进程信息中的addr
    在这里插入图片描述
  3. 在oracle中根据进程地址获取,进程对应的会话信息,获取会话信息中的sql_id
    在这里插入图片描述
  4. 根据会话信息中的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';

解决思路

解决思路分两步:

  1. 在数据库因慢sql受影响时,首先查询出满sql的会话,然后杀掉会话(杀会话时需要注意会话中的sql,会不会影响业务,比如sql是更新、插入)
--查会话
select sid,serial#,paddr,saddr,username,sql_id from v$session where paddr='00000009C1138758';
--杀会话
ALTER SYSTEM KILL SESSION '<sid>, <serial#>'
  1. 分析慢sql,对慢sql进行优化(这里就是一个系统性的工程,不在这里赘述了)
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐