pg_stat_monitor/README.md

103 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## What is pg_stat_monitor?
The pg_stat_monitor is the statistics collection tool based on PostgreSQL's contrib module ``pg_stat_statements``. PostgreSQLs 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
1. [Supported PostgreSQL Versions](#supported-postgresql-versions)
2. [Installation](#installation)
3. [Setup](#setup)
4. [User Guide](https://github.com/percona/pg_stat_monitor/blob/master/docs/USER_GUIDE.md)
6. [Release Notes](https://github.com/percona/pg_stat_monitor/blob/master/docs/RELEASE_NOTES.md)
7. [License](https://github.com/percona/pg_stat_monitor/blob/master/LICENSE)
8. [Copyright Notice](#copyright-notice)
## 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 | :x: |
| PostgreSQL | Version 11 | :heavy_check_mark: |
| PostgreSQL | Version 12 | :heavy_check_mark: |
| PostgreSQL | Version 13 | :heavy_check_mark: |
| Percona Distribution | Version < 11 | :x: |
| Percona Distribution | Version 11 | :heavy_check_mark: |
| Percona Distribution | Version 12 | :heavy_check_mark: |
| Percona Distribution | Version 13 | :heavy_check_mark: |
## 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](https://www.percona.com/doc/postgresql/LATEST/installing.html) for installation instructions.
The source code of latest release of ``pg_stat_monitor`` can be downloaded from [this GitHub page](https://github.com/Percona/pg_stat_monitor/releases) or it can be downloaded using the git:
```sh
git clone git://github.com/Percona/pg_stat_monitor.git
```
Compile and Install the extension
```sh
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.
```sql
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.
```sql
postgres=# CREATE EXTENSION pg_stat_monitor;
CREATE EXTENSION
```
```sql
postgres=# 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)
```
```sql
postgres=# 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.