PostgreSQL 查看是否存在死锁

x33g5p2x  于2021-09-23 转载在 其他  
字(3.5k)|赞(0)|评价(0)|浏览(559)

查看死锁的sql

  1. SELECT blocked_locks.pid AS blocked_pid,
  2. blocked_activity.usename AS blocked_user,
  3. blocking_locks.pid AS blocking_pid,
  4. blocking_activity.usename AS blocking_user,
  5. blocked_activity.query AS blocked_statement,
  6. blocking_activity.query AS current_statement_in_blocking_process
  7. FROM pg_catalog.pg_locks blocked_locks
  8. JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
  9. JOIN pg_catalog.pg_locks blocking_locks
  10. ON blocking_locks.locktype = blocked_locks.locktype
  11. AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
  12. AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
  13. AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
  14. AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
  15. AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
  16. AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
  17. AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
  18. AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
  19. AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
  20. AND blocking_locks.pid != blocked_locks.pid
  21. JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
  22. WHERE NOT blocked_locks.GRANTED;

或者使用这个sql

  1. SELECT blocked_locks.pid AS blocked_pid,
  2. blocked_activity.usename AS blocked_user,
  3. blocking_locks.pid AS blocking_pid,
  4. blocking_activity.usename AS blocking_user,
  5. blocked_activity.query AS blocked_statement,
  6. blocking_activity.query AS current_statement_in_blocking_process
  7. FROM pg_catalog.pg_locks blocked_locks
  8. JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
  9. JOIN pg_catalog.pg_locks blocking_locks
  10. ON blocking_locks.locktype = blocked_locks.locktype
  11. AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
  12. AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
  13. AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
  14. AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
  15. AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
  16. AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
  17. AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
  18. AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
  19. AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
  20. AND blocking_locks.pid != blocked_locks.pid
  21. JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
  22. WHERE NOT blocked_locks.GRANTED;

按建立连接的时间排序的正在运行查询的列表

  1. SELECT * FROM pg_stat_activity ORDER BY backend_start;

统计idle,active,null的运行的sql的数量

  1. select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;

终止pid会话

要停止正在执行查询的进程,请从另一个会话中调用以下查询

  1. select pg_terminate_backend(25756)

确认当前的连接用户和对应的连接机器

  1. SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;

查看sql使用情况

  1. SELECT datname,usename,query FROM pg_stat_activity ;

只查看当前正在运行的sql

  1. SELECT datname,usename,query
  2. FROM pg_stat_activity
  3. WHERE state != 'idle'

查看耗时较长的sql

  1. select current_timestamp - query_start as runtime, datname, usename, query
  2. from pg_stat_activity
  3. where state != 'idle'
  4. order by 1 desc;

查看数据库的最大链接数

  1. show max_connections;

查看当前使用的连接数

  1. SELECT COUNT(*) from pg_stat_activity;

查看prepostsql的最大链接数

  1. select min_val, max_val from pg_settings where name='max_connections';

查看正在运行的sql,并且带上运行时长

  1. SELECT
  2. procpid,
  3. start,
  4. now() - start AS lap,
  5. current_query
  6. FROM
  7. (SELECT
  8. backendid,
  9. pg_stat_get_backend_pid(S.backendid) AS procpid,
  10. pg_stat_get_backend_activity_start(S.backendid) AS start,
  11. pg_stat_get_backend_activity(S.backendid) AS current_query
  12. FROM
  13. (SELECT pg_stat_get_backend_idset() AS backendid) AS S
  14. ) AS S
  15. WHERE
  16. current_query <> '<IDLE>'
  17. ORDER BY
  18. lap DESC;

相关文章