|
||
---|---|---|
docs | ||
expected | ||
percona-packaging | ||
sql | ||
.gitignore | ||
LICENSE | ||
Makefile | ||
README.md | ||
guc.c | ||
hash_query.c | ||
pg_stat_monitor--1.0.sql | ||
pg_stat_monitor.c | ||
pg_stat_monitor.conf | ||
pg_stat_monitor.control | ||
pg_stat_monitor.h |
README.md
What is pg_stat_monitor?
The pg_stat_monitor is the statistics collection tool based on PostgreSQL's contrib module pg_stat_statements
. PostgreSQL’s pg_stat_statements provides the basic statistics, which is sometimes not enough. The major shortcoming in pg_stat_statements is that it accumulates all the queries and their statistics and does not provide aggregated statistics nor histogram information. In this case, a user needs to calculate the aggregate which is quite expensive. pg_stat_monitor
is developed on the basis of pg_stat_statements as its more advanced replacement. It provides all the features of pg_stat_statements plus its own feature set.
Documentation
Supported PostgreSQL Versions
The pg_stat_monitor
should work on the latest version of PostgreSQL but is only tested with these PostgreSQL versions:
Distribution | Version | Supported |
---|---|---|
PostgreSQL | Version < 11 | ❌ |
PostgreSQL | Version 11 | ✔️ |
PostgreSQL | Version 12 | ✔️ |
PostgreSQL | Version 13 | ✔️ |
Percona Distribution | Version < 11 | ❌ |
Percona Distribution | Version 11 | ✔️ |
Percona Distribution | Version 12 | ✔️ |
Percona Distribution | Version 13 | ✔️ |
Installation
pg_stat_monitor is supplied as part of Percona Distribution for PostgreSQL. The rpm/deb packages are available from Percona repositories. Refer to Percona Documentation for installation instructions.
The source code of latest release of pg_stat_monitor
can be downloaded from this GitHub page or it can be downloaded using the git:
git clone git://github.com/Percona/pg_stat_monitor.git
Compile and Install the extension
cd pg_stat_monitor
make USE_PGXS=1
make USE_PGXS=1 install
Setup
pg_stat_monitor
cannot be installed in your running PostgreSQL instance. It should be set in the postgresql.conf
file.
# - Shared Library Preloading -
shared_preload_libraries = 'pg_stat_monitor' # (change requires restart)
#local_preload_libraries = ''
#session_preload_libraries = ''
Or you can do from psql
terminal using the alter system
command.
pg_stat_monitor
needs to be loaded at the start time. This requires adding the pg_stat_monitor
extension for the shared_preload_libraries
parameter and restart the PostgreSQL instance.
postgres=# ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_monitor';
ALTER SYSTEM
sudo systemctl restart postgresql-13
Create the extension using the CREATE EXTENSION
command.
CREATE EXTENSION pg_stat_monitor;
CREATE EXTENSION
SELECT application_name, userid::regrole AS user_name, datname AS database_name, substr(query,0, 50) AS query, calls, client_ip
FROM pg_stat_monitor, pg_database
WHERE dbid = oid;
application_name | user_name | database_name | query | calls | client_ip
-------------------+-----------+---------------+---------------------------------------------------+-------+-----------
psql | vagrant | postgres | SELECT elevel, sqlcode, message from pg_stat_moni | 1 | 127.0.0.1
psql | vagrant | postgres | SELECT c.relchecks, c.relkind, c.relhasindex, c.r | 1 | 127.0.0.1
pg_cron scheduler | vagrant | postgres | update cron.job_run_details set status = $1, retu | 1 | 127.0.0.1
pgbench | vagrant | postgres | vacuum analyze pgbench_accounts | 1 | 10.0.2.15
pgbench | vagrant | postgres | alter table pgbench_branches add primary key (bid | 1 | 10.0.2.15
psql | vagrant | postgres | SELECT pg_catalog.quote_ident(c.relname) FROM pg_ | 1 | 127.0.0.1
psql | vagrant | postgres | SELECT decode_error_level(elevel), sqlcode, messa | 2 | 127.0.0.1
(37 rows)
SELECT decode_error_level(elevel) AS elevel, sqlcode, message
FROM pg_stat_monitor
WHERE elevel != 0;
elevel. | sqlcode | message
--------------------+---------+------------------------------------------------
ERROR | 132 | permission denied for table pgbench_branches
ERROR | 130 | division by zero
ERROR | 132 | function decode_elevel(integer) does not exist
ERROR | 132 | must be owner of table pgbench_accounts
(4 rows)
Copyright Notice
Copyright (c) 2006 - 2020, Percona LLC.