微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL 慢查询SQL跟踪操作及解决方案

生产案例
随着数据量的增加数据库cpu占用爆炸,直接100%导致服务崩溃。
原因居然是一个简单的 update 语句。

监控到cpu爆炸

赶紧定位问题
简单流程如下:

  1. 定位问题库 > 读库 or 写库
  2. 查看连接数。cpu利用率到达100%,首先怀疑,是不是业务高峰活跃连接陡增,而数据库预留的资源不足造成的结果。我们需要查看下,问题发生时,活跃的连接数是否比平时多很多。
  3. 排除连接数激增与读写库挂掉的可能。所以只能是慢sql占用资源
  4. 定位是否频繁读写造成
select * from pg_stat_user_tables where n_live_tup > 100000 and seq_scan > 0 order by seq_tup_read desc limit 10;

有几张分区表被疯狂读

读取爆炸

6. 定位慢sql
https://www.jb51.net/article/204841.htm
保姆级教程,如何定位问题sql
7. 慢sql是一句update

update table set xxx = yyy where id = xxx
  1. 查看这句sql的执行计划

    在这里插入图片描述

  2. 原来这个语句在疯狂扫描全表表,那就是分表分区没有命中,他在做全表扫描

  3. 修改sql 用分区键直接指定要update 的表

update table set xxx = yyy where id = xxx and 分区1=xxx and 分区2 = xxx
  1. 效果
    before

    在这里插入图片描述

    after

    在这里插入图片描述

    监控

    在这里插入图片描述

    ps
    想知道分表分区怎么做的出门左转
    https://blog.csdn.net/weixin_45893488/article/details/104844933

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