- Notifications
You must be signed in to change notification settings - Fork38
Sampling based statistics of wait events
License
postgrespro/pg_wait_sampling
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PostgreSQL 9.6+ provides an information about current wait event of particularprocess. However, in order to gather descriptive statistics of serverbehavior user have to sample current wait event multiple times.pg_wait_sampling is an extension for collecting sampling statistics of waitevents.
The module must be loaded by adding pg_wait_sampling toshared_preload_libraries in postgresql.conf, because it requires additionalshared memory and launches background worker. This means that a server restartis needed to add or remove the module.
When pg_wait_sampling is enabled, it collects two kinds of statistics.
- History of waits events. It's implemented as in-memory ring buffer wheresamples of each process wait events are written with given (configurable)period. Therefore, for each running process user can see some number ofrecent samples depending on history size (configurable). Assuming there isa client who periodically read this history and dump it somewhere, usercan have continuous history.
- Waits profile. It's implemented as in-memory hash table where countof samples are accumulated per each process and each wait event. This hashtable can be reset by user request. Assuming there is a client whoperiodically dumps profile and resets it, user can have statistics ofintensivity of wait events among time.
pg_wait_sampling launches special background worker for gathering thestatistics above.
- Alexander Korotkova.korotkov@postgrespro.ru, Postgres Professional,Moscow, Russia
pg_wait_sampling is realized as an extension and not available in defaultPostgreSQL installation. It is available fromgithubunder the same license asPostgreSQLand supports PostgreSQL 9.6+.
pg_wait_sampling is PostgreSQL extension which requires PostgreSQL 9.6 orhigher. Before build and install you should ensure following:
- PostgreSQL version is 9.6 or higher.
- You have development package of PostgreSQL installed or you builtPostgreSQL from source.
- Your PATH variable is configured so that pg_config command available, orset PG_CONFIG variable.
Typical installation procedure may look like this:
$ git clone https://github.com/postgrespro/pg_wait_sampling.git$ cd pg_wait_sampling$ make USE_PGXS=1$ sudo make USE_PGXS=1 install$ make USE_PGXS=1 installcheck$ psql DB -c "CREATE EXTENSION pg_wait_sampling;"
pg_wait_sampling interacts with user by set of views and functions.
pg_wait_sampling_current view – information about current wait events forall processed including background workers.
Column name | Column type | Description |
---|---|---|
pid | int4 | Id of process |
event_type | text | Name of wait event type |
event | text | Name of wait event |
pg_wait_sampling_get_current(pid int4) returns the same table for single givenprocess.
pg_wait_sampling_history view – history of wait events obtained by sampling intoin-memory ring buffer.
Column name | Column type | Description |
---|---|---|
pid | int4 | Id of process |
ts | timestamptz | Sample timestamp |
event_type | text | Name of wait event type |
event | text | Name of wait event |
pg_wait_sampling_profile view – profile of wait events obtained by sampling intoin-memory hash table.
Column name | Column type | Description |
---|---|---|
pid | int4 | Id of process |
event_type | text | Name of wait event type |
event | text | Name of wait event |
count | text | Count of samples |
pg_wait_sampling_reset_profile() function resets the profile.
The work of wait event statistics collector worker is controlled by followingGUCs.
Parameter name | Data type | Description | Default value |
---|---|---|---|
pg_wait_sampling.history_size | int4 | Size of history in-memory ring buffer | 5000 |
pg_wait_sampling.history_period | int4 | Period for history sampling in milliseconds | 10 |
pg_wait_sampling.profile_period | int4 | Period for profile sampling in milliseconds | 10 |
pg_wait_sampling.profile_pid | bool | Whether profile should be per pid | true |
If pg_wait_sampling.profile_pid is set to false, sampling profile wouldn't becollected in per-process manner. In this case the value of pid could wouldbe always zero and corresponding row contain samples among all the processes.
These GUCs are allowed to be changed by superuser. Also, they are placed intoshared memory. Thus, they could be changed from any backend and affects workerruntime.
SeePostgreSQL documentationfor list of possible wait events.
Please, notice, that pg_wait_sampling is still under development and whileit's stable and tested, it may contains some bugs. Don't hesitate to raiseissues at github withyour bug reports.
If you're lacking of some functionality in pg_wait_sampling and feeling powerto implement it then you're welcome to make pull requests.
About
Sampling based statistics of wait events
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.