SlideShare a Scribd company logo
pg proctab
Accessing System Stats in PostgreSQL


           Mark Wong
      markwkm@postgresql.org

     PostgreSQL Conference East 2010


         March 25-28, 2010
Slides available on slideshare




   http://www.slideshare.net/markwkm
Agenda




     Brief review of what PostgreSQL stats are available
     How pg proctab may help
Review



  Some of the PostgreSQL system catalog tables:
         pg stat activity
         pg stat database
         pg stat all tables
         pg stat all indexes
         pg statio all tables
         pg statio all indexes
Example: pg stat activity


  SELECT datname, procpid, usename, current_query
  FROM pg_stat_activity
  WHERE current_query <> ’<IDLE>’;

  datname         dbt5
  procpid         3260
  usename         postgres
  current_query   SELECT * FROM TradeLookupFrame3(
                  ’2006-2-27 9:15:0’,43000050000,20,
                  ’2005-11-23 12:6:8’,’ENGAPRB’)


  ...
Example: pg stat database




  SELECT datname, numbackends, xact_commit, xact_rollback
  FROM pg_stat_database
  ORDER BY datname;

  datname         dbt5
  numbackends     11
  xact_commit     228458
  xact_rollback   320
Example: pg stat all tables



  SELECT seq_scan, idx_scan, n_tup_ins, n_tup_upd,
         n_tup_del
  FROM pg_stat_all_tables
  WHERE relname = ’customer’;

  seq_scan    10
  idx_scan    152795
  n_tup_ins   5000
  n_tup_upd   0
  n_tup_del   0
Example: pg statio all tables



  SELECT heap_blks_read, heap_blks_hit, idx_blks_read,
         idx_blks_hit
  FROM pg_statio_all_tables
  WHERE relname = ’customer’;

  heap_blks_read   26897
  heap_blks_hit    141581
  idx_blks_read    5577
  idx_blks_hit     328770
