針對 RDS for SQL Server 執行個體使用 Microsoft SQL Server 資源長 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

針對 RDS for SQL Server 執行個體使用 Microsoft SQL Server 資源長

將資源長者選項新增至選項群組後,資源長者尚未在資料庫引擎層級處於作用中狀態。若要完全啟用資源決策者,您必須使用 RDS for SQL Server 預存程序來啟用它並建立必要的資源決策者物件。如需詳細資訊,請參閱連線至 Microsoft SQL Server 資料庫執行個體

首先,連線至 SQL Server 資料庫,然後呼叫適當的 RDS for SQL Server 預存程序以完成組態。如需連接資料庫的指示,請參閱連線至 Microsoft SQL Server 資料庫執行個體

如需如何呼叫每個預存程序的相關指示,請參閱下列主題:

管理資源集區

建立資源集區

在選項群組上啟用資源協調器後,您可以使用 建立自訂資源集區rds_create_resource_pool。這些集區可讓您將 CPU、記憶體和 IOPS 的特定百分比分配給不同的工作負載。

用途

USE [msdb] EXEC dbo.rds_create_resource_pool @pool_name=value, @MAX_CPU_PERCENT=value, @CAP_CPU_PERCENT=value, @MAX_MEMORY_PERCENT=value, @MAX_IOPS_PER_VOLUME=value

下列是必要參數:

  • @group_name - 是現有使用者定義工作負載群組的名稱。

  • @pool_name - 是資源集區的使用者定義名稱。 pool_name 是英數字元,最多可達 128 個字元,在資料庫引擎執行個體中必須是唯一的,並且必須符合資料庫識別符的規則。

下列是選用參數:

  • @MAX_CPU_PERCENT - 指定資源集區中所有請求在 CPU 爭用時接收的最大平均 CPU 頻寬。 是預設設定為 100 的整數。的允許範圍介於 1 到 100 之間。

  • @CAP_CPU_PERCENT - 指定資源集區中所有請求接收的 CPU 頻寬硬性上限。將 CPU 頻寬層級上限限制為與指定值相同。 是預設設定為 100 的整數。的允許範圍為 1 到 100。

  • @MAX_MEMORY_PERCENT - 指定此資源集區中請求可使用的查詢工作區記憶體數量上限。 是預設設定為 100 的整數。的允許範圍為 1 到 100。

  • @MAX_IOPS_PER_VOLUME - 指定每個磁碟區允許資源集區的最大每秒 I/O 操作數 (IOPS)。的允許範圍是從 0 到 2^31-1 (2,147,483,647)。指定 0 以移除集區的 IOPS 限制。預設值為 0。

範例

使用所有預設值建立資源集區的範例:

--This creates resource pool 'SalesPool' with all default values USE [msdb] EXEC rds_create_resource_pool @pool_name = 'SalesPool'; --Apply changes USE [msdb] EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools

使用不同的指定參數建立資源集區的範例:

--creates resource pool USE [msdb] EXEC dbo.rds_create_resource_pool @pool_name='analytics', @MAX_CPU_PERCENT = 30, @CAP_CPU_PERCENT = 40, @MAX_MEMORY_PERCENT = 20; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools

變更資源集區

用途

USE [msdb] EXEC dbo.rds_alter_resource_pool @pool_name=value, @MAX_CPU_PERCENT=value, @CAP_CPU_PERCENT=value, @MAX_MEMORY_PERCENT=value, @MAX_IOPS_PER_VOLUME=value;

下列是必要參數:

  • @pool_name - 是現有使用者定義資源集區的名稱。Amazon RDS SQL Server 中不允許變更預設資源集區。

