NOTE: The latest stable releases can be found underneath Releases.
The pg_stat_monitor
is a Query Performance Monitoring tool for PostgreSQL. It attempts to provide a more holistic picture by providing much-needed query performance insights in a single view.
pg_stat_monitor
provides improved insights that allow database users to understand query origins, execution, planning statistics and details, query information, and metadata. This significantly improves observability, enabling users to debug and tune query performance. pg_stat_monitor
is developed on the basis of pg_stat_statements
as its more advanced replacement.
While pg_stat_statements
provides ever-increasing metrics, pg_stat_monitor
aggregates the collected data, saving user efforts for doing it themselves. pg_stat_monitor
stores statistics in configurable time-based units – buckets. This allows focusing on statistics generated for shorter time periods and makes query timing information such as max/min/mean time more accurate.
NOTE: Because of these differences in data processing, memory blocks and WAL (Write Ahead Logs) related statistics data are displayed inconsistently when both
pg_stat_monitor
andpg_stat_statements
are used together.
To learn about other features, available in pg_stat_monitor
, see the Features section and the User Guide.
pg_stat_monitor
supports PostgreSQL versions 11 and above. It is compatible with both PostgreSQL provided by PostgreSQL Global Development Group (PGDG) and Percona Distribution for PostgreSQL.
The RPM
(for RHEL and CentOS) and the DEB
(for Debian and Ubuntu) packages are available from Percona repositories for PostgreSQL versions 12, 13, 14, 15, 16 and 17.
The RPM packages are also available in the official PostgreSQL (PGDG) yum repositories.
The pg_stat_monitor
should work on the latest version of both Percona Distribution for PostgreSQL and PostgreSQL, but is only tested with these versions:
Distribution | Version | Provider |
---|---|---|
Percona Distribution for PostgreSQL | 12, 13, 14, 15, 16 and 17 | Percona |
PostgreSQL | 12, 13, 14, 15, 16 and 17 | PostgreSQL Global Development Group (PGDG) |
pg_stat_monitor
simplifies query observability by providing a more holistic view of query from performance, application and analysis perspectives. This is achieved by grouping data in configurable time buckets that allow capturing of load and performance information for smaller time windows. So performance issues and patterns can be identified based on time and workload.
pg_stat_monitor
computes stats for a configured number of time intervals - time buckets. This allows for much better data accuracy, especially in the case of high resolution or unreliable networks.pg_stat_statements
groups counters by userid, dbid, queryid, pg_stat_monitor
uses a more detailed group for higher precision. This allows a user to drill down into the performance of queries.pg_stat_monitor
allows you to choose if you want to see queries with placeholders for parameters or actual parameter data. This simplifies debugging and analysis processes by enabling users to execute the same query.pg_stat_statements
.The following are useful links in pg_stat_monitor
documentation:
pg_stat_monitor
and pg_stat_statements
The PostgreSQL YUM repository supports pg_stat_monitor
for all supported versions for the following platforms:
Find the list of supported platforms for pg_stat_monitor
within Percona Distribution for PostgreSQL on the Percona Release Lifecycle Overview page.
You can install pg_stat_monitor
from the following sources:
To install pg_stat_monitor
from Percona repositories, you need to use the percona-release
repository management tool.
percona-release setup ppg-XX
Replace XX with the desired PostgreSQL version. For example, to install pg_stat_monitor
for PostgreSQL 17, specify ppg-17
.
pg_stat_monitor
package
apt-get install percona-pg-stat-monitor17
yum install percona-pg-stat-monitor17
yum
repositoriesInstall the PostgreSQL repositories following the instructions in the Linux downloads (Red Hat family) chapter in PostgreSQL documentation.
Install pg_stat_monitor
:
dnf install -y pg_stat_monitor_<VERSION>
Replace the VERSION
variable with the PostgreSQL version you are using (e.g. specify pg_stat_monitor_17
for PostgreSQL 17)
You can install pg_stat_monitor
from PGXN (PostgreSQL Extensions Network) using the PGXN client.
Use the following command:
pgxn install pg_stat_monitor
You can install pg_stat_monitor
from Trunk (A PostgreSQL Extensions Registry) using the Trunk CLI.
Use the following command:
trunk install pg_stat_monitor
You can find the configuration parameters of the pg_stat_monitor
extension in the pg_settings
view. To change the default configuration, specify new values for the desired parameters using the GUC (Grant Unified Configuration) system. To learn more, refer to the Configuration parameters section of the documentation.
You can enable pg_stat_monitor
when your postgresql
instance is not running.
pg_stat_monitor
needs to be loaded at the start time. The extension requires additional shared memory; therefore, add the pg_stat_monitor
value for the shared_preload_libraries
parameter and restart the postgresql
instance.
Use the ALTER SYSTEMcommand from psql
terminal to modify the shared_preload_libraries
parameter.
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_monitor';
NOTE: If you’ve added other modules to the
shared_preload_libraries
parameter (for example,pg_stat_statements
), list all of them separated by commas for theALTER SYSTEM
command.:warning: For PostgreSQL 13 and earlier versions,
pg_stat_monitor
must followpg_stat_statements
. For example,ALTER SYSTEM SET shared_preload_libraries = 'foo, pg_stat_statements, pg_stat_monitor'
.In PostgreSQL 14, you can specify
pg_stat_statements
andpg_stat_monitor
in any order. However, due to the extensions' architecture, if bothpg_stat_statements
andpg_stat_monitor
are loaded, only the last listed extension captures utility queries, CREATE TABLE, Analyze, etc. The first listed extension captures most common queries like SELECT, UPDATE, INSERT, but does not capture utility queries.Thus, to collect the whole statistics with pg_stat_monitor, we recommend to specify the extensions as follows: ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements, pg_stat_monitor'.
Start or restart the postgresql
instance to apply the changes.
sudo systemctl restart postgresql.service
sudo systemctl restart postgresql-17
Create the extension using the CREATE EXTENSION command. Using this command requires the privileges of a superuser or a database owner. Connect to psql
as a superuser for a database and run the following command:
CREATE EXTENSION pg_stat_monitor;
This allows you to see the stats collected by pg_stat_monitor
.
By default, pg_stat_monitor
is created for the postgres
database. To access the statistics from other databases, you need to create the extension for every database.
-- Select some of the query information, like client_ip, username and application_name etc.
postgres=# SELECT application_name, userid AS user_name, datname AS database_name, substr(query,0, 50) AS query, calls, client_ip
FROM pg_stat_monitor;
application_name | user_name | database_name | query | calls | client_ip
------------------+-----------+---------------+---------------------------------------------------+-------+-----------
psql | vagrant | postgres | SELECT application_name, userid::regrole AS user_ | 1 | 127.0.0.1
psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 3 | 127.0.0.1
psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 1 | 127.0.0.1
psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 8 | 127.0.0.1
psql | vagrant | postgres | SELECT bucket, substr(query,$1, $2) AS query, cmd | 1 | 127.0.0.1
(5 rows)
To learn more about pg_stat_monitor
features and usage, see the User Guide. To view all other data elements provided by pg_stat_monitor
, please see the reference.
To build pg_stat_monitor
from source code, you require the following:
You can download the source code of the latest release of pg_stat_monitor
from the releases page on GitHub or using 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
pg_stat_monitor
To uninstall pg_stat_monitor
, do the following:
Drop pg_stat_monitor
extension:
DROP EXTENSION pg_stat_monitor;
Remove pg_stat_monitor
from the shared_preload_libraries
configuration parameter:
ALTER SYSTEM SET shared_preload_libraries = '';
Important: If the shared_preload_libraries
parameter includes other modules, specify them all for the ALTER SYSTEM SET
command to keep using them.
Restart the postgresql
instance to apply the changes. The following command restarts PostgreSQL 17. Replace the version value with the one you are using.
sudo systemctl restart postgresql.service
sudo systemctl restart postgresql-17
We follow the OneFlow git branching scheme to maintain the ongoing development and stable releases.
The concept of the OneFlow model is, that we do have a single long-lived branch which simplifies the versioning scheme and day-to-day operations that we have to perform.
What branches do exist?
$ git checkout -b feature/my-feature main
$ git checkout -b release/1.1.0 8330ecd
$ git checkout -b hotfix/1.0.2 1.0.1
We welcome and strongly encourage community participation and contributions, and are always looking for new members that are as dedicated to serving the community as we are.
The Contributing Guide contains the guidelines on how you can contribute.
If you would like to suggest a new feature / an improvement or you found a bug in pg_stat_monitor
, please submit the report to the Percona Jira issue tracker.
Refer to the Submit a bug report or a feature request section for bug reporting guidelines.
We welcome your feedback on your experience with pg_stat_monitor
. Join our technical forum for help with pg_stat_monitor
.
This project is licensed under the same open liberal terms and conditions as the PostgreSQL project itself. Please refer to the LICENSE file for more details.