跳转到主要内容

qos

QoS resource governor extension for PostgreSQL sessions and queries

pg_qos : QoS resource governor extension for PostgreSQL sessions and queries

Overview

ID Extension Package Version Category License Language
5240 qos pg_qos 1.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
Upstream PG15-18; RPM also carries PG14. Requires preload.

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT PIGSTY 1.1.0 18 17 16 15 14 pg_qos -
RPM PIGSTY 1.1.0 18 17 16 15 14 pg_qos_$v -
DEB PIGSTY 1.1.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 N/A
el8.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
el9.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
el9.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
el10.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
el10.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
d12.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
d12.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
d13.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
d13.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u22.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u22.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u24.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u24.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u26.x86_64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
u26.aarch64 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 PIGSTY 1.0.0 N/A
Package Version OS ORG SIZE File URL
pg_qos_18 1.0.0 el8.x86_64 pigsty 29.2 KiB pg_qos_18-1.0.0-1PIGSTY.el8.x86_64.rpm
pg_qos_18 1.0.0 el8.aarch64 pigsty 29.0 KiB pg_qos_18-1.0.0-1PIGSTY.el8.aarch64.rpm
pg_qos_18 1.0.0 el9.x86_64 pigsty 28.3 KiB pg_qos_18-1.0.0-1PIGSTY.el9.x86_64.rpm
pg_qos_18 1.0.0 el9.aarch64 pigsty 28.3 KiB pg_qos_18-1.0.0-1PIGSTY.el9.aarch64.rpm
pg_qos_18 1.0.0 el10.x86_64 pigsty 28.7 KiB pg_qos_18-1.0.0-1PIGSTY.el10.x86_64.rpm
pg_qos_18 1.0.0 el10.aarch64 pigsty 28.6 KiB pg_qos_18-1.0.0-1PIGSTY.el10.aarch64.rpm
postgresql-18-qos 1.0.0 d12.x86_64 pigsty 69.3 KiB postgresql-18-qos_1.0.0-1PIGSTY~bookworm_amd64.deb
postgresql-18-qos 1.0.0 d12.aarch64 pigsty 68.5 KiB postgresql-18-qos_1.0.0-1PIGSTY~bookworm_arm64.deb
postgresql-18-qos 1.0.0 d13.x86_64 pigsty 69.6 KiB postgresql-18-qos_1.0.0-1PIGSTY~trixie_amd64.deb
postgresql-18-qos 1.0.0 d13.aarch64 pigsty 68.6 KiB postgresql-18-qos_1.0.0-1PIGSTY~trixie_arm64.deb
postgresql-18-qos 1.0.0 u22.x86_64 pigsty 73.7 KiB postgresql-18-qos_1.0.0-1PIGSTY~jammy_amd64.deb
postgresql-18-qos 1.0.0 u22.aarch64 pigsty 73.1 KiB postgresql-18-qos_1.0.0-1PIGSTY~jammy_arm64.deb
postgresql-18-qos 1.0.0 u24.x86_64 pigsty 71.7 KiB postgresql-18-qos_1.0.0-1PIGSTY~noble_amd64.deb
postgresql-18-qos 1.0.0 u24.aarch64 pigsty 71.4 KiB postgresql-18-qos_1.0.0-1PIGSTY~noble_arm64.deb
postgresql-18-qos 1.0.0 u26.x86_64 pigsty 71.8 KiB postgresql-18-qos_1.0.0-1PIGSTY~resolute_amd64.deb
postgresql-18-qos 1.0.0 u26.aarch64 pigsty 71.4 KiB postgresql-18-qos_1.0.0-1PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_qos_17 1.0.0 el8.x86_64 pigsty 29.2 KiB pg_qos_17-1.0.0-1PIGSTY.el8.x86_64.rpm
pg_qos_17 1.0.0 el8.aarch64 pigsty 29.0 KiB pg_qos_17-1.0.0-1PIGSTY.el8.aarch64.rpm
pg_qos_17 1.0.0 el9.x86_64 pigsty 28.5 KiB pg_qos_17-1.0.0-1PIGSTY.el9.x86_64.rpm
pg_qos_17 1.0.0 el9.aarch64 pigsty 28.5 KiB pg_qos_17-1.0.0-1PIGSTY.el9.aarch64.rpm
pg_qos_17 1.0.0 el10.x86_64 pigsty 28.9 KiB pg_qos_17-1.0.0-1PIGSTY.el10.x86_64.rpm
pg_qos_17 1.0.0 el10.aarch64 pigsty 28.8 KiB pg_qos_17-1.0.0-1PIGSTY.el10.aarch64.rpm
postgresql-17-qos 1.0.0 d12.x86_64 pigsty 69.3 KiB postgresql-17-qos_1.0.0-1PIGSTY~bookworm_amd64.deb
postgresql-17-qos 1.0.0 d12.aarch64 pigsty 68.6 KiB postgresql-17-qos_1.0.0-1PIGSTY~bookworm_arm64.deb
postgresql-17-qos 1.0.0 d13.x86_64 pigsty 69.6 KiB postgresql-17-qos_1.0.0-1PIGSTY~trixie_amd64.deb
postgresql-17-qos 1.0.0 d13.aarch64 pigsty 68.7 KiB postgresql-17-qos_1.0.0-1PIGSTY~trixie_arm64.deb
postgresql-17-qos 1.0.0 u22.x86_64 pigsty 81.3 KiB postgresql-17-qos_1.0.0-1PIGSTY~jammy_amd64.deb
postgresql-17-qos 1.0.0 u22.aarch64 pigsty 80.9 KiB postgresql-17-qos_1.0.0-1PIGSTY~jammy_arm64.deb
postgresql-17-qos 1.0.0 u24.x86_64 pigsty 71.9 KiB postgresql-17-qos_1.0.0-1PIGSTY~noble_amd64.deb
postgresql-17-qos 1.0.0 u24.aarch64 pigsty 71.5 KiB postgresql-17-qos_1.0.0-1PIGSTY~noble_arm64.deb
postgresql-17-qos 1.0.0 u26.x86_64 pigsty 72.0 KiB postgresql-17-qos_1.0.0-1PIGSTY~resolute_amd64.deb
postgresql-17-qos 1.0.0 u26.aarch64 pigsty 71.6 KiB postgresql-17-qos_1.0.0-1PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_qos_16 1.0.0 el8.x86_64 pigsty 29.2 KiB pg_qos_16-1.0.0-1PIGSTY.el8.x86_64.rpm
pg_qos_16 1.0.0 el8.aarch64 pigsty 28.9 KiB pg_qos_16-1.0.0-1PIGSTY.el8.aarch64.rpm
pg_qos_16 1.0.0 el9.x86_64 pigsty 28.4 KiB pg_qos_16-1.0.0-1PIGSTY.el9.x86_64.rpm
pg_qos_16 1.0.0 el9.aarch64 pigsty 28.4 KiB pg_qos_16-1.0.0-1PIGSTY.el9.aarch64.rpm
pg_qos_16 1.0.0 el10.x86_64 pigsty 28.8 KiB pg_qos_16-1.0.0-1PIGSTY.el10.x86_64.rpm
pg_qos_16 1.0.0 el10.aarch64 pigsty 28.7 KiB pg_qos_16-1.0.0-1PIGSTY.el10.aarch64.rpm
postgresql-16-qos 1.0.0 d12.x86_64 pigsty 69.2 KiB postgresql-16-qos_1.0.0-1PIGSTY~bookworm_amd64.deb
postgresql-16-qos 1.0.0 d12.aarch64 pigsty 68.3 KiB postgresql-16-qos_1.0.0-1PIGSTY~bookworm_arm64.deb
postgresql-16-qos 1.0.0 d13.x86_64 pigsty 69.5 KiB postgresql-16-qos_1.0.0-1PIGSTY~trixie_amd64.deb
postgresql-16-qos 1.0.0 d13.aarch64 pigsty 68.4 KiB postgresql-16-qos_1.0.0-1PIGSTY~trixie_arm64.deb
postgresql-16-qos 1.0.0 u22.x86_64 pigsty 79.9 KiB postgresql-16-qos_1.0.0-1PIGSTY~jammy_amd64.deb
postgresql-16-qos 1.0.0 u22.aarch64 pigsty 79.5 KiB postgresql-16-qos_1.0.0-1PIGSTY~jammy_arm64.deb
postgresql-16-qos 1.0.0 u24.x86_64 pigsty 71.8 KiB postgresql-16-qos_1.0.0-1PIGSTY~noble_amd64.deb
postgresql-16-qos 1.0.0 u24.aarch64 pigsty 71.3 KiB postgresql-16-qos_1.0.0-1PIGSTY~noble_arm64.deb
postgresql-16-qos 1.0.0 u26.x86_64 pigsty 71.9 KiB postgresql-16-qos_1.0.0-1PIGSTY~resolute_amd64.deb
postgresql-16-qos 1.0.0 u26.aarch64 pigsty 71.4 KiB postgresql-16-qos_1.0.0-1PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_qos_15 1.0.0 el8.x86_64 pigsty 29.5 KiB pg_qos_15-1.0.0-1PIGSTY.el8.x86_64.rpm
pg_qos_15 1.0.0 el8.aarch64 pigsty 29.3 KiB pg_qos_15-1.0.0-1PIGSTY.el8.aarch64.rpm
pg_qos_15 1.0.0 el9.x86_64 pigsty 29.2 KiB pg_qos_15-1.0.0-1PIGSTY.el9.x86_64.rpm
pg_qos_15 1.0.0 el9.aarch64 pigsty 29.3 KiB pg_qos_15-1.0.0-1PIGSTY.el9.aarch64.rpm
pg_qos_15 1.0.0 el10.x86_64 pigsty 29.6 KiB pg_qos_15-1.0.0-1PIGSTY.el10.x86_64.rpm
pg_qos_15 1.0.0 el10.aarch64 pigsty 29.5 KiB pg_qos_15-1.0.0-1PIGSTY.el10.aarch64.rpm
postgresql-15-qos 1.0.0 d12.x86_64 pigsty 69.4 KiB postgresql-15-qos_1.0.0-1PIGSTY~bookworm_amd64.deb
postgresql-15-qos 1.0.0 d12.aarch64 pigsty 68.4 KiB postgresql-15-qos_1.0.0-1PIGSTY~bookworm_arm64.deb
postgresql-15-qos 1.0.0 d13.x86_64 pigsty 69.4 KiB postgresql-15-qos_1.0.0-1PIGSTY~trixie_amd64.deb
postgresql-15-qos 1.0.0 d13.aarch64 pigsty 68.5 KiB postgresql-15-qos_1.0.0-1PIGSTY~trixie_arm64.deb
postgresql-15-qos 1.0.0 u22.x86_64 pigsty 80.0 KiB postgresql-15-qos_1.0.0-1PIGSTY~jammy_amd64.deb
postgresql-15-qos 1.0.0 u22.aarch64 pigsty 80.0 KiB postgresql-15-qos_1.0.0-1PIGSTY~jammy_arm64.deb
postgresql-15-qos 1.0.0 u24.x86_64 pigsty 72.0 KiB postgresql-15-qos_1.0.0-1PIGSTY~noble_amd64.deb
postgresql-15-qos 1.0.0 u24.aarch64 pigsty 71.9 KiB postgresql-15-qos_1.0.0-1PIGSTY~noble_arm64.deb
postgresql-15-qos 1.0.0 u26.x86_64 pigsty 71.8 KiB postgresql-15-qos_1.0.0-1PIGSTY~resolute_amd64.deb
postgresql-15-qos 1.0.0 u26.aarch64 pigsty 71.5 KiB postgresql-15-qos_1.0.0-1PIGSTY~resolute_arm64.deb

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

