Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. -- reporting current activity
  2. SELECT pid, age(query_start, clock_timestamp()), usename, query
  3. FROM pg_stat_activity
  4. WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%'
  5. and state = 'active'
  6. ORDER BY query_start desc;
  7.  
  8.  
  9. -- lock monitoring
  10. SELECT blocked_locks.pid AS blocked_pid,
  11. blocked_activity.usename AS blocked_user,
  12. blocking_locks.pid AS blocking_pid,
  13. blocking_activity.usename AS blocking_user,
  14. blocked_activity.query AS blocked_statement,
  15. blocking_activity.query AS current_statement_in_blocking_process
  16. FROM pg_catalog.pg_locks blocked_locks
  17. JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
  18. JOIN pg_catalog.pg_locks blocking_locks
  19. ON blocking_locks.locktype = blocked_locks.locktype
  20. AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
  21. AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
  22. AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
  23. AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
  24. AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
  25. AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
  26. AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
  27. AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
  28. AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
  29. AND blocking_locks.pid != blocked_locks.pid
  30.  
  31. JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
  32. WHERE NOT blocked_locks.GRANTED;
  33.  
  34. -- index usage
  35. SELECT
  36. t.tablename,
  37. indexname,
  38. c.reltuples AS num_rows,
  39. pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
  40. pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
  41. CASE WHEN indisunique THEN 'Y'
  42. ELSE 'N'
  43. END AS UNIQUE,
  44. idx_scan AS number_of_scans,
  45. idx_tup_read AS tuples_read,
  46. idx_tup_fetch AS tuples_fetched
  47. FROM pg_tables t
  48. LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
  49. LEFT OUTER JOIN
  50. ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
  51. JOIN pg_class c ON c.oid = x.indrelid
  52. JOIN pg_class ipg ON ipg.oid = x.indexrelid
  53. JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
  54. AS foo
  55. ON t.tablename = foo.ctablename
  56. WHERE
  57. t.schemaname='public'
  58. and tablename = ?
  59. ORDER BY 1,2;
  60.  
  61. -- index stats
  62. SELECT schemaname, relname, seq_scan-idx_scan AS too_much_seq, case when seq_scan-idx_scan>0 THEN 'Missing Index?' ELSE 'OK' END, pg_relation_size(format('%I.%I', schemaname, relname)::regclass) AS rel_size, seq_scan, idx_scan
  63. FROM pg_stat_user_tables
  64. WHERE pg_relation_size(format('%I.%I', schemaname, relname)::regclass)>80000 ORDER BY too_much_seq DESC;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement