运维笔记--postgresql占用CPU问题定位

场景描述:

业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多。

处理方式:

查找出占用系统内存&CPU排名前10的进程:[或者用top命令查看]  ---这里需要注意,如果用了容器,需要进入容器内部查看相应的进程。

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

切换到postgres用户,执行psql,进入数据库终端:指定上述命令找到的系统进程号

SELECT procpid, START, now() - START AS lap, current_query  FROM (
SELECT backendid, pg_stat_get_backend_pid (S.backendid) AS procpid,
pg_stat_get_backend_activity_start (S.backendid) AS START,pg_stat_get_backend_activity (S.backendid) AS current_query
FROM (SELECT pg_stat_get_backend_idset () AS backendid) AS S) AS S
WHERE current_query <> '<IDLE>' and procpid=15874
ORDER BY lap DESC;

定位到SQL,确认该SQL完成的业务查询功能,查看执行计划,增加索引or 修改代码。

SELECT "******_edoc_queue".id
FROM "******_edoc_queue"
WHERE (("*******_edoc_queue"."edoc_id" = '521300000004TCS60515001FV-960157.pdf')
AND ("*****_edoc_queue"."active" = true))
ORDER BY "*****_edoc_queue"."id"

查询该条SQL的执行计划:(Postgresql使用explain analyze + sql语法的格式)

postgres=# \c ***你的实际模式schema
You are now connected to database "stbg" as user "postgres".
stbg=# explain analyze SELECT "cus_center_new_edoc_queue".id FROM "cus_center_new_edoc_queue" WHERE (("cus_center_new_edoc_queue"."edoc_id" = '521300000008TCS60417066FV-960101.pdf') AND ("cus_center_new_edoc_queue"."active" = true)) ORDER BY "cus_center_new_edoc_queue"."id"; ---得到如下执行计划:
stbg= BY "cus_center_new_edoc_queue"."id";ter_new_edoc_queue"."active" = true)) ORDER QUERY PLAN -----------------------------------------------------------------------------
Sort (cost=21044.85..21044.85 rows=1 width=4) (actual time=109.905..109.905 ro
ws=0 loops=1)
Sort Key: id
Sort Method: quicksort Memory: 25kB
-> Seq Scan on cus_center_new_edoc_queue (cost=0.00..21044.84 rows=1 width=4) (actual time=109.880..109.880 rows=0 loops=1)
Filter: (active AND ((edoc_id)::text = '521300000008TCS60417066FV-960101.pdf'::text))
Rows Removed by Filter: 583348
Planning time: 0.468 ms
Execution time: 109.952 ms
(8 rows) ----可以看出执行查询时间:109.952 ms

最新文章

  1. runtime的黑魔法
  2. 【JDK】电脑上安装多个JDK ,修改JAVA_HOME后没有作用
  3. 17.把字符串转换成整数[atoi]
  4. 冒泡排序:一百以内十个随机数放入数组排序并打印&lt;
  5. jquery之event与originalEvent的关系、event事件对象用法浅析
  6. # 20145210 《Java程序设计》第04周学习总结
  7. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
  8. No application &#39;meetme&#39; for extension 错误
  9. 如何处理JS与smarty标签的冲突
  10. Linux01--文件管理,常用命令 权限管理
  11. perl post 带上请求头
  12. poj3207(two-sat)
  13. servlet入门学习之API
  14. 如何在自定义组件中使用v-model
  15. 输入流IS和输出流OS学习总结
  16. Java:并发不易,先学会用
  17. 如何在Eclipse中创建web项目并使用tomcat8 运行servlet开发简单的动态网页?
  18. Git branch &amp;&amp; Git checkout常见用法
  19. 4-16 css
  20. LVS-Keepalived高可用集群(NAT)

热门文章

  1. 构建nodejs环境
  2. H3C 802.11网络的基本元素
  3. 【转载】利用tasker推送手机短信到企业微信(App或者微信公众号)
  4. X2E车载数据记录仪
  5. [AI] 论文笔记 - U-Net 简单而又接近本质的分割网络
  6. PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单
  7. Mysql【第二课】
  8. 移动架构师第一站UML建模
  9. datebox设置默认时间
  10. Alpha冲刺(10/10)——追光的人