使用场景
设置 database 资源隔离
注意:说明:
当你已经开启 tencentdb_serverless 插件并设置了相关插件参数 tencentdb_serverless.min_cpu_cores 和 tencentdb_serverless.max_cpu_cores 后,可以正式开始配置。你可以通过如下命令检查插件已经安装成功:
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)
tencentdb_serverless.min_cpu_cores 和 tencentdb_serverless.max_cpu_cores 参数的初始值为实例当前 CPU 核心数,这两个参数主要用于后台管理系统控制实例中 database 的资源隔离,用户不需要修改。后续如果实例发生变配,则此二参数会随之改变。你可以基于如下命令来检查参数的当前值。
postgres=> show tencentdb_serverless.min_cpu_cores; tencentdb_serverless.min_cpu_cores ———————————— 8(1 row)postgres=> show tencentdb_serverless.max_cpu_cores; tencentdb_serverless.max_cpu_cores ———————————— 8(1 row)
注意:说明:
注意:当实例中有多个 database 对象时,需要每个 database 都设置 CPU 资源限制才能使配置生效。
你可以使用如下语句查看当前实例中的所有 database,具体如下:
postgres=> select datname from pg_database where datname not like 'template%'; datname ———— postgres tenant_001 tenant_002 tenant_003(4 rows)
插件和参数检查完毕之后,你可以开始设置每个 database 的 CPU 资源上限和下限。我们提供了相应的函数或视图供你使用。分别说明如下:
一、设置指定 database 的 CPU 资源限制。
函数定义如下:
tencentdb_serverless.set_database_cpu_limit(database_name text [, min_cpu_cores numeric(5,1), max_cpu_cores numeric(5,1)])
·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即可。
调用示例:
postgres=> select tencentdb_serverless.set_database_cpu_limit('tenant_001',2,2.5); set_database_cpu_limit ———————— (1 row)
二、清除指定 database 的 CPU 资源限制。
注意:说明:
注意:当实例中某个 database 被删除后,系统自动删除其 CPU 资源配置数据。
函数定义如下:
tencentdb_serverless.reset_database_limit(database_name text)
调用示例:
postgres=> select tencentdb_serverless.reset_database_limit('tenant_001'); reset_database_limit ———————- (1 row)
·清空实例中所有 database 的 CPU 资源限制。
函数定义如下:
tencentdb_serverless.reset_all_database_limit()
调用示例:
postgres=> select tencentdb_serverless.reset_all_database_limit(); reset_all_database_limit ————————– (1 row)
·查看当前实例中所有已配置的 CPU 资源限制详情。
我们提供视图 tencentdb_serverless.resource_limit_view,用于你查看当前实例中所有的已配置的 CPU 资源限制详情,字段定义如下:
| 列名 | 含义 |
| database_name | 数据库的名字。 |
| min_cpu_cores | 当前 database 可以使用的最小 CPU 核数。 |
| max_cpu_cores | 当前 database 可以使用的最大 CPU 核数。 |
| min_mem_kilobytes | 当前 database 可以使用的最小内存,单位为 KB。预留字段,暂时未使用。 |
| max_mem_kilobytes | 当前 database 可以使用的最大内存,单位为 KB。预留字段,暂时未使用。 |
调用示例:
postgres=> select * from tencentdb_serverless.resource_limit_view; database_name | min_cpu_cores | max_cpu_cores | min_mem_kilobytes | max_mem_kilobytes —————+—————+—————+——————-+——————- tenant_001 | 2.0 | 2.5 | | tenant_002 | 2.0 | 2.5 | | (2 rows)
三、进程监控
当实例中所有 database 配置了 CPU 资源隔离后,如果实例整体资源利用率比较高,则每个 database 能保证最低配置的 CPU 核数的使用。同时,如你需要查看当前系统中哪些 database 使用的资源较多,则可以使用 进程监控 能力。查看当前所有 database 的 CPU 资源使用详情可以使用如下语句:
postgres=> select datname,sum(cpu_usage) as cpu_usage from tencentdb_process_system_usage where datname !='NULL' group by datname; datname | cpu_usage ————+———– postgres | 3 tenant_001 | 1.99 tenant_002 | 1(3 rows)
当进程监控发现某些 database 资源使用率比较高时,你可以实时调整该 database 的 CPU 的配置,该配置可以实时生效。
四、资源迁移
当 database 对应租户,且我们通过进程监控发现该 database 的资源使用一直很高需要进行资源再整合时,云数据库 PostgreSQL 提供了数据迁移能力,你可以配置云数据库 PostgreSQL 的 逻辑迁移。配置迁移任务如下:
五、租户审计
云数据库 PostgreSQL 提供了 数据库审计 功能,能满足你对于租户操作的审计需要。数据库审计能记录实例级别的 database 、用户以及 SQL 明细,辅助业务进一步的管理租户。具体如下:
关闭 database 资源隔离
如你需要关闭 database 的 CPU 资源隔离模式,请 提交工单 联系我们进行清理数据。后端工程师收到工单后,会重置所有的 CPU 资源参数 tencentdb_serverless.min_cpu_cores 和 tencentdb_serverless.max_cpu_cores ,取消所有的资源配置,最后会删除插件 tencentdb_serverless。