必須指定至少一個選用參數:

  • @MAX_CPU_PERCENT - 指定資源集區中所有請求在 CPU 爭用時接收的最大平均 CPU 頻寬。 是預設設定為 100 的整數。的允許範圍為 1 到 100。

  • @CAP_CPU_PERCENT - 指定資源集區中所有請求接收的 CPU 頻寬硬性上限。將 CPU 頻寬層級上限限制為與指定值相同。 是預設設定為 100 的整數。的允許範圍為 1 到 100。

  • @MAX_MEMORY_PERCENT - 指定此資源集區中請求可使用的查詢工作區記憶體數量上限。 是預設設定為 100 的整數。的允許範圍為 1 到 100。

  • @MAX_IOPS_PER_VOLUME - 指定每個磁碟區允許資源集區的最大每秒 I/O 操作數 (IOPS)。的允許範圍是從 0 到 2^31-1 (2,147,483,647)。指定 0 以移除集區的 IOPS 限制。預設值為 0。

範例

--This alters resource pool USE [msdb] EXEC dbo.rds_alter_resource_pool @pool_name='analytics', @MAX_CPU_PERCENT = 10, @CAP_CPU_PERCENT = 20, @MAX_MEMORY_PERCENT = 50; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration. select * from sys.resource_governor_resource_pools

捨棄資源集區

用途

USE [msdb] EXEC dbo.rds_drop_resource_pool @pool_name=value;

以下是必要參數:

  • @pool_name - 是現有使用者定義資源集區的名稱。

注意

SQL Server 中不允許捨棄內部或預設資源集區。

範例

--This drops resource pool USE [msdb] EXEC dbo.rds_drop_resource_pool @pool_name='analytics' --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_resource_pools

管理工作負載群組

使用 和 建立和管理rds_create_workload_group的工作負載群組,rds_alter_workload_group可讓您設定查詢群組的重要性層級、記憶體授權和其他參數。

建立工作負載群組

用途

USE [msdb] EXEC dbo.rds_create_workload_group @group_name = value, @IMPORTANCE ={ LOW | MEDIUM | HIGH }, @REQUEST_MAX_MEMORY_GRANT_PERCENT =value, @REQUEST_MAX_CPU_TIME_SEC = value , @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, @MAX_DOP = value, @GROUP_MAX_REQUESTS = value, @pool_name = value

下列是必要參數:

  • @pool_name - 是現有使用者定義資源集區的名稱。

  • @group_name - 是現有使用者定義工作負載群組的名稱。

下列是選用參數:

  • @IMPORTANCE - 指定工作負載群組中請求的相對重要性。預設值為 MEDIUM

  • @REQUEST_MAX_MEMORY_GRANT_PERCENT - 指定單一請求可從集區取得的最大查詢工作區記憶體數量。 是 所定義資源集區大小的百分比MAX_MEMORY_PERCENT。預設值為 25。

  • @REQUEST_MAX_CPU_TIME_SEC - 指定批次請求可使用的 CPU 時間上限,以秒為單位。必須為 0 或正整數。的預設設定為 0,這表示無限制。

  • @REQUEST_MEMORY_GRANT_TIMEOUT_SEC - 指定查詢可等待查詢工作區記憶體的記憶體授權變成可用的最大時間,以秒為單位。必須為 0 或正整數。 0 的預設設定會根據查詢成本使用內部計算來判斷最長時間。

  • @MAX_DOP - 指定平行查詢執行的最大平行處理程度 (MAXDOP)。允許的值範圍為 0 到 64。 0 的預設設定會使用全域設定。

  • @GROUP_MAX_REQUESTS = 指定允許在工作負載群組中同時執行的請求數目上限。 必須為 0 或正整數。的預設設定為 0,並允許無限制的請求。

  • @pool_name = 將工作負載群組與 pool_name 識別的使用者定義資源集區或default資源集區建立關聯。如果未提供 pool_name,工作負載群組會與內建default集區相關聯。

範例

--This creates workload group named 'analytics' USE msdb; EXEC dbo.rds_create_workload_group @group_name = 'analytics', @IMPORTANCE = 'HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, @REQUEST_MAX_CPU_TIME_SEC = 0, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, @MAX_DOP = 0, @GROUP_MAX_REQUESTS = 0, @pool_name = 'analytics'; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups

