• pg_blocking pg_monitor (转) postgresql表死锁问题的排查方式 阻塞分析 慢SQL


    -1.  pg_blocking # 找出精确时间段阻塞的SQL## 在navicat执行,复制结果,第一个就是最开始出现阻塞的SQL

    select  * from pg_blocking  where d_time >'2022-01-26 07:50:02+08'  and d_time < '2022-01-26 07:53:02+08' ;    
    select --*
    pg_terminate_backend(pid)
    From pg_stat_activity where query_start<=now()- interval'10 sec' and state not in ('idle') 
    and pid<>pg_backend_pid() and query ilike 'select%'
    order by query_start
    ;

    0. pg_monitor # 查出这段时间超过10秒的SQL

    ---- 查出这段时间超过10秒的SQL
    SELECT ts, datname, usename, query, COUNT (
    *) FROM pg_monitor WHERE ts >= '2022-01-26 07:50:00' AND ts <= '2022-01-26 07:53:00' AND query NOT LIKE '%autovacuum%' GROUP BY datname, usename, query, ts ORDER BY COUNT (*) DESC;

    ----查询top 耗时
    SELECT
            *, mean / 1000 AS "单次平均时间(秒)"
    FROM
            pg_top_day
    WHERE
            ts >= '2021-06-09 08:00:00'
    AND ts <= '2021-06-09 22:00:00'
    ORDER BY
            percent DESC;

    1.查询激活的执行中的sql,查看有哪些更新update的sql。

    
    
    例如查询执行时间超过1秒的SQL  
    
    select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ; 
    
    postgres=# select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start;



    select *from pg_stat_activity where pid<>pg_backend_pid() and state not in ('idle');

    select
    * from pg_stat_activity where state = 'active';

    2. 查询表中存在的锁

    select a.locktype, a.database, a.pid, a.mode, a.relation, b.relname
    from pg_locks a
    join pg_class b on a.relation = b.oid
    where lower(b.relname) = 'h5_game';

    3. 杀掉死锁进程

    select pg_terminate_backend(pid)
    from pg_stat_activity
    where state = 'active'
    and pid != pg_backend_pid()
    --and pid = 14172
    and pid in (select a.pid
    from pg_locks a
    join pg_class b on a.relation = b.oid
    where lower(b.relname) = 'news_content')

    参考: postgresql表死锁问题的排查方式 - PostgreSQL - 服务器之家 (zzvips.com)

    4.  看cpu指标  iowait  top  --  你看看io有降下来么  去数据库服务器看

     

     

    ps -ef|grep postgres|grep -I wait

    iotop              ---------------------------      看一下哪个进程比较耗费io

    表膨胀

    数据量大

    VACUUM full bi_dws_kpi_agency      --   VACUUM full 表名

     vacuum full(阻塞读写)  

    用一个例子来演示会更加清晰
  • 相关阅读:
    python-pycharm中使用anaconda部署python环境
    Spring Boot 整合 Redis 实现缓存操作
    Spring中的ThreadPoolTaskExecutor
    Redis-基本数据类型与内部存储结构
    Redis如何存储对象与集合示例详解
    redis存储对象
    java在注解中绑定方法参数的解决方案
    spring boot整合JMS(ActiveMQ实现)
    springboot集成activemq
    NodeJS、NPM安装配置步骤(windows版本)
  • 原文地址:https://www.cnblogs.com/hixiaowei/p/15620762.html
Copyright © 2020-2023  润新知