Oracle数据库服务器CPU占用率巨高的问题排查思路

1、通过TOP 命令查看PID:

bash 复制代码
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
 1560 oracle    20   0 38.978g 0.038t  16296 R 100.0 15.3   1069:13 python3 Main_Mem.py ProcessLog1 config.ini

2、通过spid 查找对应SQL:

sql 复制代码
-- 1、通过spid查找对应内存地址:
   SELECT addr FROM v$process c WHERE c.spid = 1560 ;

-- 2、通过内存地址寻址hash值:
   SELECT DECODE (sql_hash_value,
   0, prev_hash_value,
   sql_hash_value
   ),
   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
   FROM v$session b
   WHERE b.paddr = '00000004B08F4DC8';

-- 3、通过hash值找到对应sql_id:
   select a.sql_text,a.sql_id From v$sqltext a where a.hash_value='3838526855' and a.address='00000004DBAE9638' order by piece;

-- 4、通过sql_id查找详细的sql查询脚本:
   select SQL_TEXT,SQL_FULLTEXT,SQL_ID,LOADS,FIRST_LOAD_TIME,PLSQL_EXEC_TIME,JAVA_EXEC_TIME,ROWS_PROCESSED,COMMAND_TYPE,PARSING_USER_ID,PARSING_SCHEMA_ID,PARSING_SCHEMA_NAME,KEPT_VERSIONS,ADDRESS,SERVICE,MODULE,MODULE_HASH,ACTION,CPU_TIME,ELAPSED_TIME,OUTLINE_SID,CHILD_ADDRESS,SQLTYPE,REMOTE,OBJECT_STATUS,LITERAL_HASH_VALUE,LAST_LOAD_TIME,PROGRAM_ID,PROGRAM_LINE#,LAST_ACTIVE_TIME
    from  v$sql where sql_id='{sqlID}'

3、查找到的sql主要分为三类:

1、where条件缺少主键;

2、where条件缺少索引;

3、对应主表数据量太大。

相关推荐
闪电悠米9 小时前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
天疆说10 小时前
在 Ubuntu 24.04 上安装 MATLAB R2021b
数据库·ubuntu·matlab
码云数智-大飞10 小时前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git
yyuuuzz10 小时前
2026游戏云服务器推荐的技术判断思路
运维·服务器·开发语言·网络·人工智能·游戏·php
江华森10 小时前
Linux 运维新手入门课
linux·运维·服务器
Volunteer Technology10 小时前
Flink Table API与SQL(二)
大数据·数据库·flink
杨云龙UP10 小时前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析
正在走向自律10 小时前
KingbaseES MySQL模式深度解析,从语法兼容到迁移的全栈指南
数据库·数据库架构·kingbasees·电科金仓
叫我:松哥10 小时前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
阿维的博客日记10 小时前
Hippo4j 线程池监控接入方法
数据库·hippo4j