问题描述 公司项目测试环境调用某些接口的时候,服务器立即崩溃,并一定时间内无法提供服务。 问题排查 服务器配置不够 第一反应是服务器需要升配啦,花钱解决一切!毕竟测试服务器配置确实不高,2CPU + 4Gib,能干啥?不过问题是今
公司项目测试环境调用某些接口的时候,服务器立即崩溃,并一定时间内无法提供服务。
第一反应是服务器需要升配啦,花钱解决一切!毕竟测试服务器配置确实不高,2CPU + 4Gib,能干啥?不过问题是今天突然发生的,而且说崩就崩。凭着严谨的态度,还是要刨根问底地找下问题。
free -m
内存占用并不大,忘记截图了,反正看下来不是内存过高导致的崩溃
top
业务高峰活跃连接陡增,活跃的连接数是否比平时多很多
SELECT
COUNT(*)
FROM
pg_stat_activity
WHERE
STATE NOT LIKE '%idle';
查询下来只有3个连接,所以不是连接数导致的CPU过高
如果活跃连接数的变化处于正常范围,则可能是当时有性能很差的SQL被大量执行。
select
datname,
usename,
client_addr,
application_name,
state,
backend_start,
xact_start,
xact_stay,
query_start,
query_stay,
replace(
query,
chr(10),
' '
) as query
from
(
select
pgsa.datname as datname,
pgsa.usename as usename,
pgsa.client_addr client_addr,
pgsa.application_name as application_name,
pgsa.state as state,
pgsa.backend_start as backend_start,
pgsa.xact_start as xact_start,
extract(
epoch
from
(now() - pgsa.xact_start)
) as xact_stay,
pgsa.query_start as query_start,
extract(
epoch
from
(now() - pgsa.query_start)
) as query_stay,
pgsa.query as query
from
pg_stat_activity as pgsa
where
pgsa.state != 'idle'
and pgsa.state != 'idle in transaction'
and pgsa.state != 'idle in transaction (aborted)'
) idleconnections
order by
query_stay desc
limit
5;
可以看到,确实有一条慢SQL,而且属于奇慢无比,执行了接近1分钟还没执行完毕,基本可以定位,是慢SQL导致的CPU占用陡增。
对于上面的方法查出来的慢SQL,首先需要做的是Kill掉他们,使业务先恢复。
select pg_cancel_backend(pid) from pg_stat_activity where query like '%%' and pid != pg_backend_pid();
select pg_terminate_backend(pid) from pg_stat_activity where query like '%%' and pid != pg_backend_pid();
如果这些SQL确实是业务上必需的,则需要对他们做如下优化:
ANALYZE 或VACUUM ANZLYZE ,更新表的统计信息,使查询计划更准确。为避免对业务影响,最好在业务低峰执行。
- 执行
explain
或explain (buffers true, analyze true, verbose true)
命令,查看SQL的执行计划(前者不会实际执行SQL,后者会实际执行而且能得到详细的执行信息),对其中的Table Scan涉及的表,建立索引。
- 重新编写SQL,去除掉不必要的子查询、改写UNION ALL、使用JOIN CLAUSE固定连接顺序等,都是进一步深度优化SQL的手段,这里不再深入说明。
总结
在查询语句中,尽量减少不必要的子查询,公司使用的ORM框架是spring JPA,针对一些特别慢的HQL,可以采用直接执行SQL的方式来优化查询效率。
@Query(value = "select count(*) from example_table where example_id = :exampleId", nativeQuery = true)
int exampleNativeQuery(@Param("exampleId") Long exampleId);
参考
postgresql/PPAS CPU使用率高的原因及解决办法
--结束END--
本文标题: 记一次Postgres CPU爆满故障
本文链接: https://www.lsjlt.com/news/4210.html(转载时请注明来源链接)
有问题或投稿请发送至:
邮箱/279061341@qq.com QQ/279061341
本篇文章演示代码以及资料文档资料下载
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
-
记一次Postgres CPU爆满故障
问题描述
公司项目测试环境调用某些接口的时候,服务器立即崩溃,并一定时间内无法提供服务。
问题排查
服务器配置不够
第一反应是服务器需要升配啦,花钱解决一切!毕竟测试服务器配置确实不高,2CPU + 4Gib,能干啥?不过问题是今...
- 99+
- 2020-03-22
-
记一次Postgres
CPU爆满故障
-
记一次磁盘空间爆满导致的持久化报错
环境:3.0.7 redis八节点集群4主4从 开发测试环境操作:清除集群持久化数据 #redis-cli -c -p 6383 -h 172.31.103.238 登陆之后cluster nod...
- 99+
- 2022-10-18
-
-
记一次线程爆满导致服务器崩溃的问题排查及解决
目录问题介绍1. 重启服务器2. 修改最大线程数3. 查找线程最大的java程序4. 导出问题程序的线程日志5. 找到问题代码6. 解决方案问题介绍
测试服务器突然无法连接,ssh登...
-
记一次由mysql触发器引发的故障
上周六到公司上班,刚坐下没多久,公司业务传过消息说,用户borrow表信息无法更新。查看网站报错如下:报错信息表示是由于mysql的函数和触发器引起的,问了下公司开发,他们表示函数功能已经测试上线好久了,没...
- 99+
- 2022-10-18
-
-
一次Mysql update sql不当引起的生产故障记录
目录故障表现业务背景解决方案总结故障表现
一方面 :在阿里云控制台云数据库PolarDB对应的集群管理页面上,在诊断与优化模块里面的一键诊断会话管理中,发现某条update sql ...
- 99+
- 2022-11-13
-
-
HP-UX上一次Oracle软件安装目录磁盘空间满导致的故障
接到电话,告知公司负责的某维保客户数据库出现了故障
客户反馈,应用端出现了磁盘读写错误:
同时,登录数据库时也出现了错误:
同时,用户反馈说部分业务已经中断
登录操作系统, 通过查询gv$insta...
- 99+
- 2022-10-18
-
-
记一次存储故障导致数据库坏块处理过程
记一次存储故障导致数据库坏块处理过程线上架构说明: IBM DS4800存储一套
P560小机HA架构...
- 99+
- 2022-10-18
-
软考职称历年真题下载
-
2023下半年-信息系统项目管理师-真题考点汇总(完整版)
164.2 KB
查看
-
2023年下半年信息系统项目管理师第一、二批次各科目真题考点整理(考友回忆版)
143.67 KB
查看
-
2023上半年软考高级《信息系统项目管理师》真题答案(抢先版)
500.26 KB
查看
-
2022年下半年软考高级职称考试考情分析
823.36 KB
查看
-
2022年下半年软考高级职称考试真题
569.84 KB
查看
软考职称资料下载
-
2023下半年-系统集成项目管理工程师-真题考点汇总(完整版)
143.91 KB
查看
-
2023年下半年系统集成项目管理工程师第一、二、三批次真题考点整理(考友回忆版)
183.71 KB
查看
-
2023年上半年软考中级《系统集成项目管理工程师》-基础知识-考试真题及答案
644.84 KB
查看
-
2023年上半年软考中级《系统集成项目管理工程师》-应用技术-考试真题及答案
314.7 KB
查看
-
2023年下半年第一二批次系统集成项目管理工程师《案例分析》真题考点
115.57 KB
查看
热门wiki
近期文章
推荐阅读
-
mysql中groupby是什么意思
2024-04-26
-
mysql中having是什么意思
2024-04-26
-
mysql中groupby和having的关系
2024-04-26
-
mysql中and的用法
2024-04-26
-
mysql中having的作用
2024-04-26
-
mysql中gbk什么意思
2024-04-26
-
navicat怎么连接云数据库
2024-04-24
-
navicat表与表之间怎么用视图连接起来
2024-04-24
-
navicat数据库主键怎么设置
2024-04-24
-
navicat怎么回退数据库操作
2024-04-24
热门问答
-
1
回答
如何调试操作系统的错误?
操作系统
2023-11-15发布
-
1
回答
2023-11-15发布
-
1
回答
如何实现操作系统的内存管理?
操作系统
2023-11-15发布
-
1
回答
2023-11-15发布
-
1
回答
2023-11-15发布
-
1
回答
ASP中的数据验证和数据校验有什么不同?
ASP.NET
2023-11-15发布
-
1
回答
ASP中的ADO对象和DAO对象有什么区别和使用方法?
ASP.NET
2023-11-15发布
-
1
回答
2023-11-15发布
-
1
回答
2023-11-15发布
-
1
回答
2023-11-15发布
0