qos

pg_qos : QoS resource governor extension for PostgreSQL sessions and queries

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
5240
qos
pg_qos
1.0
ADMIN
GPL-3.0
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--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

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
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 / PGPG18PG17PG16PG15PG14
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/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install 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 15

Config 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

ParameterTypeDescription
qos.work_mem_limitbytesMaximum effective work_mem per session
qos.cpu_core_limitintegerMaximum CPU cores available to a session
qos.max_concurrent_txintegerMaximum concurrent transactions
qos.max_concurrent_selectintegerMaximum concurrent SELECT statements
qos.max_concurrent_updateintegerMaximum concurrent UPDATE statements
qos.max_concurrent_deleteintegerMaximum concurrent DELETE statements
qos.max_concurrent_insertintegerMaximum 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_mem and 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 events

The most restrictive combination of role-level and database-level settings takes effect. Requires shared_preload_libraries = 'qos' and PostgreSQL 15+.

Last updated on