云数据库 PostgreSQL database 资源隔离实践教程

这篇说说腾讯云PostgreSQL的database资源隔离功能,通过tencentdb_serverless插件对每个库的CPU进行min/max配额管理,防止单库拖垮实例。开启后可用函数set_database_cpu_limit设置限制,max为硬限制,达到上限仅变慢不中断连接。 开启与检查:需安装插件并确认参数生效,通过\dx和show命令验证。 使用参考:调用set_database_cpu_limit(d。

相关产品
云数据库 PostgreSQL 产品页,含版本规格、价格与购买入口。

这里说明使用 database 资源隔离的实践教程。

一、功能概述

在云数据库 PostgreSQL 中,同一个实例通常会承载多个业务 database(库)。当某些库出现慢查询、批量任务或异常 SQL 时,可能占满实例的 CPU 资源,进而影响同一实例下其他 database 的稳定性与响应时延,出现“一库拖垮全实例”的问题。

database 资源隔离能力通过内核插件 tencentdb_serverless 提供,可对实例内每个 database 的 CPU 资源进行精细化配额管理:既能为关键业务库设定最低保障配额(min_cpu_cores),也能为易失控的库设定最高使用上限(max_cpu_cores),从而实现多租户 / 多业务在同一实例内的资源隔离与互不影响。

二、实例级别首次开启方法

开启 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)

六、场景

对多个 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%CPUselect 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 资源配置数据。

赞 (0)
上一篇 4天前
下一篇 4天前