日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

多租戶

本文介紹了PolarDB PostgreSQL版的多租戶資源配置功能。

概念

租戶:在多租戶中,租戶是一個邏輯實體,它代表一個特定的數據和資源分配單元。租戶的層級定位在集群之下,用戶和數據庫之上,它們之間的對應關系是多對一的,多個賬戶或數據庫對應一個租戶。租戶與用戶或數據庫不是等同的概念。租戶分為兩大類:

  • 系統租戶:這是一個特殊的管理實體,通常只有一個。系統租戶擁有對資源的優先訪問權,能夠占用普通租戶的資源。當通過系統租戶的用戶連接到數據庫時,如果該用戶具備相應的集群訪問權限,他們將能夠訪問所有租戶下的集群。

  • 普通租戶:每個普通租戶的資源是完全隔離的,租戶之間無法相互訪問。普通租戶必須在系統租戶的上下文中創建。

資源配置:資源配置涉及為特定的租戶分配確定的資源(如CPU和內存)。這種配置方式允許高權限賬戶根據業務需求,為每個租戶指定資源限制。

租戶資源配置功能旨在限制單個或多個進程所使用的資源量。在PolarDB PostgreSQL版中,一個會話對應一個進程,且一個會話只能由一個用戶登錄到一個數據庫。因此,進程、用戶和數據庫構成了進程的基本元素。系統允許將任意進程、用戶、數據庫映射到指定的租戶,但一個進程只能屬于一個租戶,從而避免了資源使用量的重復統計。后臺并行查詢的子進程屬于發起查詢的進程所屬的租戶。因此基于進程的屬性可以將資源限制分為三個維度:

  • 進程:指用戶主動發起的賬戶連接進程(會話進程),包括與進程相關的并行查詢進程,但不包括系統輔助進程。

  • 用戶:指由同一用戶發起的所有用戶連接進程(會話進程),包括與進程相關的并行查詢進程,但不包括系統輔助進程。

  • 數據庫:指訪問同一數據庫的所有用戶連接進程(會話進程),包括與進程相關的并行查詢進程,但不包括系統輔助進程。

說明

由于系統進程特定的功能作用,默認情況下不對其資源使用進行限制。

前提條件

支持的PolarDB PostgreSQL版的版本如下:

PostgreSQL 14(內核小版本14.12.24.0及以上)。

說明

您可通過如下語句查看PolarDB PostgreSQL版的內核小版本的版本號:

SELECT version();

參數說明

參數

描述

生效方式

polar_max_tenants

最大租戶數量,取值范圍為0~65536,默認值為32。

重啟生效。

polar_resource_manager.enable_resource_manager

是否打開Resource Manager進程,進行內存限制和OOM預防,默認值為on。

重啟生效。

polar_resource_manager.database_name

存放租戶元數據的數據庫名稱,默認值為polardb_admin

重啟生效。

polar_resource_manager.stat_interval

數據采集間隔時間,單位為毫秒,取值范圍為10~10000。默認值為500 ms。

RELOAD加載生效。

SELECT pg_reload_conf();

polar_resource_manager.total_mem_request_rate

主動淘汰閾值,取值范圍為50%~100%,默認值為80%。

RELOAD加載生效。

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_rate

強制淘汰閾值,取值范圍為50%~100%,默認值為95%。

RELOAD加載生效。

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_remain_size

內存預留大小,取值范圍為131072~INT_MAX(整型數據類型最大值),單位為KB,默認值為256000 KB。

RELOAD加載生效。

SELECT pg_reload_conf();

polar_resource_manager.enable_log

是否開啟日志記錄,取值范圍如下:

  • ON(默認值):開啟日志記錄。

  • OFF:關閉日志記錄。

RELOAD加載生效。

SELECT pg_reload_conf();

使用說明

在使用多租戶時,需要在polar_resource_manager.database_name參數設置的數據庫中安裝插件polar_resource_manager

重要

修改polar_resource_manager.database_name設置的存放租戶元數據的數據庫名稱,前期設定的多租戶信息會失效。

CREATE EXTENSION polar_resource_manager;

創建資源配置

使用函數polar_create_resource_config創建資源配置。

SELECT polar_resource_manager.polar_create_resource_config('resource_config_name');

其中,參數resource_config_name需要符合數據庫對象名限制,只支持64字節以內的名稱,超過64字節后會自動截斷。

刪除資源配置

使用函數polar_drop_resource_config刪除資源配置。

SELECT polar_resource_manager.polar_drop_resource_config('resource_config_name');

修改資源配置

使用函數polar_alter_resource_config修改資源配置的資源設置。

SELECT polar_resource_manager.polar_alter_resource_config('resource_config_name', 'config_name', value);

其中,支持的config_name類型為:

  • cpu_rate_limit,CPU限制值,單位為核心數。

  • mem_limit,內存限制值,單位是字節數。

創建租戶

使用函數polar_create_tenant創建租戶。

SELECT polar_resource_manager.polar_create_tenant('tenant_name', 'resource_config_name');

其中:

  • tenant_name參數需要符合數據庫對象名限制,只支持64字節以內的名稱,超過64字節后會自動截斷。

  • resource_config_name資源配置需要優先建立,否則無法成功建立租戶。

刪除租戶

