1)遇到这样的问题,第一反应就是查看当前数据库中活跃的sql session都有哪些?可以通过如下语句进行查找:
select * from pg_stat_activity where state = 'active';
复制
查找到这些结果之后,做一个简单的归纳总结,比如哪些SQL的比例占大数。通过查找发现,活跃的SQL session并不是很多,只是绝大数和系统的一个主表有关联。
2) 发现相关的SQL,分别是简单的select,delete:
select * from table_name where xx_id = 'xxx';
delete from table_name where xx_id = 'xxx';
复制
这种SQL从结构上看,真的是非常简单,不应该出现很长时间不返回结果的情况。是不是数据库CPU在此时比较忙碌?
3)检查数据库资源消耗情况,发现数据库资源情况很好,CPU使用率只有20%左右,那么🔙第2步,继续进行问题排查。
4)仔细发现"xx_id" 这个字段没有添加index,并且此表由于是业务的主表,数据量很大,所以查找会全表扫描。其实delete语句也是一样,如果是加where子句的delete或者update,子句中的筛查字段如果加index效率还是比不加index要好。
5)通过SQL的执行计划也可以印证这一点。select 语句比较慢,CPU是在等待磁盘io的结果返回,所以数据库磁盘统计数据(读操作也是比较频繁的)。
6)通过讨论,解决方案就是在xx_id上添加索引,并且添加必要的filter条件,特别是主表主键相关。
结合以上基本就解决了这个问题。
文章转载自TimTest,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
王炸!OGG 23ai 终于支持从PostgreSQL备库抽取数据了
曹海峰
414次阅读
2025-03-09 12:54:06
玩一玩系列——玩玩login_hook(一款即将停止维护的PostgreSQL登录插件)
小满未满、
380次阅读
2025-03-08 18:19:28
明明想执行的SQL是DELETE、UPDATE,但为什么看到的是SELECT(FDW的实现原理解析)
小满未满、
361次阅读
2025-03-19 23:11:26
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
314次阅读
2025-03-20 09:50:36
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
204次阅读
2025-03-20 15:31:04
套壳论
梧桐
201次阅读
2025-03-09 10:58:17
命名不规范,事后泪两行
xiongcc
188次阅读
2025-03-13 14:26:08
PG vs MySQL 执行计划解读的异同点
进击的CJR
128次阅读
2025-03-21 10:50:08
版本发布| IvorySQL 4.4 发布
IvorySQL开源数据库社区
120次阅读
2025-03-13 09:52:33
宝藏PEV,助力你成为SQL优化高手
xiongcc
116次阅读
2025-03-09 23:34:23