Guest User

Untitled

a guest
Dec 12th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. SELECT tablename AS TABLE_NAME,
  2. ROUND(CASE
  3. WHEN otta=0 THEN 0.0
  4. ELSE sml.relpages/otta::numeric
  5. END,1) AS table_bloat,
  6. CASE
  7. WHEN relpages < otta THEN '0'
  8. ELSE pg_size_pretty((bs*(sml.relpages-otta)::bigint)::bigint)
  9. END AS table_waste,
  10. iname AS index_name,
  11. ROUND(CASE
  12. WHEN iotta=0
  13. OR ipages=0 THEN 0.0
  14. ELSE ipages/iotta::numeric
  15. END,1) AS index_bloat,
  16. CASE
  17. WHEN ipages < iotta THEN '0'
  18. ELSE pg_size_pretty((bs*(ipages-iotta))::bigint)
  19. END AS index_waste
  20. FROM
  21. (SELECT schemaname,
  22. tablename,
  23. cc.reltuples,
  24. cc.relpages,
  25. bs,
  26. CEIL((cc.reltuples*((datahdr+ma- (CASE
  27. WHEN datahdr%ma=0 THEN ma
  28. ELSE datahdr%ma
  29. END))+nullhdr2+4))/(bs-20::float)) AS otta,
  30. COALESCE(c2.relname,'?') AS iname,
  31. COALESCE(c2.reltuples,0) AS ituples,
  32. COALESCE(c2.relpages,0) AS ipages,
  33. COALESCE(CEIL((c2.reltuples*(datahdr-12))/(bs-20::float)),0) AS iotta
  34. FROM
  35. (SELECT ma,
  36. bs,
  37. schemaname,
  38. tablename,
  39. (datawidth+(hdr+ma-(CASE
  40. WHEN hdr%ma=0 THEN ma
  41. ELSE hdr%ma
  42. END)))::numeric AS datahdr,
  43. (maxfracsum*(nullhdr+ma-(CASE
  44. WHEN nullhdr%ma=0 THEN ma
  45. ELSE nullhdr%ma
  46. END))) AS nullhdr2
  47. FROM
  48. (SELECT schemaname,
  49. tablename,
  50. hdr,
  51. ma,
  52. bs,
  53. SUM((1-null_frac)*avg_width) AS datawidth,
  54. MAX(null_frac) AS maxfracsum,
  55. hdr+
  56. (SELECT 1+count(*)/8
  57. FROM pg_stats s2
  58. WHERE null_frac<>0
  59. AND s2.schemaname = s.schemaname
  60. AND s2.tablename = s.tablename) AS nullhdr
  61. FROM pg_stats s,
  62.  
  63. (SELECT
  64. (SELECT current_setting('block_size')::numeric) AS bs,
  65. CASE
  66. WHEN substring(v,12,3) IN ('8.0',
  67. '8.1',
  68. '8.2') THEN 27
  69. ELSE 23
  70. END AS hdr,
  71. CASE
  72. WHEN v ~ 'mingw32' THEN 8
  73. ELSE 4
  74. END AS ma
  75. FROM
  76. (SELECT version() AS v) AS foo) AS constants
  77. GROUP BY 1,
  78. 2,
  79. 3,
  80. 4,
  81. 5) AS foo) AS rs
  82. JOIN pg_class cc ON cc.relname = rs.tablename
  83. JOIN pg_namespace nn ON cc.relnamespace = nn.oid
  84. AND nn.nspname = rs.schemaname
  85. AND nn.nspname <> 'information_schema'
  86. LEFT JOIN pg_index i ON indrelid = cc.oid
  87. LEFT JOIN pg_class c2 ON c2.oid = i.indexrelid) AS sml
  88. ORDER BY CASE
  89. WHEN relpages < otta THEN 0
  90. ELSE bs*(sml.relpages-otta)::bigint
  91. END DESC;
Add Comment
Please, Sign In to add comment