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、对应主表数据量太大。

相关推荐
阿义有问题1 小时前
MySQL 迁移达梦全流程实战:DTS 七步图解 + 对象名全大写适配(附踩坑清单)
数据库
猫猫不是喵喵.3 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
曲径海盗4 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
真好啊又活了一天4 小时前
服务器和虚机配置IPV6
运维·服务器·github
lsc_blog4 小时前
听到优化风声,先准备能由自己掌控的事
数据库·分布式·中间件·职场和发展·重构
墨痕诉清风5 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
布莱克6055 小时前
Swift 常量详解:从 let 到编译期优化
服务器·开发语言·ssh·swift·常量·let
测试界的小码农7 小时前
【Linux 命令实战(04):文件内容查看,掌握 cat、less、head、tail】
linux·服务器·less
Ashe8137 小时前
MySQL 慢日志先别急着加索引:三个指标能拦掉大半误判
数据库
每月一号准时摆烂8 小时前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记