__      __
           / ~~~/  . o O ( Want more! )
    ,----(       oo     )
  /        __      __/
 /|            ( |(
^     /___ / |
    |__|    |__|-"
What about operating system statistics?




      I/O? — iostat
      Processor Utilization? — mpstat
      Per Process Statistics? — pidstat
      Other system activity? — sar
      and so on...
Introducing pg proctab




   pg proctab is a collection of four C stored functions:
       pg cputime
       pg loadavg
       pg memusage
       pg proctab
__      __
           / ~~~/  . o O ( Examples? )
    ,----(       oo     )
  /        __      __/
 /|            ( |(
^     /___ / |
    |__|    |__|-"
Some of the things pg proctab should help with




       Query operating system process table
       Query operating system statistics
            Processor time
            Load averages
            Memory usage
       Without escaping out to a shell!
       ...plus generate reports about timeslices
   Note: Following examples are from Linux based systems.
pg cputime() Example




  SELECT *
  FROM pg_cputime();

  user     31529387
  nice     76
  system   6865679
  idle     574707718
  iowait   1985455
pg cputime() Column Description




  From Linux kernel source code at
  Documentation/filesystems/proc.txt:
  user: normal processes executing in user mode
  nice: niced processes executing in user mode
  system: processes executing in kernel mode
  idle: processes twiddling thumbs
  iowait: waiting for I/O to complete
pg loadavg() Example




  SELECT *
  FROM pg_loadavg();

  load1      7.71
  load5      7.73
  load15     7.62
  last_pid   4623
pg loadavg() Column Description




  load1: load average of last minute
  load5: load average of last 5 minutes
  load15: load average of last 15 minutes
  last pid: last pid running
pg memusage() Example


  SELECT *
  FROM pg_memusage();

  memused      32793836
  memfree      157704
  memshared    0
  membuffers   94216
  memcached    31749292
  swapused     13960
  swapfree     3986216
  swapcached   1264
pg memusage() Column Description


  Paraphrased from Linux kernel source code at
  Documentation/filesystems/proc.txt:
  memused: Total physical RAM used
  memfree: Total physical RAM not used
  memshared: Not used, always 0. (For Solaris.)
  membuffers: Temporary storage for raw disk blocks
  memcached: In-memory cache for files read from disk
  swapused: Total swap space used
  swapfree: Memory evicted from RAM that is now temporary on
  disk
  swapcached: Memory that was swapped out, now swapped in but
  still in swap
pg proctab() Partial Column Description

   Everything from the operating system such as /proc/<pid>/stat,
   /proc/<pid>/io and /proc/<pid>/cmdline as well as data
   from PostgreSQL system catalog such as pg stat activity table
   are available but we’ll only cover some of the fields here:
   Informative:
         pid
         comm - filename of the executable
         fullcomm (/proc/<pid>/cmdline)
         uid
         username
   Processor:
         utime - user mode jiffies
         stime - kernel mode jiffies
   ...
pg proctab() Partial Column Description (cont.)

   Memory:
          vsize - virtual memory size
          rss - resident set memory size
   I/O:
          syscr - number of read I/O operations
          syscw - number of write I/O operations
          reads - number of bytes which this process really did cause to
          be fetched from the storage layer
          writes - number of bytes which this process really did cause to
          be sent from the storage layer
          cwrites - number of bytes which this process caused to not
          happen, by truncating pagecache
__      __
           / ~~~/  . o O ( More useful examples? )
    ,----(       oo     )
  /        __      __/
 /|            ( |(
^     /___ / |
    |__|    |__|-"
pg proctab() Example

  SELECT datname, procpid, processor, state, fullcomm
  FROM pg_stat_activity, pg_proctab()
  WHERE procpid = pid;

  datname     dbt5
  procpid     3260
  processor   6
  state       R
  fullcomm    postgres: postgres dbt5 207.173.203.228(48950)
              SELECT

  datname     dbt5
  procpid     3261
  processor   1
  state       R
  fullcomm    postgres: postgres dbt5 207.173.203.228(48953)
              SELECT
__      __     /                      
           / ~~~/  . o O | Measuring performance |
    ,----(       oo     )  | of a query.           |
  /        __      __/                          /
 /|            ( |(
^     /___ / |
    |__|    |__|-"


You can find the following helper scripts in the pg proctab
contrib directory.
Create snapshot tables




   Create a set of tables to hold all of the information returned by
   these 4 stored functions. Also creates a table to timestamp when a
   snapshot of data is taken.

   psql -f create-ps_procstat-tables.sql
Identify yourself.




   dbt3=# SELECT *
   FROM pg_backend_pid();

    pg_backend_pid
   ----------------
             4590
   (1 row)
Take a snapshot before running the query



   dbt3=# i ps_procstat-snap.sql

   BEGIN

    ps_snap_stats
   ---------------
                1
   (1 row)

   COMMIT
Execute an SQL statement

   Don’t focus too much on the actual query, the idea is that is you
   want to collect statistics for a single query:
   SELECT   nation,
            o_year,
            Sum(amount) AS sum_profit
   FROM     (SELECT n_name                                                          AS nation,
                    Extract(YEAR FROM o_orderdate)                                  AS o_year,
                    l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity AS amount
             FROM   part,
                    supplier,
                    lineitem,
                    partsupp,
                    orders,
                    nation
             WHERE s_suppkey = l_suppkey
             AND ps_suppkey = l_suppkey
             AND ps_partkey = l_partkey
             AND p_partkey = l_partkey
             AND o_orderkey = l_orderkey
             AND s_nationkey = n_nationkey
             AND p_name LIKE ’%white%’) AS profit
   GROUP BY nation,
            o_year
   ORDER BY nation,
            o_year DESC;
Take a snapshot after running the query



   dbt3=# i ps_procstat-snap.sql

   BEGIN

    ps_snap_stats
   ---------------
                2
   (1 row)

   COMMIT
Calculate Processor Utilization

   $ ./ps-processor-utilization.sh [pid] [before] [after]


   $ ./ps-processor-utilization.sh 4590 1 2
   Processor Utilization = 1.00 %


   What the script does (partially) should be the same as top:

   SELECT stime, utime, stime + utime AS total,
          extract(epoch FROM time)
   FROM ps_snaps a, ps_procstat b
   WHERE pid = ${PID}
     AND a.snap = b.snap
     AND a.snap = ${SNAP1}
Calculate Disk Utilization


   $ ./ps-io-utilization.sh 4590 1 2
   Reads = 276981
   Writes = 63803
   Reads (Bytes) = 2164604928
   Writes (Bytes) = 508166144
   Cancelled (Bytes) = 36880384

   SELECT syscr, syscw, reads, writes, cwrites
   FROM ps_snaps a, ps_procstat b
   WHERE pid = ${PID}
     AND a.snap = b.snap
     AND a.snap = ${SNAP1}
__      __     /                
           / ~~~/  . o O | Creating Custom |
    ,----(       oo     )  | Reports!        |
  /        __      __/                    /
 /|            ( |(
^     /___ / |
    |__|    |__|-"


ps-report-pl
__      __     /                       
           / ~~~/  . o O | Warning! Too much data |
    ,----(       oo     )  | to fit on screen!       |
  /        __      __/                           /
 /|            ( |(
^     /___ / |
    |__|    |__|-"
Creating Reports: Section 1


   Database       : dbt5
   Snapshot Start : 2010-03-26 15:24:51.516226-07
   Snapshot End   : 2010-03-26 15:25:51.57661-07

   -------------------
   Database Statistics
   -------------------
   Commits     : 421
   Rollbacks   : 2
   Blocks Read : 13919368
   Blocks Hit : 7876506
Creating Reports: Section 2


   ================
   Table Statistics
   ================
   ------------------------------------------ -------- ------------ -------- ------------- --------- --------
   Schema.Relation                            Seq Scan Seq Tup Read Idx Scan Idx Tup Fetch N Tup Ins N Tup Up
   ------------------------------------------ -------- ------------ -------- ------------- --------- --------



   ...

   public.account_permission                        0            0        3             3         0
   public.address                                   0            0      488           732         0
   public.broker                                  169         8067      259           259         0        3
   public.cash_transaction                          0            0      952           928        37        7
   public.charge                                   39          585        0             0         0
   public.commission_rate                          60         9820       18            44         0
   public.company                                   2         5000     1496          1496         0
   public.company_competitor                        0            0       61           183         0
   public.customer                                  0            0      375           375         0
   public.customer_account                          0            0      690           968         0        3
   public.customer_taxrate                         20       200000       40            40         0
   public.daily_market                              0            0     4322          4962         0



   ...
Creating Reports: Section 2 - Falling off the right side...




       N Tup Upd
       N Tup Del
       Last Vacuum
       Last Autovacuum
       Last Analyze
       Last Autoanalyze
Creating Reports: Section 3


   ================
   Index Statistics
   ================
   --------------------------------------------------------------------- -------- ------------ -------------
   Schema.Relation.Index                                                 Idx Scan Idx Tup Read Idx Tup Fetch
   --------------------------------------------------------------------- -------- ------------ -------------



   ...

   public.account_permission.pk_account_permission                             3            3             3
   public.address.pk_address                                                 488          732           732
   public.broker.pk_broker                                                   259          259           259
   public.cash_transaction.pk_cash_transaction                               952          998           928
   public.charge.pk_charge                                                     0            0             0
   public.commission_rate.pk_commission_rate                                  18           44             0
   public.company.i_co_name                                                   14           14            14
   public.company.pk_company                                                1482         1482          1482
   public.company_competitor.pk_company_competitor                            61          183           183
   public.customer.i_c_tax_id                                                 27           27            27
   public.customer.pk_customer                                               348          348           348
   public.customer_account.i_ca_c_id                                         198          477           476



   ...
What else can we do with pg proctab?




   Enable pg top to monitor remote databases by providing access to
   the database system’s operating system process table.
pg top
__      __
           / ~~~/  . o O ( Thank you! )
    ,----(       oo     )
  /        __      __/
 /|            ( |(
^     /___ / |
    |__|    |__|-"
. . . the fine print . . .




    Links:
        http://git.postgresql.org/gitweb?p=pg_proctab.git
        git clone
        git://git.postgresql.org/git/pg proctab.git
Acknowledgements



  Haley Jane Wakenshaw

              __      __
             / ~~~/ 
      ,----(       oo     )
    /        __      __/
   /|            ( |(
  ^     /___ / |
      |__|    |__|-"
License




   This work is licensed under a Creative Commons Attribution 3.0
   Unported License. To view a copy of this license, (a) visit
   http://creativecommons.org/licenses/by/3.0/us/; or, (b)
   send a letter to Creative Commons, 171 2nd Street, Suite 300, San
   Francisco, California, 94105, USA.

More Related Content

What's hot

Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloudPatroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloud
Lucio Grenzi
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuning
elliando dias
 
Deep dive to PostgreSQL Indexes
Deep dive to PostgreSQL IndexesDeep dive to PostgreSQL Indexes
Deep dive to PostgreSQL Indexes
Ibrar Ahmed
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
 
PostgreSQL: Advanced indexing
PostgreSQL: Advanced indexingPostgreSQL: Advanced indexing
PostgreSQL: Advanced indexing
Hans-Jürgen Schönig
 
PostGreSQL Performance Tuning
PostGreSQL Performance TuningPostGreSQL Performance Tuning
PostGreSQL Performance Tuning
Maven Logix
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
Masahiko Sawada
 
Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!
PGConf APAC
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Masahiko Sawada
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
Alexander Kukushkin
 
Wait! What’s going on inside my database?
Wait! What’s going on inside my database?Wait! What’s going on inside my database?
Wait! What’s going on inside my database?
Jeremy Schneider
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
Mydbops
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
Alexey Lesovsky
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
Brendan Gregg
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in Postgresql
Mydbops
 
PostgreSQL Deep Internal
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep Internal
EXEM
 
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
Kazuaki Ishizaki
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability Methods
Mydbops
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System Administrators
Command Prompt., Inc
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
Federico Campoli
 

What's hot (20)

Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloudPatroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloud
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuning
 
Deep dive to PostgreSQL Indexes
Deep dive to PostgreSQL IndexesDeep dive to PostgreSQL Indexes
Deep dive to PostgreSQL Indexes
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
 
PostgreSQL: Advanced indexing
PostgreSQL: Advanced indexingPostgreSQL: Advanced indexing
PostgreSQL: Advanced indexing
 
PostGreSQL Performance Tuning
PostGreSQL Performance TuningPostGreSQL Performance Tuning
PostGreSQL Performance Tuning
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
 
Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 
Wait! What’s going on inside my database?
Wait! What’s going on inside my database?Wait! What’s going on inside my database?
Wait! What’s going on inside my database?
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in Postgresql
 
PostgreSQL Deep Internal
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep Internal
 
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability Methods
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System Administrators
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 

Similar to pg_proctab: Accessing System Stats in PostgreSQL

pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
Mark Wong
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
Masahiko Sawada
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance Issues
Odoo
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and Architecture
Sidney Chen
 
Debug generic process
Debug generic processDebug generic process
Debug generic process
Vipin Varghese
 
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
Brendan Gregg
 
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRestPGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam
 
Explain this!
Explain this!Explain this!
Explain this!
Fabio Telles Rodriguez
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
Alexey Lesovsky
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12
Andrew Dunstan
 
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Ontico
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
PostgreSQL Portland Performance Practice Project - Database Test 2 HowtoPostgreSQL Portland Performance Practice Project - Database Test 2 Howto
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
Mark Wong
 
Thomas+Niewel+ +Oracletuning
Thomas+Niewel+ +OracletuningThomas+Niewel+ +Oracletuning
Thomas+Niewel+ +Oracletuning
afa reg
 
8.4 Upcoming Features
8.4 Upcoming Features 8.4 Upcoming Features
8.4 Upcoming Features
PostgreSQL Experts, Inc.
 
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Ontico
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems Performance
Brendan Gregg
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2
PgTraining
 
Designing Tracing Tools
Designing Tracing ToolsDesigning Tracing Tools
Designing Tracing Tools
Sysdig
 
SOFA Tutorial
SOFA TutorialSOFA Tutorial
SOFA Tutorial
NTU CSIE, Taiwan
 

Similar to pg_proctab: Accessing System Stats in PostgreSQL (20)

pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance Issues
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and Architecture
 
Debug generic process
Debug generic processDebug generic process
Debug generic process
 
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRestPGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
 
Explain this!
Explain this!Explain this!
Explain this!
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12
 
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
PostgreSQL Portland Performance Practice Project - Database Test 2 HowtoPostgreSQL Portland Performance Practice Project - Database Test 2 Howto
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
 
Thomas+Niewel+ +Oracletuning
Thomas+Niewel+ +OracletuningThomas+Niewel+ +Oracletuning
Thomas+Niewel+ +Oracletuning
 
8.4 Upcoming Features
8.4 Upcoming Features 8.4 Upcoming Features
8.4 Upcoming Features
 
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems Performance
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2
 
Designing Tracing Tools
Designing Tracing ToolsDesigning Tracing Tools
Designing Tracing Tools
 
SOFA Tutorial
SOFA TutorialSOFA Tutorial
SOFA Tutorial
 

More from Mark Wong

OHAI, my name is Chelnik! PGCon 2014 Mockumentary
OHAI, my name is Chelnik! PGCon 2014 MockumentaryOHAI, my name is Chelnik! PGCon 2014 Mockumentary
OHAI, my name is Chelnik! PGCon 2014 Mockumentary
Mark Wong
 
OHAI, my name is Chelnik! Postgres Open 2013 Report
OHAI, my name is Chelnik! Postgres Open 2013 ReportOHAI, my name is Chelnik! Postgres Open 2013 Report
OHAI, my name is Chelnik! Postgres Open 2013 Report
Mark Wong
 
collectd & PostgreSQL
collectd & PostgreSQLcollectd & PostgreSQL
collectd & PostgreSQL
Mark Wong
 
Android & PostgreSQL
Android & PostgreSQLAndroid & PostgreSQL
Android & PostgreSQL
Mark Wong
 
PGTop for Android: Things I learned making this app
PGTop for Android: Things I learned making this appPGTop for Android: Things I learned making this app
PGTop for Android: Things I learned making this app
Mark Wong
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
Mark Wong
 
Developing PGTop for Android
Developing PGTop for AndroidDeveloping PGTop for Android
Developing PGTop for Android
Mark Wong
 
Pg in-the-brazilian-armed-forces-presentation
Pg in-the-brazilian-armed-forces-presentationPg in-the-brazilian-armed-forces-presentation
Pg in-the-brazilian-armed-forces-presentation
Mark Wong
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
PostgreSQL Portland Performance Practice Project - Database Test 2 TuningPostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
Mark Wong
 
Filesystem Performance from a Database Perspective
Filesystem Performance from a Database PerspectiveFilesystem Performance from a Database Perspective
Filesystem Performance from a Database Perspective
Mark Wong
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
Mark Wong
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
Mark Wong
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Background
PostgreSQL Portland Performance Practice Project - Database Test 2 BackgroundPostgreSQL Portland Performance Practice Project - Database Test 2 Background
PostgreSQL Portland Performance Practice Project - Database Test 2 Background
Mark Wong
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
Mark Wong
 
pg_top is 'top' for PostgreSQL: pg_top + pg_proctab
pg_top is 'top' for PostgreSQL: pg_top + pg_proctabpg_top is 'top' for PostgreSQL: pg_top + pg_proctab
pg_top is 'top' for PostgreSQL: pg_top + pg_proctab
Mark Wong
 
Linux Filesystems, RAID, and more
Linux Filesystems, RAID, and moreLinux Filesystems, RAID, and more
Linux Filesystems, RAID, and more
Mark Wong
 
pg_top is 'top' for PostgreSQL
pg_top is 'top' for PostgreSQLpg_top is 'top' for PostgreSQL
pg_top is 'top' for PostgreSQL
Mark Wong
 
What Is Going On?
What Is Going On?What Is Going On?
What Is Going On?
Mark Wong
 

More from Mark Wong (18)

OHAI, my name is Chelnik! PGCon 2014 Mockumentary
OHAI, my name is Chelnik! PGCon 2014 MockumentaryOHAI, my name is Chelnik! PGCon 2014 Mockumentary
OHAI, my name is Chelnik! PGCon 2014 Mockumentary
 
OHAI, my name is Chelnik! Postgres Open 2013 Report
OHAI, my name is Chelnik! Postgres Open 2013 ReportOHAI, my name is Chelnik! Postgres Open 2013 Report
OHAI, my name is Chelnik! Postgres Open 2013 Report
 
collectd & PostgreSQL
collectd & PostgreSQLcollectd & PostgreSQL
collectd & PostgreSQL
 
Android & PostgreSQL
Android & PostgreSQLAndroid & PostgreSQL
Android & PostgreSQL
 
PGTop for Android: Things I learned making this app
PGTop for Android: Things I learned making this appPGTop for Android: Things I learned making this app
PGTop for Android: Things I learned making this app
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
Developing PGTop for Android
Developing PGTop for AndroidDeveloping PGTop for Android
Developing PGTop for Android
 
Pg in-the-brazilian-armed-forces-presentation
Pg in-the-brazilian-armed-forces-presentationPg in-the-brazilian-armed-forces-presentation
Pg in-the-brazilian-armed-forces-presentation
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
PostgreSQL Portland Performance Practice Project - Database Test 2 TuningPostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
 
Filesystem Performance from a Database Perspective
Filesystem Performance from a Database PerspectiveFilesystem Performance from a Database Perspective
Filesystem Performance from a Database Perspective
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
PostgreSQL Portland Performance Practice Project - Database Test 2 Filesystem...
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
PostgreSQL Portland Performance Practice Project - Database Test 2 Workload D...
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Background
PostgreSQL Portland Performance Practice Project - Database Test 2 BackgroundPostgreSQL Portland Performance Practice Project - Database Test 2 Background
PostgreSQL Portland Performance Practice Project - Database Test 2 Background
 
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
PostgreSQL Portland Performance Practice Project - Database Test 2 Series Ove...
 
pg_top is 'top' for PostgreSQL: pg_top + pg_proctab
pg_top is 'top' for PostgreSQL: pg_top + pg_proctabpg_top is 'top' for PostgreSQL: pg_top + pg_proctab
pg_top is 'top' for PostgreSQL: pg_top + pg_proctab
 
Linux Filesystems, RAID, and more
Linux Filesystems, RAID, and moreLinux Filesystems, RAID, and more
Linux Filesystems, RAID, and more
 
pg_top is 'top' for PostgreSQL
pg_top is 'top' for PostgreSQLpg_top is 'top' for PostgreSQL
pg_top is 'top' for PostgreSQL
 
What Is Going On?
What Is Going On?What Is Going On?
What Is Going On?
 

Recently uploaded

Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
fredae14
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
Federico Razzoli
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 

Recently uploaded (20)

Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 

pg_proctab: Accessing System Stats in PostgreSQL

  • 1. pg proctab Accessing System Stats in PostgreSQL Mark Wong markwkm@postgresql.org PostgreSQL Conference East 2010 March 25-28, 2010
  • 2. Slides available on slideshare http://www.slideshare.net/markwkm
  • 3. Agenda Brief review of what PostgreSQL stats are available How pg proctab may help
  • 4. Review Some of the PostgreSQL system catalog tables: pg stat activity pg stat database pg stat all tables pg stat all indexes pg statio all tables pg statio all indexes
  • 5. Example: pg stat activity SELECT datname, procpid, usename, current_query FROM pg_stat_activity WHERE current_query <> ’<IDLE>’; datname dbt5 procpid 3260 usename postgres current_query SELECT * FROM TradeLookupFrame3( ’2006-2-27 9:15:0’,43000050000,20, ’2005-11-23 12:6:8’,’ENGAPRB’) ...
  • 6. Example: pg stat database SELECT datname, numbackends, xact_commit, xact_rollback FROM pg_stat_database ORDER BY datname; datname dbt5 numbackends 11 xact_commit 228458 xact_rollback 320
  • 7. Example: pg stat all tables SELECT seq_scan, idx_scan, n_tup_ins, n_tup_upd, n_tup_del FROM pg_stat_all_tables WHERE relname = ’customer’; seq_scan 10 idx_scan 152795 n_tup_ins 5000 n_tup_upd 0 n_tup_del 0
  • 8. Example: pg statio all tables SELECT heap_blks_read, heap_blks_hit, idx_blks_read, idx_blks_hit FROM pg_statio_all_tables WHERE relname = ’customer’; heap_blks_read 26897 heap_blks_hit 141581 idx_blks_read 5577 idx_blks_hit 328770
  • 9. __ __ / ~~~/ . o O ( Want more! ) ,----( oo ) / __ __/ /| ( |( ^ /___ / | |__| |__|-"
  • 10. What about operating system statistics? I/O? — iostat Processor Utilization? — mpstat Per Process Statistics? — pidstat Other system activity? — sar and so on...
  • 11. Introducing pg proctab pg proctab is a collection of four C stored functions: pg cputime pg loadavg pg memusage pg proctab
  • 12. __ __ / ~~~/ . o O ( Examples? ) ,----( oo ) / __ __/ /| ( |( ^ /___ / | |__| |__|-"
  • 13. Some of the things pg proctab should help with Query operating system process table Query operating system statistics Processor time Load averages Memory usage Without escaping out to a shell! ...plus generate reports about timeslices Note: Following examples are from Linux based systems.
  • 14. pg cputime() Example SELECT * FROM pg_cputime(); user 31529387 nice 76 system 6865679 idle 574707718 iowait 1985455
  • 15. pg cputime() Column Description From Linux kernel source code at Documentation/filesystems/proc.txt: user: normal processes executing in user mode nice: niced processes executing in user mode system: processes executing in kernel mode idle: processes twiddling thumbs iowait: waiting for I/O to complete
  • 16. pg loadavg() Example SELECT * FROM pg_loadavg(); load1 7.71 load5 7.73 load15 7.62 last_pid 4623
  • 17. pg loadavg() Column Description load1: load average of last minute load5: load average of last 5 minutes load15: load average of last 15 minutes last pid: last pid running
  • 18. pg memusage() Example SELECT * FROM pg_memusage(); memused 32793836 memfree 157704 memshared 0 membuffers 94216 memcached 31749292 swapused 13960 swapfree 3986216 swapcached 1264
  • 19. pg memusage() Column Description Paraphrased from Linux kernel source code at Documentation/filesystems/proc.txt: memused: Total physical RAM used memfree: Total physical RAM not used memshared: Not used, always 0. (For Solaris.) membuffers: Temporary storage for raw disk blocks memcached: In-memory cache for files read from disk swapused: Total swap space used swapfree: Memory evicted from RAM that is now temporary on disk swapcached: Memory that was swapped out, now swapped in but still in swap
  • 20. pg proctab() Partial Column Description Everything from the operating system such as /proc/<pid>/stat, /proc/<pid>/io and /proc/<pid>/cmdline as well as data from PostgreSQL system catalog such as pg stat activity table are available but we’ll only cover some of the fields here: Informative: pid comm - filename of the executable fullcomm (/proc/<pid>/cmdline) uid username Processor: utime - user mode jiffies stime - kernel mode jiffies ...
  • 21. pg proctab() Partial Column Description (cont.) Memory: vsize - virtual memory size rss - resident set memory size I/O: syscr - number of read I/O operations syscw - number of write I/O operations reads - number of bytes which this process really did cause to be fetched from the storage layer writes - number of bytes which this process really did cause to be sent from the storage layer cwrites - number of bytes which this process caused to not happen, by truncating pagecache
  • 22. __ __ / ~~~/ . o O ( More useful examples? ) ,----( oo ) / __ __/ /| ( |( ^ /___ / | |__| |__|-"
  • 23. pg proctab() Example SELECT datname, procpid, processor, state, fullcomm FROM pg_stat_activity, pg_proctab() WHERE procpid = pid; datname dbt5 procpid 3260 processor 6 state R fullcomm postgres: postgres dbt5 207.173.203.228(48950) SELECT datname dbt5 procpid 3261 processor 1 state R fullcomm postgres: postgres dbt5 207.173.203.228(48953) SELECT
  • 24. __ __ / / ~~~/ . o O | Measuring performance | ,----( oo ) | of a query. | / __ __/ / /| ( |( ^ /___ / | |__| |__|-" You can find the following helper scripts in the pg proctab contrib directory.
  • 25. Create snapshot tables Create a set of tables to hold all of the information returned by these 4 stored functions. Also creates a table to timestamp when a snapshot of data is taken. psql -f create-ps_procstat-tables.sql
  • 26. Identify yourself. dbt3=# SELECT * FROM pg_backend_pid(); pg_backend_pid ---------------- 4590 (1 row)
  • 27. Take a snapshot before running the query dbt3=# i ps_procstat-snap.sql BEGIN ps_snap_stats --------------- 1 (1 row) COMMIT
  • 28. Execute an SQL statement Don’t focus too much on the actual query, the idea is that is you want to collect statistics for a single query: SELECT nation, o_year, Sum(amount) AS sum_profit FROM (SELECT n_name AS nation, Extract(YEAR FROM o_orderdate) AS o_year, l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity AS amount FROM part, supplier, lineitem, partsupp, orders, nation WHERE s_suppkey = l_suppkey AND ps_suppkey = l_suppkey AND ps_partkey = l_partkey AND p_partkey = l_partkey AND o_orderkey = l_orderkey AND s_nationkey = n_nationkey AND p_name LIKE ’%white%’) AS profit GROUP BY nation, o_year ORDER BY nation, o_year DESC;
  • 29. Take a snapshot after running the query dbt3=# i ps_procstat-snap.sql BEGIN ps_snap_stats --------------- 2 (1 row) COMMIT
  • 30. Calculate Processor Utilization $ ./ps-processor-utilization.sh [pid] [before] [after] $ ./ps-processor-utilization.sh 4590 1 2 Processor Utilization = 1.00 % What the script does (partially) should be the same as top: SELECT stime, utime, stime + utime AS total, extract(epoch FROM time) FROM ps_snaps a, ps_procstat b WHERE pid = ${PID} AND a.snap = b.snap AND a.snap = ${SNAP1}
  • 31. Calculate Disk Utilization $ ./ps-io-utilization.sh 4590 1 2 Reads = 276981 Writes = 63803 Reads (Bytes) = 2164604928 Writes (Bytes) = 508166144 Cancelled (Bytes) = 36880384 SELECT syscr, syscw, reads, writes, cwrites FROM ps_snaps a, ps_procstat b WHERE pid = ${PID} AND a.snap = b.snap AND a.snap = ${SNAP1}
  • 32. __ __ / / ~~~/ . o O | Creating Custom | ,----( oo ) | Reports! | / __ __/ / /| ( |( ^ /___ / | |__| |__|-" ps-report-pl
  • 33. __ __ / / ~~~/ . o O | Warning! Too much data | ,----( oo ) | to fit on screen! | / __ __/ / /| ( |( ^ /___ / | |__| |__|-"
  • 34. Creating Reports: Section 1 Database : dbt5 Snapshot Start : 2010-03-26 15:24:51.516226-07 Snapshot End : 2010-03-26 15:25:51.57661-07 ------------------- Database Statistics ------------------- Commits : 421 Rollbacks : 2 Blocks Read : 13919368 Blocks Hit : 7876506
  • 35. Creating Reports: Section 2 ================ Table Statistics ================ ------------------------------------------ -------- ------------ -------- ------------- --------- -------- Schema.Relation Seq Scan Seq Tup Read Idx Scan Idx Tup Fetch N Tup Ins N Tup Up ------------------------------------------ -------- ------------ -------- ------------- --------- -------- ... public.account_permission 0 0 3 3 0 public.address 0 0 488 732 0 public.broker 169 8067 259 259 0 3 public.cash_transaction 0 0 952 928 37 7 public.charge 39 585 0 0 0 public.commission_rate 60 9820 18 44 0 public.company 2 5000 1496 1496 0 public.company_competitor 0 0 61 183 0 public.customer 0 0 375 375 0 public.customer_account 0 0 690 968 0 3 public.customer_taxrate 20 200000 40 40 0 public.daily_market 0 0 4322 4962 0 ...
  • 36. Creating Reports: Section 2 - Falling off the right side... N Tup Upd N Tup Del Last Vacuum Last Autovacuum Last Analyze Last Autoanalyze
  • 37. Creating Reports: Section 3 ================ Index Statistics ================ --------------------------------------------------------------------- -------- ------------ ------------- Schema.Relation.Index Idx Scan Idx Tup Read Idx Tup Fetch --------------------------------------------------------------------- -------- ------------ ------------- ... public.account_permission.pk_account_permission 3 3 3 public.address.pk_address 488 732 732 public.broker.pk_broker 259 259 259 public.cash_transaction.pk_cash_transaction 952 998 928 public.charge.pk_charge 0 0 0 public.commission_rate.pk_commission_rate 18 44 0 public.company.i_co_name 14 14 14 public.company.pk_company 1482 1482 1482 public.company_competitor.pk_company_competitor 61 183 183 public.customer.i_c_tax_id 27 27 27 public.customer.pk_customer 348 348 348 public.customer_account.i_ca_c_id 198 477 476 ...
  • 38. What else can we do with pg proctab? Enable pg top to monitor remote databases by providing access to the database system’s operating system process table.
  • 40. __ __ / ~~~/ . o O ( Thank you! ) ,----( oo ) / __ __/ /| ( |( ^ /___ / | |__| |__|-"
  • 41. . . . the fine print . . . Links: http://git.postgresql.org/gitweb?p=pg_proctab.git git clone git://git.postgresql.org/git/pg proctab.git
  • 42. Acknowledgements Haley Jane Wakenshaw __ __ / ~~~/ ,----( oo ) / __ __/ /| ( |( ^ /___ / | |__| |__|-"
  • 43. License This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, (a) visit http://creativecommons.org/licenses/by/3.0/us/; or, (b) send a letter to Creative Commons, 171 2nd Street, Suite 300, San Francisco, California, 94105, USA.