qos

PostgreSQL QoS 资源治理扩展(会话与查询限流/隔离)

概览

扩展包名版本分类许可证语言
pg_qos1.0ADMINGPL-3.0C
ID扩展名BinLibLoadCreateTrustReloc模式
5240qos-
相关扩展prioritize pg_permissions pg_readonly pg_crash pg_cooldown pg_rewrite pg_repack pgfincore

requires shared_preload_libraries = ‘qos’; official support PG15+

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.01817161514pg_qos-
RPMPIGSTY1.0.01817161514pg_qos_$v-
DEBPIGSTY1.0.01817161514postgresql-$v-qos-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PIGSTY MISS
el8.aarch64PIGSTY MISS
el9.x86_64PIGSTY MISS
el9.aarch64PIGSTY MISS
el10.x86_64PIGSTY MISS
el10.aarch64PIGSTY MISS
d12.x86_64PIGSTY MISS
d12.aarch64PIGSTY MISS
d13.x86_64PIGSTY MISS
d13.aarch64PIGSTY MISS
u22.x86_64PIGSTY MISS
u22.aarch64PIGSTY MISS
u24.x86_64PIGSTY MISS
u24.aarch64PIGSTY MISS

构建

您可以使用 pig build 命令构建 pg_qos 扩展的 RPM / DEB 包:

pig build pkg pg_qos         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_qos 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_qos;          # 当前活跃 PG 版本安装
pig ext install -y pg_qos -v 18  # PG 18
pig ext install -y pg_qos -v 17  # PG 17
pig ext install -y pg_qos -v 16  # PG 16
pig ext install -y pg_qos -v 15  # PG 15
dnf install -y pg_qos_18       # PG 18
dnf install -y pg_qos_17       # PG 17
dnf install -y pg_qos_16       # PG 16
dnf install -y pg_qos_15       # PG 15
apt install -y postgresql-18-qos   # PG 18
apt install -y postgresql-17-qos   # PG 17
apt install -y postgresql-16-qos   # PG 16
apt install -y postgresql-15-qos   # PG 15

预加载配置

shared_preload_libraries = 'qos';

创建扩展

CREATE EXTENSION qos;

用法

qos: PostgreSQL 会话和查询的 QoS 资源治理扩展

qos 扩展为 PostgreSQL 提供服务质量(QoS)资源治理,允许管理员对每个角色和每个数据库设置内存使用、CPU 核心数和并发事务/语句的限制。

配置参数

参数类型描述
qos.work_mem_limit字节每个会话的最大有效 work_mem
qos.cpu_core_limit整数会话可用的最大 CPU 核心数
qos.max_concurrent_tx整数最大并发事务数
qos.max_concurrent_select整数最大并发 SELECT 语句数
qos.max_concurrent_update整数最大并发 UPDATE 语句数
qos.max_concurrent_delete整数最大并发 DELETE 语句数
qos.max_concurrent_insert整数最大并发 INSERT 语句数

角色级限制

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';

数据库级限制

ALTER DATABASE appdb SET qos.max_concurrent_tx = '200';

角色+数据库组合限制

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';

执行行为

  • 工作内存:拦截 SET work_mem 并拒绝超过配置限制的值
  • CPU 限制(仅 Linux):通过 CPU 亲和性将后端绑定到 N 个 CPU 核心;在非 Linux 平台上改为限制并行工作进程
  • 并发:执行器钩子按类型跟踪活动事务/语句;违规将阻止执行

可观测性

SET client_min_messages = 'debug1';  -- 启用 QoS 事件的调试输出

角色级和数据库级设置中最严格的组合生效。需要 shared_preload_libraries = 'qos' 和 PostgreSQL 15+。


最后修改 2026-03-14: update extension metadata (953cbd0)