修改工作負載群組

用途

EXEC msdb.dbo.rds_alter_workload_group @group_name = value, @IMPORTANCE = 'LOW|MEDIUM|HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = value, @REQUEST_MAX_CPU_TIME_SEC = value, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, @MAX_DOP = value, @GROUP_MAX_REQUESTS = value, @pool_name = value

下列是必要參數:

  • @group_name - 是預設或現有使用者定義工作負載群組的名稱。

注意

僅支援變更預設工作負載群組上的REQUEST_MAX_MEMORY_GRANT_PERCENT參數。對於預設工作負載群組, REQUEST_MAX_MEMORY_GRANT_PERCENT 必須介於 1 到 70 之間。無法在預設工作負載群組中修改其他參數。您可以在使用者定義的工作負載群組中修改所有參數。

下列是選用參數:

  • @IMPORTANCE - 指定工作負載群組中請求的相對重要性。預設值為 MEDIUM。

  • @REQUEST_MAX_MEMORY_GRANT_PERCENT - 指定單一請求可從集區取得的最大查詢工作區記憶體數量。 是 所定義資源集區大小的百分比MAX_MEMORY_PERCENT。預設值為 25。在 Amazon RDS 上, REQUEST_MAX_MEMORY_GRANT_PERCENT 必須介於 1 到 70 之間。

  • @REQUEST_MAX_CPU_TIME_SEC - 指定批次請求可使用的 CPU 時間上限,以秒為單位。必須為 0 或正整數。的預設設定為 0,這表示無限制。

  • @REQUEST_MEMORY_GRANT_TIMEOUT_SEC - 指定查詢可以等待來自查詢工作區記憶體的記憶體授權變成可用的最長時間,以秒為單位。必須為 0 或正整數。 0 的預設設定會根據查詢成本使用內部計算來判斷最長時間。

  • @MAX_DOP - 指定平行查詢執行的最大平行處理程度 (MAXDOP)。的允許範圍為 0 到 64。 0 的預設設定使用全域設定。

  • @GROUP_MAX_REQUESTS - 指定允許在工作負載群組中同時執行的請求數目上限。 必須為 0 或正整數。的預設設定為 0,並允許無限制的請求。

  • @pool_name - 將工作負載群組與 pool_name 識別的使用者定義資源集區建立關聯。

範例

修改預設工作負載群組變更 REQUEST_MAX_MEMORY_GRANT_PERCENT 的範例:

--Modify default workload group (set memory grant cap to 10%) USE msdb EXEC dbo.rds_alter_workload_group @group_name = 'default', @REQUEST_MAX_MEMORY_GRANT_PERCENT=10; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';

修改非預設工作負載群組的範例:

EXEC msdb.dbo.rds_alter_workload_group @group_name = 'analytics', @IMPORTANCE = 'HIGH', @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30, @REQUEST_MAX_CPU_TIME_SEC = 3600, @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60, @MAX_DOP = 4, @GROUP_MAX_REQUESTS = 100; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration;

將非預設工作負載群組移至另一個資源集區的範例:

EXEC msdb.dbo.rds_alter_workload_group @group_name = 'analytics', @pool_name='abc' --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups

捨棄工作負載群組

用途

EXEC msdb.dbo.rds_drop_workload_group @group_name = value

下列是必要參數:

  • @group_name - 是現有使用者定義工作負載群組的名稱。

範例

--Drops a Workload Group: EXEC msdb.dbo.rds_drop_workload_group @group_name = 'analytics'; --Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration; --Validate configuration select * from sys.resource_governor_workload_groups

建立和註冊分類器函數

此程序會在主資料庫中建立資源協調人員分類器函數,根據指定的條件 (使用者名稱、資料庫、主機或應用程式名稱) 將連線路由至自訂工作負載群組。如果資源協調器已啟用,且在資源協調器組態中指定分類器函數,則函數輸出會決定用於新工作階段的工作負載群組。如果沒有分類器函數,所有工作階段都會分類為 default群組。

