tencent cloud

云数据库 PostgreSQL

database 资源隔离实践教程

下载
聚焦模式
字号
最后更新时间: 2026-09-08 10:21:59
本文为您介绍使用 database 资源隔离的实践教程。

功能概述

在云数据库 PostgreSQL 中,同一个实例通常会承载多个业务 database(库)。当某些库出现慢查询、批量任务或异常 SQL 时,可能占满实例的 CPU 资源,进而影响同一实例下其他 database 的稳定性与响应时延,出现“一库拖垮全实例”的问题。
database 资源隔离能力通过内核插件 tencentdb_serverless 提供,可对实例内每个 database 的 CPU 资源进行精细化配额管理:既能为关键业务库设定最低保障配额(min_cpu_cores),也能为易失控的库设定最高使用上限(max_cpu_cores),从而实现多租户 / 多业务在同一实例内的资源隔离与互不影响。

一、开启 database 资源隔离

实例级别首次开启方法

开启 database 资源隔离模式,需要后端开启插件 tencentdb_serverless 并设置相关参数。相关操作与参数说明,请参考 database 资源隔离

检查实例是否开启资源隔离功能

检查插件是否安装

检查 tencentdb_serverless 是否安装成功。在 PostgreSQL 客户端中执行 \\dx 查看已安装扩展列表,如果查看到 tencentdb_serverless,则插件已经成功安装。
postgres=> \\dx;
List of installed extensions
Name | Version | Schema | Description
-----------------------+---------+------------+------------------------------------------------------------------------
pg_stat_log | 1.0 | public | track runtime execution statistics of all SQL statements executed
pg_stat_statements | 1.9 | public | track planning and execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
tencentdb_serverless | 1.0 | public | extension for serverless mode
tencentdb_system_stat | 1.0 | public | track execution statistics of querssy executed
(5 rows)

检查插件是否生效

参考如下命令检查插件是否生效。能够 show 出目标结果则正常生效。
postgres=> show tencentdb_serverless.min_cpu_cores;
tencentdb_serverless.min_cpu_cores
------------------------------------
4
(1 row)

postgres=> show tencentdb_serverless.max_cpu_cores;
tencentdb_serverless.max_cpu_cores
------------------------------------
4
(1 row)


二、使用参考

设置指定 database 的 CPU 资源限制。
具体函数
tencentdb_serverless.set_database_cpu_limit(database_name, min_cpu_cores, max_cpu_cores)
参数说明
参数
说明
database_name
需要设置资源隔离的具体数据库名字。
min_cpu_cores
该参数为 database 可使用的最低 CPU 核数,在实例整体资源不足时,也能保障该 database 能分配到的配额。该配额为按百分比分配。例如,当前实例有3个 database,分别为 A、B、C。A 设置的最低配额为2,B 设置的最低配额为3,C 设置的最低配额为3,实例当前的 CPU 核数为8核,则 A 能使用的最低核数为(2 /(2 + 3 + 3))* 8 = 2核。
max_cpu_cores
该参数为 database 可使用的最高 CPU 核数,该值不能超过实例当前的核数。如您无需设置 database 的最高 CPU 资源限制,则设置为-1即可。
参考示例
设置参数,将 tenant_001 库的 CPU 限制为1c。
postgres=> select tencentdb_serverless.set_database_cpu_limit('tenant_001',0.1,1);
set_database_cpu_limit
------------------------
(1 row)
查看设置结果
postgres=> select * from tencentdb_serverless.resource_limit_view;
database_name | min_cpu_cores | max_cpu_cores | min_mem_kilobytes | max_mem_kilobytes
---------------+---------------+---------------+-------------------+-------------------
tenant_001 | 0.1 | 1.0 | |
(1 row)
取消资源隔离
取消 tenant_001库资源隔离。
postgres=> select tencentdb_serverless.reset_database_limit('tenant_001');
reset_database_limit
----------------------
(1 row)

三、为多个 database 设置资源上限

场景

对多个 db 中的其中两个设置资源上限,以库:ipb、ibp_hk 为例,两个 db 的 CPU 最多可用50%,单个 db 最多25%,其他的不做资源上限设置。

方案

以实例4c 为例,按以下方法进行资源设置。
查询所有数据库
postgres=> select datname from pg_database where datname not like 'template%';
datname
------------
postgres
ipb
ibp_hk
tenant_001
(4 rows)
对数据库进行资源隔离限制
select tencentdb_serverless.set_database_cpu_limit('ipb',0.25,1); -- 限制最多使用25%CPU
select tencentdb_serverless.set_database_cpu_limit('ibp_hk',0.25,1); -- 限制最多使用25%CPU
对其他库不做资源隔离限制
select tencentdb_serverless.set_database_cpu_limit('postgres',1,-1); -- 不限制 db CPU 使用
select tencentdb_serverless.set_database_cpu_limit('tenant_001',1,-1); -- 不限制 db CPU 使用

四、常见问题

Q:数据库 CPU 限制是否为硬限制?

A:set_database_cpu_limit 所限制的 max_cpu_cores 为硬限制,单个 db 无法突破此限制。

Q:数据库 CPU 使用达到上限后会有什么影响?

A:数据库 CPU 使用达到上限后,任务会变慢。需要注意的是,CPU 打满之后并不会 kill 掉连接,不会造成业务中断。

Q:database 资源隔离配置后是否会造成其他影响?

A:只会对资源隔离的 db 进行限制,无其他影响。

Q:CPU 上限为-1的 db 是否有影响?

A:无影响,上限为-1的情况下,即使受限制 db 达到 CPU 上限,该 db 仍可以使用整个实例剩余的所有资源。

Q:后台开启插件是否对实例有影响?

A:无影响。

Q:业务侧在配置资源隔离阶段是否有影响?

A:只影响设置的 db,设置后立即生效,对 db 进行资源隔离。

Q:隔离开启后新增数据库是否有影响?

A:无影响,新增数据库不受资源隔离限制,如需隔离,可以执行 tencentdb_serverless.set_database_cpu_limit 进行隔离。

Q:删除数据库是否需要清理资源隔离配置?

A:当实例中某个 database 被删除后,系统会自动删除其 CPU 资源配置数据。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