使用函數polar_drop_tenant刪除租戶。刪除租戶不會刪除資源配置。

SELECT polar_resource_manager.polar_drop_tenant('tenant_name');

修改租戶

使用函數polar_alter_tenant修改租戶。

SELECT polar_resource_manager.polar_alter_tenant('tenant_name', 'config_name', 'value');

其中,支持的config_name類型為:

  • name:租戶名稱。

  • resource_config:資源配置。

數據庫歸屬租戶

使用函數polar_tenant_add_database將數據庫歸屬到租戶下。數據庫只能歸屬到一個租戶,否則無法歸屬成功。

SELECT polar_resource_manager.polar_tenant_add_database('tenant_name', 'database_name');

查看數據庫和租戶

使用polar_tenants_dbs視圖可以查看數據庫及其所屬的租戶。

SELECT dbsname, tenantname FROM polar_resource_manager.polar_tenants_dbs;

用戶歸屬租戶

使用函數polar_tenant_add_user將用戶歸屬到租戶下。用戶只能歸屬到一個租戶,否則無法歸屬成功。

SELECT polar_resource_manager.polar_tenant_add_user('tenant_name', 'user_name');

查看用戶和租戶

使用polar_tenants_users視圖可以查看用戶及其所屬的租戶。

SELECT username, tenantname FROM polar_resource_manager.polar_tenants_users;

進程歸屬租戶

使用函數polar_tenant_add_process將進程歸屬到租戶下。進程只能歸屬到一個租戶,歸屬多個租戶時,以最后一次為準。

SELECT polar_resource_manager.polar_tenant_add_process('tenant_name', pid);

查看租戶資源情況

使用polar_all_resource_configs_detail視圖可以查看租戶資源情況。

SELECT * FROM polar_resource_manager.polar_all_resource_configs_detail;

視圖信息如下:

列名稱

列類型

描述

tenantname

NAME

租戶名稱。

resource_config_name

NAME

資源配置名稱。

num_processes

INTEGER

進程數量。

num_idle_processes

INTEGER

idle進程數量。

num_active_processes

INTEGER

活躍進程數量。

cpu_rate_limit

DOUBLE PRESISION

租戶CPU資源限制值。

per_process_cpu_rate_limit

DOUBLE PRESISION

進程CPU限制值。

mem_limit

DOUBLE PRESISION

內存限制值。

mem_usage

DOUBLE PRESISION

內存使用量。

idle_processes_mem_usage

DOUBLE PRESISION

空閑進程內存使用量。

active_processes_mem_usage

DOUBLE PRESISION

活躍進程內存使用量。

cpu_usage_rate

DOUBLE PRESISION

CPU 使用率。

CPU資源管理

將進程、用戶或者數據庫添加到對應租戶后,可以設置租戶資源配置的CPU相關限制值。如果有可分配的后端子進程,則將后端子進程加入到發出并行查詢的會話連接的租戶中,讓后端子進程和會話進程共享租戶限制的資源。而當會話的并行查詢執行完后,將后端子進程從租戶中移除。此過程是一個動態增加和移除資源限制的過程。

CPU使用率限制

用于限制租戶內對象的CPU使用率的最大值。當租戶內的對象CPU使用率過大時,集群會進行限制,將CPU使用率降低,使其小于限制值。

通過polar_resource_manager.polar_alter_resource_config設置cpu_rate_limit,參數值為float類型。

說明

參數值表示CPU的使用率(一段時間內的CPU使用時間比率)。例如,0.3表示使用一個核的30%,2表示使用2個核的能力。由于限制的是最大使用率,因此所有租戶資源配置的cpu_limit和可以大于規格額T,即cpu_limit_A + cpu_limit_B + cpu_limit_C + ... >= T

內存資源管理

由于內存資源是剛性資源(swap off),無法像CPU可以動態限制,如果內存資源超過硬性限制,一般是通過中止進程來釋放資源。租戶的內存管理類似操作系統的OOM處理策略,相比于系統的整個數據庫級別的OOM處理,這里只是一個租戶級別的OOM處理。

內存使用量限制

通過polar_resource_manager.polar_alter_resource_config來設置mem_limit,參數值為float類型。與CPU使用率限制類似,用于限制內存使用的最大值,總的限制值可以大于等于規格額。包含以下兩種策略:

  • 主動資源超限管理:當總內存使用量大于主動淘汰閾值(total_mem_request_rate,默認值為80%)時,如果租戶內存使用量大于此租戶資源配置的內存limit量,則釋放相應會話釋放資源,并返回給用戶內存超限的錯誤。直到內存使用量小于主動淘汰閾值。

  • 強制資源超限管理:為了避免集群內存過量使用,引起集群OOM,當總內存使用量大于強制淘汰閾值(total_mem_limit_rate,默認值為95%)時,遍歷所有進程,釋放相應會話的資源,并返回給用戶內存超限的錯誤。

內存限制進行淘汰時,會中止用戶會話并釋放進程資源,可以通過發送SIGUSR2實現,向用戶返回指定的OOM錯誤。如果存在并行查詢的后臺進程內存超限,會中止對應的用戶進程。目前只對用戶進程進行限制,系統后臺進程目前屬于系統租戶,不會主動中止釋放資源。