Search Postgresql Archives

survey: pg_stat_statements total_time and entry deallocation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



TLDR: can you run this query on your prod DB and post the results?
=====

The default value of pg_stat_statements.max is 5000. Nonetheless, I was recently trying to track down a SQL that did some temp I/O on a system and discovered that I could only find it in pg_stat_statements if I used \watch 1 and left a terminal open... that is, pg_stat_statements was deleting SQL statements from memory every second.

The code to manage deallocation of entries is well over 10 years old.  When it needs space for a new SQL and all <max> entries are already allocated, it simply removes the bottom 5% by execution count.  There's a comment that's been in there since the beginning, asking a question: should deallocation reflect execution time and/or buffer usage instead of execution count?

I'm most interested in total_time (I think if buffer access matters then total_time will reflect that).  This made me curious about the distribution of how total execution time is represented in pg_stat_statements on a busy system. I got ahold of some friends running busy, large postgres databases and had them run this simple query to show how total_time is distributed across pg_stat_statements.  Here's the query and results:

select 
   bucket
  ,count(*) entries
  ,max(calls) max_calls
  ,round(sum(total_time)) total_time
  ,round((100*sum(total_time)/avg(total_total_time))::numeric,2) pct_time
  ,round(sum(rows)) "rows"
  ,round((100*sum(rows)/avg(total_rows))::numeric,2) pct_rows
from 
  (
    select
       ntile(20) over (order by calls) bucket
      ,calls
      ,total_time
      ,sum(total_time) over () total_total_time
      ,rows
      ,sum(rows) over () total_rows
    from pg_stat_statements
  ) stmts
group by rollup(bucket) order by bucket;


----- Verification:

select current_setting('pg_stat_statements.max');
 current_setting
-----------------
 5000


----- System 1:

 bucket | entries |  max_calls  | total_time | pct_time |    rows     | pct_rows
--------+---------+-------------+------------+----------+-------------+----------
      1 |     247 |           2 |        169 |     0.00 |         375 |     0.00
      2 |     247 |           2 |         90 |     0.00 |          49 |     0.00
      3 |     247 |           2 |        305 |     0.00 |          99 |     0.00
      4 |     247 |           3 |        353 |     0.00 |         550 |     0.00
      5 |     247 |           8 |        148 |     0.00 |        1609 |     0.00
      6 |     247 |          44 |       1082 |     0.00 |        8912 |     0.00
      7 |     247 |          73 |       2515 |     0.00 |        8734 |     0.00
      8 |     247 |         117 |       5922 |     0.00 |       15690 |     0.00
      9 |     247 |         292 |      43513 |     0.00 |       92579 |     0.00
     10 |     247 |         851 |      20992 |     0.00 |      183895 |     0.00
     11 |     247 |        4260 |     109540 |     0.00 |      811519 |     0.00
     12 |     247 |        4682 |     278213 |     0.00 |     1113520 |     0.00
     13 |     247 |        5009 |     295912 |     0.00 |     1197532 |     0.00
     14 |     247 |        5379 |     312627 |     0.00 |     1280930 |     0.00
     15 |     247 |       12298 |     541302 |     0.01 |     1954252 |     0.01
     16 |     247 |       30573 |    1252066 |     0.01 |     6388232 |     0.02
     17 |     247 |       62390 |    2139082 |     0.03 |    10699710 |     0.04
     18 |     247 |      362514 |    7901250 |     0.09 |   181476105 |     0.64
     19 |     246 |     3311178 | 4823142913 |    56.53 |   416459495 |     1.47
     20 |     246 | 11373074151 | 3696341402 |    43.32 | 27693002500 |    97.80
 [NULL] |    4938 | 11373074151 | 8532389397 |   100.00 | 28314696287 |   100.00


----- System 2:

 bucket | entries | max_calls  | total_time | pct_time |    rows     | pct_rows
--------+---------+------------+------------+----------+-------------+----------
      1 |     244 |          2 |        242 |     0.00 |         570 |     0.00
      2 |     244 |          2 |         13 |     0.00 |          36 |     0.00
      3 |     244 |          2 |         14 |     0.00 |          34 |     0.00
      4 |     244 |          2 |         16 |     0.00 |          34 |     0.00
      5 |     244 |          2 |         14 |     0.00 |          38 |     0.00
      6 |     244 |          2 |         14 |     0.00 |          68 |     0.00
      7 |     244 |          2 |         14 |     0.00 |          30 |     0.00
      8 |     244 |          4 |         19 |     0.00 |         532 |     0.00
      9 |     244 |         34 |        184 |     0.00 |        2547 |     0.00
     10 |     244 |        202 |      10577 |     0.00 |       29682 |     0.00
     11 |     244 |        644 |      23279 |     0.00 |      125213 |     0.00
     12 |     244 |       1544 |      46987 |     0.00 |      348863 |     0.00
     13 |     244 |       1943 |      90455 |     0.00 |      424748 |     0.00
     14 |     244 |       2172 |     105795 |     0.00 |      502619 |     0.00
     15 |     244 |       2349 |     115168 |     0.00 |      548606 |     0.00
     16 |     244 |       2532 |     124633 |     0.00 |      593084 |     0.00
     17 |     244 |       2834 |     134928 |     0.00 |      646622 |     0.00
     18 |     244 |      38747 |     184982 |     0.00 |     1275064 |     0.01
     19 |     244 |    2334761 | 3496474265 |    58.13 |   551602241 |     2.63
     20 |     243 | 8743645771 | 2517902540 |    41.86 | 20380562694 |    97.34
 [NULL] |    4879 | 8743645771 | 6015214139 |   100.00 | 20936663325 |   100.00

Would anyone else be willing to run this query against their prod box and post the results?  Especially if it is using all 5000 entries in pg_stat_statements? I for one would like to know just how confident I should be in whether pg_stat_statements is representative of all the activity on a large system!

-Jeremy

-- 
Jeremy Schneider
Database Engineer
Amazon Web Services

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux