qos
qos
pg_qos : QoS resource governor extension for PostgreSQL sessions and queries
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 5240 | qos | pg_qos | 1.0 | ADMIN | GPL-3.0 | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd-- | No | Yes | Yes | Yes | no | no |
| Relationships | |
|---|---|
| See Also | prioritize pg_permissions pg_readonly pg_crash pg_cooldown pg_rewrite pg_repack pgfincore |
requires shared_preload_libraries = ‘qos’; official support PG15+
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0 | 18 17 16 15 14 | pg_qos | - |
| RPM | PIGSTY | 1.0.0 | 18 17 16 15 14 | pg_qos_$v | - |
| DEB | PIGSTY | 1.0.0 | 18 17 16 15 14 | postgresql-$v-qos | - |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
el8.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
el9.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
el9.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
el10.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
el10.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
d12.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
d12.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
d13.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
d13.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
u22.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
u22.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
u24.x86_64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
u24.aarch64 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | PIGSTY 1.0.0 | MISS |
Source
pig build pkg pg_qos; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall this extension with pig:
pig install pg_qos; # install via package name, for the active PG version
pig install qos; # install by extension name, for the current active PG version
pig install qos -v 18; # install for PG 18
pig install qos -v 17; # install for PG 17
pig install qos -v 16; # install for PG 16
pig install qos -v 15; # install for PG 15Config this extension to shared_preload_libraries:
shared_preload_libraries = 'qos';Create this extension with:
CREATE EXTENSION qos;Usage
qos: QoS resource governor extension for PostgreSQL sessions and queries
The qos extension provides Quality of Service resource governance for PostgreSQL, allowing administrators to set per-role and per-database limits on memory usage, CPU cores, and concurrent transactions/statements.
Configuration Parameters
| Parameter | Type | Description |
|---|---|---|
qos.work_mem_limit | bytes | Maximum effective work_mem per session |
qos.cpu_core_limit | integer | Maximum CPU cores available to a session |
qos.max_concurrent_tx | integer | Maximum concurrent transactions |
qos.max_concurrent_select | integer | Maximum concurrent SELECT statements |
qos.max_concurrent_update | integer | Maximum concurrent UPDATE statements |
qos.max_concurrent_delete | integer | Maximum concurrent DELETE statements |
qos.max_concurrent_insert | integer | Maximum concurrent INSERT statements |
Per-Role Limits
ALTER ROLE app_user SET qos.work_mem_limit = '32MB';
ALTER ROLE app_user SET qos.cpu_core_limit = '2';
ALTER ROLE app_user SET qos.max_concurrent_select = '100';Per-Database Limits
ALTER DATABASE appdb SET qos.max_concurrent_tx = '200';Combined Role + Database Limits
ALTER ROLE app_user IN DATABASE appdb SET qos.work_mem_limit = '4MB';
ALTER ROLE app_user IN DATABASE appdb SET qos.max_concurrent_update = '10';Enforcement Behavior
- Work memory: Intercepts
SET work_memand rejects values exceeding configured limits - CPU limiting (Linux only): Binds backend to N CPU cores via CPU affinity; on non-Linux platforms, limits parallel workers instead
- Concurrency: Executor hooks track active transactions/statements by type; violations block execution
Observability
SET client_min_messages = 'debug1'; -- enable debug output for QoS eventsThe most restrictive combination of role-level and database-level settings takes effect. Requires shared_preload_libraries = 'qos' and PostgreSQL 15+.
Last updated on