• Andres Freund's avatar
    Fix performance regression from session statistics. · 7890a423
    Andres Freund authored
    Session statistics, as introduced by 960869da, had several shortcomings:
    
    - an additional GetCurrentTimestamp() call that also impaired the accuracy of
      the data collected
    
      This can be avoided by passing the current timestamp we already have in
      pgstat_report_stat().
    
    - an additional statistics UDP packet sent every 500ms
    
      This is solved by adding the new statistics to PgStat_MsgTabstat.
      This is conceptually ugly, because session statistics are not
      table statistics.  But the struct already contains data unrelated
      to tables, so there is not much damage done.
    
      Connection and disconnection are reported in separate messages, which
      reduces the number of additional messages to two messages per session and a
      slight increase in PgStat_MsgTabstat size (but the same number of table
      stats fit).
    
    - Session time computation could overflow on systems where long is 32 bit.
    Reported-By: default avatarAndres Freund <andres@anarazel.de>
    Author: Andres Freund <andres@anarazel.de>
    Author: Laurenz Albe <laurenz.albe@cybertec.at>
    Discussion: https://postgr.es/m/20210801205501.nyxzxoelqoo4x2qc%40alap3.anarazel.de
    Backpatch: 14-, where the feature was introduced.
    7890a423
pgstat.c 154 KB