数据库负载高故障排查处理:
问题描述:查看数据库负载高达20左右,大量进程占用cpu较高
问题分析:多个单进程占用cpu较高,一般为索引失效,sql复杂查询数据量大或存在锁行,锁表等
,分析数据库dwr报告:
发现大量的行级锁,已经锁等待占用cpu较高,查询数据库锁:select t2.username,t2.sid,t2.serial#,t2.logon_time,event
from v$locked_object t1,v$session t2
where
t1.se
ssion_id=t2.sid order by t2.logon_time desc
发现大量的行级锁
查询锁的进程对应的SQL语句为:
select /*+ ORDERED*/
sql_text
from v$sqltext a
where (a.hash_value, a.address) in
(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.sid='897')
查出结果为:
数据库某块逻辑存在大量行级锁
行级锁导致原因大致分为以下几种:
1、不同的session同时更新或删除同一个记录
2、表上存在主键或唯一索引,会话1插入一个值(未提交),会话2同时或随后也插入同样的值
3、更新位图索引的一个键值,会指向多行记录,所以更新一行就会把该键值指向的所有行锁定
经排查为第一种情况导致,深入分析为恒通宜信网关多条数据返回同一
个sendid,大并发情况下,更新同一行记录,导致行级锁引发的数据库负载剧增
问题处理:
避免多线程同时操作同一行记录即可
相关文章
- Oracle数据库中convert()函数,在瀚高数据库中如何替换使用?
- 50亿海量数据如何高效存储和分析? 华为云数据库GaussDB (for Cassandra) 3个秘诀搞定
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战
- Apache Doris,一款优秀的高效分析型数据库
- Oracle数据库 | 基于SQL基础分析
- Oracle和MySQL的高可用方案对比分析
- 实例分析ORACLE数据库性能优化
- MySql读写分离,及数据库高可用负载均衡的实现
- 高分求救,oracle客户端如何远程(即不在同一局域网)访问oracle数据库服务器啊
- Oracle数据库基础4-高级查询