功能:

  • 支援最多兩個具有各自路由條件的工作負載群組。

  • 將條件與每個群組中的AND條件結合。

  • 每個工作負載群組至少需要一個路由條件。

  • 函數名稱必須以 開頭rg_classifier_

  • 如果沒有條件相符,則預設群組指派。

分類器函數具有下列特性和行為:

  • 函數是在伺服器範圍 (在主資料庫中) 中定義。

  • 函數是以結構描述繫結來定義。

  • 即使啟用連線集區,也會針對每個新工作階段評估函數。

  • 函數會傳回工作階段的工作負載群組內容。工作階段會指派給分類器在工作階段生命週期內傳回的工作負載群組。

  • 如果函數傳回 NULL、預設或不存在工作負載群組的名稱,則會為工作階段提供預設工作負載群組內容。如果函數因任何原因失敗,也會提供工作階段預設內容。

  • 您可以建立多個分類器函數。不過,SQL Server 一次僅允許註冊一個分類器函數。

  • 除非使用將函數名稱設定為 NULL 的取消註冊程序 (EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;) 移除其分類器狀態,或使用 (EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;) 註冊另一個分類器函數,否則無法捨棄分類器函數

  • 如果沒有分類器函數,所有工作階段都會分類為預設群組。

  • 在資源決策者組態中參考分類器函數時,您無法修改該函數。不過,您可以修改組態以使用不同的分類器函數。如果您想要變更分類器,請考慮建立一對分類器函數。例如,您可以建立 rg_classifier_arg_classifier_b

用途

EXEC msdb.dbo.rds_create_classifier_function @function_name = value, @workload_group1 = value, @user_name1 = value, @db_name1 = value, @host_name1 = value, @app_name1 = value, @workload_group2 = value, @user_name2 = value, @db_name2 = value, @host_name2 = value, @app_name2 = value

下列是必要參數:

  • @function_name - 分類器函數的名稱。必須以 開頭 rg_classifier_

  • @workload_group1 - 第一個工作負載群組的名稱

下列是選用參數:

(群組 1 必須指定至少其中一個條件)

  • @user_name1 - 群組 1 的登入名稱

  • @db_name1 - 群組 1 的資料庫名稱

  • @host_name1 - 群組 1 的主機名稱

  • @app_name1 - 群組 1 的應用程式名稱

(如果指定群組 2,必須至少提供一個條件)

  • @workload_group2 - 第二個工作負載群組的名稱

  • @user_name2 - 群組 2 的登入名稱

  • @db_name2 - 群組 2 的資料庫名稱

  • @host_name2 - 群組 2 的主機名稱

  • @app_name2 - 群組 2 的應用程式名稱

注意

系統帳戶、資料庫、應用程式和主機受到限制。

範例

一個工作負載群組的基本範例:

/*Create a classifier to route all requests from 'PowerBI' app to workload group 'reporting_group'*/ EXEC msdb.dbo.rds_create_classifier_function @function_name = 'rg_classifier_a', @workload_group1 = 'reporting_group', @app_name1 = 'PowerBI'; --Register the classifier EXEC msdb.dbo.rds_alter_resource_governor_configuration @classifier_function = 'rg_classifier_a'; -- Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration /*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/ use master go SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name, OBJECT_NAME(classifier_function_id) AS classifier_object_name, is_enabled FROM sys.resource_governor_configuration;

捨棄分類器函數

用途

USE [msdb] EXEC dbo.rds_drop_classifier_function @function_name = value;

以下是必要參數:

  • @function_name - 是現有使用者定義分類器函數的名稱

範例

EXEC msdb.dbo.rds_drop_classifier_function @function_name = 'rg_classifier_b';

取消註冊分類器函數

使用此程序取消註冊分類器函數。取消註冊函數後,新的工作階段會自動指派給預設工作負載群組。

用途

USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration @deregister_function = 1;

若要取消註冊,需要下列參數:

  • @deregister_function 必須是 1

範例

EXEC msdb.dbo.rds_alter_resource_governor_configuration @deregister_function = 1; GO -- Apply changes EXEC msdb.dbo.rds_alter_resource_governor_configuration;

重設統計資料

資源長統計資料是自上次伺服器重新啟動後累積的。如果您需要從特定時間開始收集統計資料,您可以使用下列 Amazon RDS 預存程序重設統計資料。

用途

USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration @reset_statistics = 1;

對於重設統計資料,需要以下參數:

  • @reset_statistics 必須是 1

資源長組態變更

未啟用資源總代理程式時, rds_alter_resource_governor_configuration會啟用資源總代理程式。啟用資源長有下列結果:

  • 如果有分類器函數,則會針對新工作階段執行,將它們指派給工作負載群組。

  • 系統會遵守並強制執行資源總署組態中指定的資源限制。

  • 系統會遵守並強制執行資源總署組態中指定的資源限制。

  • 啟用資源長之前存在的請求可能會受到啟用資源長時所做的任何組態變更的影響。

  • 在啟用資源長之前,現有的請求可能會受到啟用資源長時所做的任何組態變更的影響。

  • 在 RDS for SQL Server 上,EXEC msdb.dbo.rds_alter_resource_governor_configuration必須執行 ,才能使任何資源決策者組態變更生效。

用途

USE [msdb] EXEC dbo.rds_alter_resource_governor_configuration

將 TempDB 繫結至資源集區

您可以使用 Amazon RDS SQL Server 2019 版及更高版本rds_bind_tempdb_metadata_to_resource_pool中的 ,將 tempdb 記憶體最佳化中繼資料繫結至特定資源集區。

注意

必須先啟用記憶體最佳化的 tempdb 中繼資料功能,才能將 tempdb 中繼資料繫結至資源集區。若要在 Amazon RDS 上啟用此功能,其為靜態參數 tempdb metadata memory-optimized

在 Amazon RDS 上啟用靜態參數,並在不容錯移轉的情況下執行重新啟動,讓參數生效:

aws rds modify-db-parameter-group \ --db-parameter-group-name test-sqlserver-ee-2022 \ --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"

用途

USE [msdb] EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool @pool_name=value;

以下是必要參數:

  • @pool_name - 是現有使用者定義資源集區的名稱。

注意

即使已啟用記憶體最佳化的 TempDB 中繼資料功能,此變更也需要在沒有容錯移轉的情況下重新啟動 sql 服務才能生效。

從資源集區取消繫結 TempDB

從資源集區取消綁定 tempdb 記憶體最佳化中繼資料。

注意

此變更也需要重新啟動 sql 服務而不容錯移轉,才能生效

用途

USE [msdb] EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool

清除資源長

此程序是在您從選項群組移除資源總代理程式選項之後,清除所有相關聯的物件。這會停用資源協調器、將預設工作負載群組還原為預設設定、移除自訂工作負載群組、資源集區和分類器函數。

主要功能

  • 將預設工作負載群組還原為預設設定

  • 停用資源長

  • 移除自訂工作負載群組

  • 移除自訂資源集區

  • 捨棄分類器函數

  • 如果啟用,移除 tempdb 資源集區繫結

重要

如果工作負載群組上有作用中的工作階段,則此清除可能會發生錯誤。根據您的業務需求,等待作用中工作階段完成或終止作用中工作階段。建議在維護時段執行此操作。

如果資源集區繫結至 tempdb 且尚未進行容錯移轉重新啟動,則此清除可能會發生錯誤。如果您將資源集區繫結至 tempdb,或從 tempdb 取消繫結資源集區,請執行重新啟動而不容錯移轉,讓變更生效。建議在維護時段執行此操作。

用途

USE [msdb] EXEC dbo.rds_cleanup_resource_governor