Sources:

qos 1.1 (distribution 1.1.0) applies per-role and per-database resource limits on PostgreSQL 15+. Merge qos into shared_preload_libraries and restart before creating its SQL objects as an administrator. CPU affinity limits require Linux.

Configure Limits

CREATE EXTENSION qos;
ALTER ROLE app_user SET qos.work_mem_limit = '32MB';
ALTER ROLE app_user SET qos.max_concurrent_select = '100';
ALTER ROLE app_user SET qos.max_select_rate = '10/500ms';
SELECT * FROM qos_stat_rate;

Limit Semantics

qos.work_mem_limit caps effective work memory; qos.cpu_core_limit controls CPU affinity on Linux and limits parallel workers on other platforms. qos.max_concurrent_tx, qos.max_concurrent_select, qos.max_concurrent_update, qos.max_concurrent_delete and qos.max_concurrent_insert cap concurrent operations.

qos.max_tx_rate, qos.max_select_rate, qos.max_update_rate, qos.max_delete_rate and qos.max_insert_rate use count/window pairs such as 100/1s. The default -1 disables each rate limit. Windows range from 100 ms to one day. Rate and concurrency violations raise SQLSTATE 54000; clients should use the retry hint. The most restrictive applicable role/database setting wins, and rate pairs are compared by normalized rate.

Observability and Upgrade

qos_stat_rate exposes live windows; the other qos_stat views expose activity and counters. qos_prometheus_metrics() renders Prometheus exposition text. Counters reset at server restart. Version 1.1 replaces the old nonfunctional qos_get_stats() with these views.

Upgrading requires replacing the library and restarting PostgreSQL because the shared-memory layout changes, followed by ALTER EXTENSION qos UPDATE TO '1.1' in each database. New rate limits stay disabled until configured. These controls do not replace application admission limits or operating-system isolation.