第 1 節:了解預設佇列處理行為 - Amazon Redshift

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

第 1 節:了解預設佇列處理行為

在開始設定手動 WLM 之前,先了解 Amazon Redshift 中佇列處理的預設行為很有幫助。您將在本節建立兩個資料庫檢視,這些檢視會傳回多個系統資料表的資訊。然後,您將執行一些測試查詢,以查看預設情況下如何路由查詢。如需系統資料表的相關資訊,請參閱系統資料表和檢視參考

步驟 1:建立 WLM_QUEUE_STATE_VW 檢視

在此步驟,您要建立名為 WLM_QUEUE_STATE_VW 的檢視。此檢視會回傳下列系統資料表的資訊。

您將在整個教學課程中使用此檢視來監控您變更 WLM 組態後佇列發生的事。下表說明 WLM_QUEUE_STATE_VW 檢視傳回的資料。

資料欄 描述
佇列 與表示佇列的資料列關聯的數量。佇列數量決定了佇列在資料庫中的順序。
description 此值描述佇列是僅用於某些使用者群組、某些查詢群組、或是所有類型的查詢。
slots 配置給佇列的槽數量。
mem 配置給佇列的記憶體數量 (單位為 MB/槽)。
max_execution_time 在終止查詢之前允許查詢執行的時間。
user_* 此值指示 WLM 組態是否允許使用萬元字元來比對使用者群組。
query_* 此值指示 WLM 組態是否允許使用萬元字元來比對查詢群組。
queued 佇列中正在等待處理的查詢數量。
執行中 目前執行中的查詢數。
executed 已執行的佇列數量。

建立 WLM_QUEUE_STATE_VW 檢視

  1. 開啟 Amazon Redshift SQL 並連接到您的 TICKIT 範例資料庫。如果您沒有此資料庫,請參閱必要條件

  2. 執行下列查詢以建立 WLM_QUEUE_STATE_VW 檢視。

    create view WLM_QUEUE_STATE_VW as select (config.service_class-5) as queue , trim (class.condition) as description , config.num_query_tasks as slots , config.query_working_mem as mem , config.max_execution_time as max_time , config.user_group_wild_card as "user_*" , config.query_group_wild_card as "query_*" , state.num_queued_queries queued , state.num_executing_queries executing , state.num_executed_queries executed from STV_WLM_CLASSIFICATION_CONFIG class, STV_WLM_SERVICE_CLASS_CONFIG config, STV_WLM_SERVICE_CLASS_STATE state where class.action_service_class = config.service_class and class.action_service_class = state.service_class and config.service_class > 4 order by config.service_class;
  3. 執行下列查詢以查看檢視中包含的資訊。

    select * from wlm_queue_state_vw;

    以下是結果範例。

步驟 2:建立 WLM_QUERY_STATE_VW 檢視

在此步驟,您要建立名為 WLM_QUERY_STATE_VW 的檢視。此檢視會回傳 STV_WLM_QUERY_STATE 系統資料表的資訊。

您將在整個教學課程中使用此檢視來監控執行中的佇列。下表說明 WLM_QUERY_STATE_VW 檢視傳回的資料。

資料欄 描述
query 查詢 ID。
佇列 佇列數量。
slot_count 配置給查詢的槽數量。
start_time 查詢開始的時間。
state 查詢的狀態,例如 executing (執行中)。
queue_time 查詢在佇列中花費的時間 (微秒)。
exec_time 查詢已執行的微秒數。

建立 WLM_QUERY_STATE_VW 檢視

  1. 在 RSQL 中,執行下列查詢以建立 WLM_QUERY_STATE_VW 檢視。

    create view WLM_QUERY_STATE_VW as select query, (service_class-5) as queue, slot_count, trim(wlm_start_time) as start_time, trim(state) as state, trim(queue_time) as queue_time, trim(exec_time) as exec_time from stv_wlm_query_state;
  2. 執行下列查詢以查看檢視中包含的資訊。

    select * from wlm_query_state_vw;

    以下是結果範例。

步驟 3:執行測試查詢

在此步驟中,您將在 RSQL 中從多個連線執行查詢,然後查看系統資料表以判斷系統如何路由要處理的查詢。

您在這個步驟需要開啟兩個 RSQL 視窗:

  • 在第 1 個 RSQL 視窗中,您將使用您在本教學課程中已建立的檢視,執行查詢來監視佇列和查詢的狀態。

  • 在第 2 個 RSQL 視窗中,您將執行長時間執行的查詢來變更在第 1 個 RSQL 視窗中找到的結果。

執行測試查詢

  1. 開啟兩個 RSQL 視窗。如果您已經開啟一個視窗,則只需再開啟第二個視窗。這兩個連線皆可使用相同的使用者帳戶。

  2. 在第 1 個 RSQL 視窗中執行下列查詢。

    select * from wlm_query_state_vw;

    以下是結果範例。

    此查詢會傳回自我參考的結果。目前正在執行的查詢是此檢視中的 SELECT 陳述式。此檢視的查詢一律會至少傳回一個結果。比較此結果與在下一步驟中啟動的長時間執行查詢所產生的結果。

  3. 在第 2 個 RSQL 視窗中,從 TICKIT 範本資料庫執行查詢。此查詢應該會執行大約一分鐘,以便您有時間瀏覽 WLM_QUEUE_STATE_VW 檢視的結果以及之前建立的WLM_QUERY_STATE_VW 檢視的結果。在某些情況下,您可能發覺查詢執行時間不夠讓您查詢這兩個檢視。在這些情況下,您可以在 l.listid 上提高篩選條件的值,讓它執行更久。

    注意

    為了縮短查詢執行時間並改善系統效能,Amazon Redshift 會將特定查詢類型的結果快取在領導者節點的記憶體中。啟用結果快取後,後續的查詢會執行得更快。若要防止查詢執行過快,可停用目前工作階段的結果快取。

    若要關閉目前工作階段的結果快取,將 enable_result_cache_for_session 參數設為 off,如下所示。

    set enable_result_cache_for_session to off;

    在第 2 個 RSQL 視窗中執行下列查詢。

    select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid < 100000;
  4. 在第 1 個 RSQL 視窗中,查詢 WLM_QUEUE_STATE_VW 和 WLM_QUERY_STATE_VW,並比較其結果與先前的結果。

    select * from wlm_queue_state_vw; select * from wlm_query_state_vw;

    以下為結果範例。

請注意,您之前的查詢結果與此步驟的結果之間有以下差異:

  • 現在 WLM_QUERY_STATE_VW 中有兩個資料列。一個結果是在此檢視上執行 SELECT 操作的自我參考查詢。第二個結果是上一步驟中長時間執行的查詢。

  • WLM_QUEUE_STATE_VW 中的執行中欄位已從 1 增加到 2。此欄位值表示佇列中有兩個正在執行的查詢。

  • 每次在佇列中執行查詢,executed 欄位都會遞增。

WLM_QUEUE_STATE_VW 檢視有助於取得佇列的整體來到以及每個佇列中正在處理的查詢數量。WLM_QUERY_STATE_VW 檢視則有助於取得目前正在執行的各個查詢的更詳細檢視。