本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
工作負載管理
在 Amazon Redshift 中,您可以使用工作負載管理 (WLM) 來定義可用的查詢佇列數,以及如何將查詢路由到這些佇列進行處理。WLM是參數群組組態的一部分。叢集會使用在其關聯參數群組中指定的WLM配置。
建立參數群組時,預設組WLM態包含一個佇列,最多可同時執行五個查詢。如果您想要進一步控制查詢處理,可以新增其他佇列並在每個佇列中配置WLM屬性。您新增的每個佇列都有相同的預設WLM組態,直到您設定其屬性為止。
新增額外的佇列時,組態中最後一個佇列為預設佇列。除非根據WLM組態中的條件將查詢路由到另一個佇列,否則預設佇列會處理該查詢。您可以為預設佇列指定模式和並行層級 (查詢槽),但無法指定預設佇列的使用者群組或查詢群組。
與其他參數一樣,您無法修改預設參數群組中的組WLM態。與預設參數群組相關聯的叢集一律使用預設組WLM態。若要修改組WLM態,請建立新參數群組,然後將該參數群組與任何需要您自訂組WLM態的叢集建立關聯。
WLM動態和靜態屬性
組WLM態屬性是動態或靜態的。您可在不重新啟動叢集的情形下,將動態屬性套用至資料庫,但靜態屬性需要重新啟動叢集才能讓變更生效。如需有關靜態和動態屬性的詳細資訊,請參閱WLM動態和靜態組態屬性。
WLM組態參數的屬性
您可以使WLM用 Amazon Redshift 控制台進行配置 AWS CLI,Amazon RedshiftAPI,或其中之一 AWS SDKs。WLM配置使用數個屬性來定義佇列行為,例如跨佇列配置記憶體、可在佇列中同時執行的查詢數目等。
注意
下列屬性會與其 Amazon Redshift 主控台名稱一起顯示,並在說明中顯示對應的JSON屬性名稱。
下表摘要說明某個性質適用於自動WLM還是手動WLM。
WLM財產 | 自動 WLM | 手動 WLM |
---|---|---|
汽車 WLM | 是 | 是 |
啟用短期查詢加速 | 是 | 是 |
短期查詢最長執行時間 | 是 | 是 |
優先順序 | 是 | 否 |
佇列類型 | 是 | 是 |
佇列名稱 | 是 | 是 |
並行擴展模式 | 是 | 是 |
並行數量 | 否 | 是 |
使用者群組 | 是 | 是 |
使用者群組萬用字元 | 是 | 是 |
查詢群組 | 是 | 是 |
查詢群組萬用字元 | 是 | 是 |
使用者角色 | 是 | 是 |
使用者角色萬用字元 | 是 | 是 |
逾時 | 否 | 已棄用 |
記憶體 | 否 | 是 |
查詢監控規則 | 是 | 是 |
下列清單說明您可以設定的WLM屬性。
- 汽車 WLM
-
自動WLM設定為
true
啟用自動WLM。「自動」WLM 將「主要」和「記憶體 (%)」的「並行」的值設定為。Auto
Amazon Redshift 可管理查詢並行和記憶體配置。預設值為true
。JSON屬性:
auto_wlm
- Enable short query acceleration (啟用短期查詢加速)
-
短查詢加速(SQA)優先於長時間運行的查詢之前選定的短時間運行查詢。SQA在專用空間中執行短時間執行的查詢,以便SQA查詢不會強制在較長的查詢後面的佇列中等待。使用時SQA,短時間執行的查詢可以更快速地開始執行,使用者更快地看到 啟用時SQA,您也可以指定短查詢的最長執行時間。若要啟用SQA,請指定
true
。預設值為false
。此設定適用於每個參數群組,而不是佇列。JSON屬性:
short_query_queue
- 短期查詢最長執行時間
-
啟用時SQA,您可以指定 0 來WLM動態設定短查詢的最長執行時間。或者,您也可以指定 1–20 秒 (以毫秒為單位) 的值。預設值為
0
。JSON屬性:
max_execution_time
- 優先順序
-
優先順序設定在佇列中執行之查詢的優先順序。要設置優先級,WLM模式必須設置為自動 WLM; 也就是說,
auto_wlm
必須true
。優先順序值可以是highest
、high
、normal
、low
和lowest
。預設值為normal
。JSON屬性:
priority
- 佇列類型
-
佇列類型會指定由「自動」WLM 或「手WLM動」使用的佇列。將
queue_type
設定為auto
或manual
。若沒有指定,則預設為manual
。JSON屬性:
queue_type
- 佇列名稱
-
佇列的名稱。您可以根據商業需求設定佇列名稱。佇列名稱在WLM組態中必須是唯一的,最多可包含 64 個英數字元、底線或空格,且不能包含引號。例如,如果您有ETL查詢的佇列,您可以將其命名
ETL queue
。此名稱用於指標、系統資料表值和 Amazon Redshift 主控台中,以識別佇列。使用來自這些來源之名稱的查詢和報告必須能夠處理名稱的變更。先前,佇列名稱是由 Amazon Redshift 產生的。佇列的預設名稱是Queue 1
、Queue 2
到最後一個名為Default queue
的佇列。重要
如果您變更佇列名稱,WLM佇列測量結果 (例如、WLMQueueLength、WLMQueueWaitTime、WLMQueriesCompletedPerSecondWLMQueryDurationWLMRunningQueries、等) 的
QueueName
維度值也會變更。因此,如果您變更佇列的名稱,您可能需要變更已設定的 CloudWatch 警示。JSON屬性:
name
- Concurrency Scaling mode (並行擴展模式)
-
若要啟用佇列的並行擴展,請將 Concurrency Scaling mode (並行擴展模式) 設定為
auto
。當路由至佇列的查詢數量超過佇列設定的並行時,合格查詢將前往擴展叢集。當有可用的空位時,查詢會執行於主要叢集。預設值為off
。JSON屬性:
concurrency_scaling
- 並行數量
-
可在手動WLM佇列中同時執行的查詢數目。此屬性僅適用於手動WLM。如果並行擴展已啟用,當佇列達到並行層級 (查詢槽) 時,合格查詢將前往擴展叢集。如果並行擴展未啟用,查詢會在佇列中等待,直到有空位為止。範圍介於 1 與 50 之間。
JSON屬性:
query_concurrency
- User Groups (使用者群組)
-
逗號分隔的使用者群組名稱清單。使用者群組的成員在資料庫內執行查詢時,其查詢會路由至與其使用者群組相關聯的佇列。
JSON屬性:
user_group
- User Group Wildcard (使用者群組萬用字元)
-
布林值類型,用以指示是否啟用使用者群組的萬用字元。如果為 0,表示萬用字元為停用;如果為 1,表示萬用字元為啟用。當萬用字元啟用時,您可以在執行查詢時使用 "*" 或 "?" 來指定多個使用者群組。如需詳細資訊,請參閱萬用字元。
JSON屬性:
user_group_wild_card
- Query Groups (查詢群組)
-
逗號分隔的查詢群組清單。查詢群組的成員在資料庫內執行查詢時,其查詢會路由至與其查詢群組相關聯的佇列。
JSON屬性:
query_group
- Query Group Wildcard (查詢群組萬用字元)
-
布林值類型,用以指示是否啟用查詢群組的萬用字元。如果為 0,表示萬用字元為停用;如果為 1,表示萬用字元為啟用。當萬用字元啟用時,您可以在執行查詢時使用 "*" 或 "?" 來指定多個查詢群組。如需詳細資訊,請參閱萬用字元。
JSON屬性:
query_group_wild_card
- 使用者角色
-
逗號分隔的使用者角色清單。具有該使用者角色的成員在資料庫內執行查詢時,其查詢會路由至與其使用者角色相關聯的佇列。如需使用者角色的詳細資訊,請參閱以角色為基礎的存取控制 (RBAC)。
JSON屬性:
user_role
- 使用者角色萬用字元
-
布林值類型,用以指示是否啟用查詢群組的萬用字元。如果為 0,表示萬用字元為停用;如果為 1,表示萬用字元為啟用。當萬用字元啟用時,您可以在執行查詢時使用 "*" 或 "?" 來指定多個查詢群組。如需詳細資訊,請參閱萬用字元。
JSON屬性:
user_role_wild_card
- Timeout (ms) (逾時 (毫秒))
-
WLM超時(
max_execution_time
)已棄用。使用自動時不可用WLM。請改為建立查詢監視規則 (QMR),query_execution_time
以限制查詢經過的執行時間。如需詳細資訊,請參閱WLM查詢監視規則。查詢遭取消前所能執行的最長時間 (毫秒)。在某些情況下,唯讀查詢 (例如SELECT陳述式) 可能會因為WLM逾時而取消。在這些情況下,會WLM嘗試根據佇列指派規則將查詢路由至下一個相符WLM佇列。如果查詢不符合任何其他的佇列定義,此查詢將取消;不會指派給預設佇列。如需詳細資訊,請參閱WLM查詢佇列跳轉。WLM超時不適用於已達到
returning
狀態的查詢。若要檢視查詢的狀態,請參閱 STV_ _ WLM QUERY _ STATE 系統資料表。JSON屬性:
max_execution_time
- Memory (%) (記憶體 (%))
-
配置給佇列的記憶體百分比。若您要為至少一個佇列指定記憶體百分比,您必須為所有其他佇列指定總共 100% 的記憶體。如果所有佇列合計的記憶體配置低於 100%,則未配置的記憶體由該服務管理。該服務可將未配置的記憶體,暫時提供給需要更多記憶體來處理的佇列。
JSON屬性:
memory_percent_to_use
- 查詢監控規則
-
您可以使用WLM查詢監視規則,根據您指定的準則或述詞,持續監視WLM佇列中的查詢。例如,您可監控經常使用過多系統資源的查詢,並在查詢超過指定的效能邊界時啟動指定動作。
注意
如果您選擇以程式設計方式建立規則,強烈建議您使用主控台產生您包含在參數群組定義中的規則。JSON
您需將查詢監控規則與特定的查詢佇列相關聯。每個佇列最多可以有 25 個規則,而全部佇列合計最多 25 規則。
JSON屬性:
rules
JSON屬性層次結構:
rules rule_name predicate metric_name operator value action value
針對每個規則,您指定下列屬性:
-
rule_name
— 規則名稱在WLM組態中必須是唯一的。規則名稱最多為 32 個英數字元或底線,且不可含有空格和問號。-
predicate
— 每個規則最多可以有三個述詞。針對每個述詞,您指定下列屬性。-
metric_name
— 如需指標清單,請參閱《Amazon Redshift 資料庫開發人員指南》中的查詢監控指標。 -
operator
— 運算子為=
、<
和>
。 -
value
— 觸發動作之指定指標的閾值。
-
-
-
action
— 每個規則都與一個動作相關聯。有效的動作為:-
log
-
hop
(僅適用於手動WLM) -
abort
-
change_query_priority
(僅適用於自動WLM)
-
下列範例顯示名JSON為的WLM查詢監視規則
rule_1
,其中包含兩個述詞和動作hop
。"rules": [ { "rule_name": "rule_1", "predicate": [ { "metric_name": "query_execution_time", "operator": ">", "value": 100000 }, { "metric_name": "query_blocks_read", "operator": ">", "value": 1000 } ], "action": "hop" } ]
-
如需這些屬性和用於設定查詢佇列的策略的相關資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的實作工作負載管理。
使用配置WLM參數 AWS CLI
若要設定WLM,請修改wlm_json_configuration
參數。wlm_json_configuration
屬性值的大小上限為 8000 個字元。該值在 JavaScript 對象表示法(JSON)中格式化。如果您WLM使用 AWS CLI,Amazon RedshiftAPI,或其中之一 AWS SDKs,請使用本節的其餘部分來學習如何建JSON構wlm_json_configuration
參數的結構。
注意
如果使用 Amazon Redshift 主控台進行設定WLM,則不需要瞭解JSON格式化,因為主控台提供了一種簡單的方法來新增佇列和設定佇列的屬性。如需使用主控台進WLM行設定的詳細資訊,請參閱修改參數群組。
範例
下面的例子是默認WLM配置,它定義了一個自動的隊列WLM。
{ "auto_wlm": true }
範例
下列範例是自訂WLM組態,它會定義一個並行等級 (查詢位置) 為五個的手動WLM佇列。
{ "query_concurrency":5 }
語法
默認WLM配置非常簡單,只有隊列和一個屬性。您可以為JSON結構中的每個佇列新增更多佇列並配置多個內容。下列語法代表您用來配置具有多個屬性的多個佇列的JSON結構:
[ { "ParameterName":"wlm_json_configuration", "ParameterValue": "[ { "
q1_first_property_name
":"q1_first_property_value
", "q1_second_property_name
":"q1_second_property_value
", ... }, { "q2_first_property_name
":"q2_first_property_value
", "q2_second_property_name
":"q2_second_property_value
", ... } ... ]" } ]
在上述範例中,開頭為 q1 的代表性屬性為第一個佇列陣列中的物件。這些對象中的每一個都是一個名稱/值對; name
並value
一起設置第一個隊列的WLM屬性。開頭為 q2 的代表性屬性為第二個佇列陣列中的物件。如果您需要更多佇列,可為其他的每個佇列新增額外的陣列,並設定各物件的屬性。
修改WLM組態時,即使您只想要變更佇列中的一個屬性,也必須包含在整個佇列結構中。這是因為整個JSON結構作為字符串作為wlm_json_configuration
參數的值傳入。
格式化 AWS CLI command
使用時,wlm_json_configuration
參數需要特定的格式 AWS CLI。 您使用的格式取決於您的用戶端作業系統。作業系統有不同的方式來封閉結JSON構,以便從命令列正確傳遞。如需如何在 Linux、Mac OS X 和 Windows 作業系統中建構合適命令的詳細資訊,請參閱下列各節。有關將JSON數據結構封閉在中的差異的更多信息 AWS CLI 一般來說,請參閱引用字串 AWS Command Line Interface 用戶指南。
範例
下列範例指令會WLM為名為的參數群組配置手動。example-parameter-group
此組態會啟用短查詢加速,並將短期查詢的最大執行時間設定為 0,這會指示WLM動態設定值。ApplyType
設定為 dynamic
。此設定表示對參數中動態屬性進行的任何變更將立即套用,除非組態有任何其他靜態變更。該組態定義三個佇列,內容如下:
-
第一個佇列可讓使用者指定
report
為佇列中的標籤 (如query_group
屬性中所指定),以協助將查詢路由至該佇列。report*
標籤將啟用萬用字元搜尋,因此不需要精確指定要路由至佇列的查詢。例如,reports
和reporting
皆符合此查詢群組。佇列將從所有佇列的總記憶體中分配到 25%,且最多可同時執行四個查詢。查詢限制的最長時間為 20000 毫秒 (ms)。模式設定為自動,因此當佇列的查詢空位已滿時,合格查詢將傳送到擴展叢集。 -
第二個佇列可讓屬於資料庫中
admin
或dba
群組成員的使用者將其查詢路由至佇列,以進行處理。使用者群組不可用萬用字元搜尋,因此使用者必須與資料庫中的群組精確相符,其查詢才會路由至佇列。佇列將從所有佇列的總記憶體中分配到 40%,且最多可同時執行五個查詢。模式設為關閉,因此 admin 或 dba 群組成員傳送的所有查詢都會在主要叢集上執行。 -
組態中的最後一個佇列為預設佇列。此佇列將從所有佇列的總記憶體中分配到 35%,且一次最多可處理五個查詢。模式設為自動。
注意
範例以多行顯示,做為示範之用。實際的命令不應包含分行符號。
aws redshift modify-cluster-parameter-group --parameter-group-name example-parameter-group --parameters '[ { "query_concurrency": 4, "max_execution_time": 20000, "memory_percent_to_use": 25, "query_group": ["report"], "query_group_wild_card": 1, "user_group": [], "user_group_wild_card": 0, "user_role": [], "user_role_wild_card": 0, "concurrency_scaling": "auto", "queue_type": "manual" }, { "query_concurrency": 5, "memory_percent_to_use": 40, "query_group": [], "query_group_wild_card": 0, "user_group": [ "admin", "dba" ], "user_group_wild_card": 0, "user_role": [], "user_role_wild_card": 0, "concurrency_scaling": "off", "queue_type": "manual" }, { "query_concurrency": 5, "query_group": [], "query_group_wild_card": 0, "user_group": [], "user_group_wild_card": 0, "user_role": [], "user_role_wild_card": 0, "concurrency_scaling": "auto", "queue_type": "manual" }, {"short_query_queue": true} ]'
以下是為自動WLM組態設定WLM查詢監視規則的範例。下列範例建立名為 example-monitoring-rules
的參數群組。此組態定義與先前範例中相同的三個佇列,但不再指定 query_concurrency
和 memory_percent_to_use
。組態還新增了以下規則和查詢優先順序:
-
第一個佇列定義名為
rule_1
的規則。規則有兩個述詞:query_cpu_time > 10000000
和query_blocks_read > 1000
。規則動作為log
。此佇列的優先順序為Normal
。 -
第二個佇列定義名為
rule_2
的規則。規則有兩個述詞:query_execution_time > 600000000
和scan_row_count > 1000000000
。規則動作為abort
。此佇列的優先順序為Highest
。 -
組態中的最後一個佇列為預設佇列。此佇列的優先順序為
Low
。
注意
範例以多行顯示,做為示範之用。實際的命令不應包含分行符號。
aws redshift modify-cluster-parameter-group --parameter-group-name example-monitoring-rules --parameters '[ { "query_group" : [ "report" ], "query_group_wild_card" : 1, "user_group" : [ ], "user_group_wild_card" : 0, "user_role": [ ], "user_role_wild_card": 0, "concurrency_scaling" : "auto", "rules" : [{ "rule_name": "rule_1", "predicate": [{ "metric_name": "query_cpu_time", "operator": ">", "value": 1000000 }, { "metric_name": "query_blocks_read", "operator": ">", "value": 1000 } ], "action" : "log" } ], "priority": "normal", "queue_type": "auto" }, { "query_group" : [ ], "query_group_wild_card" : 0, "user_group" : [ "admin", "dba" ], "user_group_wild_card" : 0, "user_role": [ ], "user_role_wild_card": 0, "concurrency_scaling" : "off", "rules" : [ { "rule_name": "rule_2", "predicate": [ {"metric_name": "query_execution_time", "operator": ">", "value": 600000000}, {"metric_name": "scan_row_count", "operator": ">", "value": 1000000000}], "action": "abort"}], "priority": "high", "queue_type": "auto" }, { "query_group" : [ ], "query_group_wild_card" : 0, "user_group" : [ ], "user_group_wild_card" : 0, "user_role": [ ], "user_role_wild_card": 0, "concurrency_scaling" : "auto", "priority": "low", "queue_type": "auto", "auto_wlm": true }, { "short_query_queue" : true } ]'
使WLM用配置 AWS CLI 在命令行中有一個JSON文件
您可以使用修改wlm_json_configuration
參數 AWS CLI 並將參parameters
數的值作為JSON文件傳遞。
aws redshift modify-cluster-parameter-group --parameter-group-name myclusterparaametergroup --parameters file://modify_pg.json
--parameters
的引數會儲存在 modify_pg.json
檔案中。檔案位置會以您的作業系統的格式指定。如需詳細資訊,請參閱從檔案載入參數。以下顯示modify_pg.json
JSON檔案內容的範例。
[ { "ParameterName": "wlm_json_configuration", "ParameterValue": "[{\"user_group\":\"example_user_group1\",\"query_group\": \"example_query_group1\", \"query_concurrency\":7},{\"query_concurrency\":5}]" } ]
[ { "ParameterName": "wlm_json_configuration", "ParameterValue": "[{\"query_group\":[\"reports\"],\"query_group_wild_card\":0,\"query_concurrency\":4,\"max_execution_time\":20000,\"memory_percent_to_use\":25},{\"user_group\":[\"admin\",\"dba\"],\"user_group_wild_card\":1,\"query_concurrency\":5,\"memory_percent_to_use\":40},{\"query_concurrency\":5,\"memory_percent_to_use\":35},{\"short_query_queue\": true, \"max_execution_time\": 5000 }]", "ApplyType": "dynamic" } ]
使用配置WLM的規則 AWS CLI 在 Linux 和 macOS X 操作系統上的命令行
請按照以下規則運行 AWS CLI 在一行上帶有參數的命令:
-
整個JSON結構必須用單引號 (') 和一組括號 ([]) 括住。
-
所有參數名稱和參數值必須包圍在雙引號 (") 內。
-
ParameterValue
值內的整個巢狀結構必須包圍在雙引號 (") 和括號 ([ ]) 內。 -
巢狀結構內每個佇列的每個屬性和值必須包圍在大括號 ({ }) 內。
-
巢狀結構內的每個雙引號 (") 前必須使用反斜線 (\) 逸出字元。
-
如為名稱/值對,冒號 (:) 可分隔每個屬性與值。
-
每個名稱/值對用逗號 (,) 區隔。
-
多重佇列在佇列結束大括號 (}) 和下一個佇列起始大括號 ({) 之間用逗號 (,) 分隔。
使用配置WLM的規則 AWS CLI 在 Microsoft PowerShell 視窗作業系統
請按照以下規則運行 AWS CLI 在一行上帶有參數的命令:
-
整個JSON結構必須用單引號 (') 和一組括號 ([]) 括住。
-
所有參數名稱和參數值必須包圍在雙引號 (") 內。
-
ParameterValue
值內的整個巢狀結構必須包圍在雙引號 (") 和括號 ([ ]) 內。 -
巢狀結構內每個佇列的每個屬性和值必須包圍在大括號 ({ }) 內。
-
巢狀結構內的每個雙引號 (") 和其反斜線 (\) 逸出字元前必須使用反斜線 (\) 逸出字元。此需求意味著您將使用三個反斜線和一個雙引號,以確定用正確方式傳送屬性 (\\\")。
-
如為名稱/值對,冒號 (:) 可分隔每個屬性與值。
-
每個名稱/值對用逗號 (,) 區隔。
-
多重佇列在佇列結束大括號 (}) 和下一個佇列起始大括號 ({) 之間用逗號 (,) 分隔。
在 Windows 作業系統上WLM使用命令提示字元進行設定的規則
請按照以下規則運行 AWS CLI 在一行上帶有參數的命令:
-
整個JSON結構必須用雙引號 (「) 和一組括號 ([]) 括住。
-
所有參數名稱和參數值必須包圍在雙引號 (") 內。
-
ParameterValue
值內的整個巢狀結構必須包圍在雙引號 (") 和括號 ([ ]) 內。 -
巢狀結構內每個佇列的每個屬性和值必須包圍在大括號 ({ }) 內。
-
巢狀結構內的每個雙引號 (") 和其反斜線 (\) 逸出字元前必須使用反斜線 (\) 逸出字元。此需求意味著您將使用三個反斜線和一個雙引號,以確定用正確方式傳送屬性 (\\\")。
-
如為名稱/值對,冒號 (:) 可分隔每個屬性與值。
-
每個名稱/值對用逗號 (,) 區隔。
-
多重佇列在佇列結束大括號 (}) 和下一個佇列起始大括號 ({) 之間用逗號 (,) 分隔。