diff --git a/README.md b/README.md index cca64b9..be55dc8 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,8 @@ The pg_stat_monitor is the statistics collection tool based on PostgreSQL's cont The ``pg_stat_monitor`` should work on the latest version of PostgreSQL but is only tested with these PostgreSQL versions: -* PostgreSQL Version 11 -* PostgreSQL Version 12 -* Percona Distribution for PostgreSQL 11 and 12 +* PostgreSQL Version 11, 12 and 13 +* Percona Distribution for PostgreSQL 11, 12 and 13 # Documentation @@ -394,16 +393,61 @@ postgres=# select bucket, bucket_start_time, query from pg_stat_monitor; **`calls`**: Number of calls of that particular query. + +Example 1: Shows the userid, dbid, unique queryid hash, query and total number of calls or that query. + ``` -postgres=# select userid, dbid, queryid, query, calls from pg_stat_monitor; - userid | dbid | queryid | query | calls ---------+-------+------------------+--------------------------------------------------------------+------- - 10 | 12696 | 56F12CE7CD01CF2C | select * from pg_stat_monitor_reset() | 1 - 10 | 12696 | 748D9EC1F4CECB36 | select userid, dbid, queryid, query from pg_stat_monitor | 1 - 10 | 12696 | 85900141D214EC52 | select bucket, bucket_start_time, query from pg_stat_monitor | 2 - 10 | 12696 | F1AC132034D5B366 | SELECT * FROM foo | 1 +postgres=# select userid, dbid, queryid, substr(query,0, 50) as query, calls from pg_stat_monitor; + userid | dbid | queryid | query | calls +--------+-------+------------------+---------------------------------------------------+------- + 10 | 12709 | 214646CE6F9B1A85 | BEGIN | 1577 + 10 | 12709 | 8867FEEB8A5388AC | vacuum pgbench_branches | 1 + 10 | 12709 | F47D95C9DF863E43 | UPDATE pgbench_branches SET bbalance = bbalance + | 1577 + 10 | 12709 | 2FE0A6ABDC20623 | select substr(query,$1, $2) as query, cmd_type fr | 7 + 10 | 12709 | A83503D3E1F99139 | select userid, dbid, queryid, substr(query,$1, $ | 1 + 10 | 12709 | D4B1243AC3268B9B | select count(*) from pgbench_branches | 1 + 10 | 12709 | 2FE0A6ABDC20623 | select substr(query,$1, $2) as query, cmd_type fr | 1 + 10 | 12709 | 1D9BDBBCFB89F096 | UPDATE pgbench_accounts SET abalance = abalance + | 1577 + 10 | 12709 | 15343084284782B | update test SET a = $1 | 2 + 10 | 12709 | 939C2F56E1F6A174 | END | 1577 + 1 | 12709 | DAE6D269D27F2EC4 | SELECT FOR UPDATE test SET a = 1; | 1 + 10 | 12709 | 2B50C2406BFAC907 | INSERT INTO pgbench_history (tid, bid, aid, delta | 1577 + 10 | 12709 | F6DA9838660825CA | vacuum pgbench_tellers | 1 + 10 | 12709 | 3AFB8B2452721F9 | SELECT a from test for update | 1 + 10 | 12709 | A5CD0AF80D28363 | SELECT abalance FROM pgbench_accounts WHERE aid = | 1577 + 10 | 12709 | E445DD36B9189C53 | UPDATE pgbench_tellers SET tbalance = tbalance + | 1577 + 10 | 12709 | 4876BBA9A8FCFCF9 | truncate pgbench_history | 1 + 10 | 12709 | D3C2299FD9E7348C | select userid, dbid, queryid, query, calls from | 1 +(18 rows) ``` +Example 2: Shows the different username for the queries. + +``` +postgres=# select userid::regrole, datname, substr(query,0, 50) as query, calls from pg_stat_monitor, pg_database WHERE dbid = oid; + userid | datname | query | calls +----------+----------+---------------------------------------------------+------- + vagrant | postgres | select userid::regrole, datname, substr(query,$1, | 1 + vagrant | test_db | insert into bar values($1) | 1 + vagrant | postgres | insert into bar values($1) | 1 + vagrant | test_db | select * from bar | 1 + postgres | postgres | insert into bar values($1) | 1 +(5 rows) +``` + +Example 3: Shows the differen database involved in the queries. + +``` +postgres=# select userid::regrole, datname, substr(query,0, 50) as query, calls from pg_stat_monitor, pg_database WHERE dbid = oid; + userid | datname | query | calls +---------+----------+---------------------------------------------------+------- + vagrant | postgres | select userid::regrole, datname, substr(query,$1, | 0 + vagrant | test_db | insert into bar values($1) | 1 + vagrant | test_db | select * from bar | 1 +(3 rows) +``` + + ### Error Messages / Error Codes and Error Level **`elevel`**, **`sqlcode`**,**`message`**,: error level / sql code and log/warning/error message @@ -430,28 +474,34 @@ postgres=# select substr(query,0,50) as query, decode_error_level(elevel)as elev postgres=# select userid, total_time, min_time, max_time, mean_time, query from pg_stat_monitor; userid | total_time | min_time | max_time | mean_time | query --------+--------------------+--------------------+--------------------+--------------------+------------------------------------------------------------------ - 10 | 0.14| 0.14 | 0.14 | 0.14 | select * from pg_stat_monitor_reset() - 10 | 0.19 | 0.19 | 0.19 | 0.19 | select userid, dbid, queryid, query from pg_stat_monitor - 10 | 0.30 | 0.13 | 0.16 | 0.15 | select bucket, bucket_start_time, query from pg_stat_monitor - 10 | 0.29 | 0.29 | 0.29 | 0.29 | select userid, dbid, queryid, query, calls from pg_stat_monitor - 10 | 11277.79 | 11277.79 | 11277.79 | 11277.79| SELECT * FROM foo + 10 | 0.14 | 0.14 | 0.14 | 0.14 | select * from pg_stat_monitor_reset() + 10 | 0.19 | 0.19 | 0.19 | 0.19 | select userid, dbid, queryid, query from pg_stat_monitor + 10 | 0.30 | 0.13 | 0.16 | 0.15 | select bucket, bucket_start_time, query from pg_stat_monitor + 10 | 0.29 | 0.29 | 0.29 | 0.29 | select userid, dbid, queryid, query, calls from pg_stat_monitor + 10 | 11277.79 | 11277.79 | 11277.79 | 11277.79 | SELECT * FROM foo ``` -### Host / Client IP +### Client IP address **`client_ip`**: The IP address of the client that originated the query. ``` -postgres=# select client_ip, query from pg_stat_monitor; - client_ip | query ------------+--------------------------------------------------------------------------------------- - 127.0.0.1 | select * from pg_stat_monitor_reset() - 127.0.0.1 | select userid, dbid, queryid, query from pg_stat_monitor - 127.0.0.1 | select bucket, bucket_start_time, query from pg_stat_monitor - 127.0.0.1 | select userid, total_time, min_time, max_time, mean_time, query from pg_stat_monitor - 127.0.0.1 | select userid, dbid, queryid, query, calls from pg_stat_monitor - 127.0.0.1 | SELECT * FROM foo -(6 rows) +postgres=# select userid::regrole, datname, substr(query,0, 50) as query, calls,client_ip from pg_stat_monitor, pg_database WHERE dbid = oid; + userid | datname | query | calls | client_ip +---------+----------+---------------------------------------------------+-------+----------- + vagrant | postgres | UPDATE pgbench_branches SET bbalance = bbalance + | 1599 | 10.0.2.15 + vagrant | postgres | select userid::regrole, datname, substr(query,$1, | 5 | 10.0.2.15 + vagrant | postgres | UPDATE pgbench_accounts SET abalance = abalance + | 1599 | 10.0.2.15 + vagrant | postgres | select userid::regrole, datname, substr(query,$1, | 1 | 127.0.0.1 + vagrant | postgres | vacuum pgbench_tellers | 1 | 10.0.2.15 + vagrant | postgres | SELECT abalance FROM pgbench_accounts WHERE aid = | 1599 | 10.0.2.15 + vagrant | postgres | END | 1599 | 10.0.2.15 + vagrant | postgres | select count(*) from pgbench_branches | 1 | 10.0.2.15 + vagrant | postgres | BEGIN | 1599 | 10.0.2.15 + vagrant | postgres | INSERT INTO pgbench_history (tid, bid, aid, delta | 1599 | 10.0.2.15 + vagrant | postgres | vacuum pgbench_branches | 1 | 10.0.2.15 + vagrant | postgres | truncate pgbench_history | 1 | 10.0.2.15 + vagrant | postgres | UPDATE pgbench_tellers SET tbalance = tbalance + | 1599 | 10.0.2.15 ``` ### Call Timings Histogram @@ -489,24 +539,28 @@ postgres=# select tables_names, query from pg_stat_monitor; (8 rows) ``` -### Query command Type (SELECT, UPDATE, DELETE, UPDATE, TRUNCATE, NONE) +### Query command Type (SELECT, INSERT, UPDATE OR DELETE) **`cmd_type`**: List the command type of the query. ``` postgres=# select substr(query,0, 50) as query, cmd_type from pg_stat_monitor where elevel = 0; - query | cmd_type ----------------------------------------------------+-------------------------------------------------- - select substr(query,$1, $2) as query, cmd_type fr | {0," 0"," 0"," 1"," 0"," 0"," 0"," 0"," 0"," 1"} - vacuum pgbench_branches | {0," 0"," 0"," 1"," 0"," 0"," 0"," 0"," 0"," 0"} - vacuum analyze pgbench_branches | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - alter table pgbench_branches add primary key (bid | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - alter table pgbench_tellers add primary key (tid) | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - insert into pgbench_tellers(tid,bid,tbalance) val | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - UPDATE pgbench_accounts SET abalance = abalance + | {0," 1"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - insert into pgbench_tellers(tid,bid,tbalance) val | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - insert into pgbench_branches(bid,bbalance) values | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - truncate table pgbench_accounts, pgbench_branches | {0," 0"," 0"," 1"," 0"," 0"," 0"," 0"," 0"," 0"} - vacuum analyze pgbench_accounts | {1," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"," 0"} - create table pgbench_history(tid int,bid int,aid | {0," 0"," 0"," 1"," 0"," 0"," 0"," 0"," 0"," 0"} + query | cmd_type +---------------------------------------------------+----------------- + BEGIN | {INSERT} + vacuum pgbench_branches | {} + UPDATE pgbench_branches SET bbalance = bbalance + | {UPDATE,SELECT} + select substr(query,$1, $2) as query, cmd_type fr | {SELECT} + select count(*) from pgbench_branches | {SELECT} + select substr(query,$1, $2) as query, cmd_type fr | {} + UPDATE pgbench_accounts SET abalance = abalance + | {UPDATE,SELECT} + update test SET a = $1 | {UPDATE} + END | {INSERT} + INSERT INTO pgbench_history (tid, bid, aid, delta | {INSERT} + vacuum pgbench_tellers | {} + SELECT a from test for update | {UPDATE,SELECT} + SELECT abalance FROM pgbench_accounts WHERE aid = | {SELECT} + UPDATE pgbench_tellers SET tbalance = tbalance + | {UPDATE,SELECT} + truncate pgbench_history | {} +(15 rows) ```