使用短期查詢加速 - Amazon Redshift

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

使用短期查詢加速

短期查詢加速 (SQA) 可排定讓短期執行的查詢優先於長期執行的查詢。SQA 會在專用空間中執行短期查詢,所以 SQA 查詢不會被迫在佇列中排在長期查詢後面等待。SQA 只優先處理短期執行且位於使用者定義佇列中的查詢。SQA 可讓短期執行的查詢更快開始執行,使用者會更快看到結果。

如果啟用 SQA,您可以減少短期查詢執行專用的工作負載管理 (WLM) 佇列。此外,長期執行的查詢不需要與短期查詢爭奪佇列中的槽,因此,您可以將 WLM 佇列設定為使用較少的查詢槽。使用較低的並行性時,就大部分工作負載而言,查詢傳輸量會增加,且整體系統效能會改善。

CREATE TABLE AS (CTAS) 陳述式和唯讀查詢 (例如 SELECT 陳述式) 符合 SQA 的資格。

Amazon Redshift 採用機器學習演算法來分析每一個合格查詢,並預測查詢的執行時間。根據預設,WLM 會根據叢集工作負載的分析結果,動態指派 SQA 最長執行時間的值。或者,您可以指定固定值 1–20 秒。如果查詢的預測執行時間小於定義或動態指派的 SQA 最大執行期,而且查詢正在 WLM 佇列中等候,則 SQA 會將查詢與 WLM 佇列區隔,並排定其優先執行順序。如果查詢執行的時間比 SQA 最長執行時間還久,WLM 會根據 WLM 佇列指派規則,將查詢移至第一個相符的 WLM 佇列。隨著 SQA 從查詢模式中學習一段時間,預測會越準確。

根據預設,SQA 在預設參數群組中會啟用,且適用於所有新的參數群組。若要在 Amazon Redshift 主控台停用 SQA,請編輯參數群組的 WLM 組態,並取消選取啟用短期查詢加速。在最佳作法上,建議使用的 WLM 查詢槽計數為 15 或更少,以維持最佳的整體系統效能。如需修改 WLM 組態的資訊,請參閱《Amazon Redshift 管理指南》中的設定工作負載管理

短期查詢最長執行時間

啟用 SQA 時,根據預設,WLM 會將短期查詢的最長執行時間設為動態。建議維持 SQA 最長執行時間的動態設定。您可以指定固定值 1–20 秒以覆寫預設設定。

在某些情況下,您可能考慮針對 SQA 最長執行時間值使用不同的值,以改善系統效能。在此情況下,請分析工作負載,以找出大部分短期執行查詢的最長執行時間。下列查詢傳回第 70 個百分位數附近之查詢的最長執行時間。

select least(greatest(percentile_cont(0.7) within group (order by total_exec_time / 1000000) + 2, 2), 20) from stl_wlm_query where userid >= 100 and final_state = 'Completed';

決定適合工作負載的最長執行時間值之後,就不需要變更,除非工作負載大幅改變。

監控 SQA

若要檢查是否已啟用 SQA,請執行下列查詢。如果查詢傳回一列,表示 SQA 已啟用。

select * from stv_wlm_service_class_config where service_class = 14;

下列查詢顯示通過每個查詢佇列 (服務類別) 的查詢數。也顯示平均執行時間、第 90 個百分位數的查詢數和等待時間,以及平均等待時間。SQA 查詢使用服務類別 14。

select final_state, service_class, count(*), avg(total_exec_time), percentile_cont(0.9) within group (order by total_queue_time), avg(total_queue_time) from stl_wlm_query where userid >= 100 group by 1,2 order by 2,1;

若要找出哪些查詢由 SQA 挑出且成功完成,請執行下列查詢。

select a.queue_start_time, a.total_exec_time, label, trim(querytxt) from stl_wlm_query a, stl_query b where a.query = b.query and a.service_class = 14 and a.final_state = 'Completed' order by b.query desc limit 5;

若要找出由 SQA 挑出但逾時的查詢,請執行下列查詢。

select a.queue_start_time, a.total_exec_time, label, trim(querytxt) from stl_wlm_query a, stl_query b where a.query = b.query and a.service_class = 14 and a.final_state = 'Evicted' order by b.query desc limit 5;

如需移出查詢的相關資訊,以及可對查詢執行之更普遍的規則式動作的詳細資訊,請參閱 WLM 查詢監控規則