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

掃描并發控制

更新時間:

AnalyticDB for MySQL支持配置掃描并發額度,可避免因查詢的掃描并發過大、占用過多資源,導致節點不穩定的情況。本文為您介紹如何開啟掃描并發控制功能和配置掃描并發額度。

前提條件

集群內核版本需為3.1.10.0及以上版本。

說明 如何查看集群內核版本,請參見如何查看實例版本信息。如需升級內核版本,請聯系技術支持。

背景信息

AnalyticDB for MySQL在執行查詢時,需要從數據源掃描數據,掃描任務會被調度到存儲節點或計算節點上執行,節點的掃描任務并發數過大,可能會造成以下問題:

  • 內表的掃描任務并發數過大會導致存儲節點IO爭搶嚴重,CPU和內存使用率增加,導致存儲節點不穩定。

  • 外表的掃描效率受數據源的限制,當掃描任務并發數超過限制后,增加掃描任務并發數并不會加快掃描速度,反而會占用計算節點的資源,影響其他查詢。

為解決以上問題,AnalyticDB for MySQL推出了掃描并發控制功能,該功能默認開啟。

基本概念

Task

AnalyticDB for MySQL中,查詢會被切分成多個Stage,Stage會調度到多個節點上執行,每個執行的子任務稱為一個Task。

Split

AnalyticDB for MySQL中,對一張表的掃描會被拆分為多個數據片(Split)的掃描,Split會被調度到某個Task上,由Task執行該Split的掃描任務。一個Task中可以有多個Split掃描任務。

功能介紹

每個Task都有一個掃描并發額度,當Task實際運行的Split掃描并發數小于掃描并發額度時,Task可以啟動一個新的Split掃描任務;反之,調度到該Task的Split需要等待已有的掃描任務結束后才可以執行。AnalyticDB for MySQL支持節點的掃描并發控制和Task的掃描并發控制。其中,Task的掃描并發額度可以根據節點整體的掃描并發額度動態調整。

關閉或重新開啟掃描并發控制功能

掃描并發控制功能默認開啟,您可以通過下列命令關閉或重新開啟掃描并發控制功能。

  • 集群級別關閉或重新開啟掃描并發控制功能:

    SET ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED=true|false;
  • 查詢級別關閉或重新開啟掃描并發控制功能:

    /*SPLIT_FLOW_CONTROL_ENABLED=true|false*/ SELECT * FROM table;

動態調整Task掃描并發額度

開啟和關閉動態調整Task掃描并發功能

未開啟動態調整Task掃描并發功能時,Task的掃描并發額度默認值為32,且可以通過SET ADB_CONFIG TARGET_RUNNING_SPLITS_LIMIT_PER_TASK=<value>;調整默認值。

您也可以開啟態調整Task掃描并發功能,根據節點整體的掃描并發額度,動態調整task的掃描并發額度。

SET ADB_CONFIG NODE_LEVEL_SPLIT_FLOW_CONTROL_ENABLED=true|false;
重要

開啟動態調整Task掃描并發功能時,需確保已開啟掃描并發控制功能。您可以使用SHOW ADB_CONFIG KEY=SPLIT_FLOW_CONTROL_ENABLED;命令查詢是否開啟掃描并發控制功能。

調整Task掃描并發額度

調整方法

您可通過SET命令或Hint在集群級別和查詢級別調整Task掃描并發額度:

  • 集群級別調整Task掃描并發額度:

    SET ADB_CONFIG <Task掃描并發參數>=<value>;
  • 查詢級別調整Task掃描并發額度:

    /*<Task掃描并發參數>=<value>*/SELECT * FROM orders;

Task掃描并發參數

配置以下參數,動態調整Task的掃描并發額度,參數如下表所示:

參數

說明

MIN_RUNNING_SPLITS_LIMIT_PER_TASK

Task掃描并發額度的最小值。默認值為1,取值范圍為[1,TARGET_RUNNING_SPLITS_LIMIT_PER_TASK]

開啟動態調整Task掃描并發功能后,當節點上運行的掃描并發數較高時,節點會動態降低Task的掃描并發額度,最小不低于該值。

TARGET_RUNNING_SPLITS_LIMIT_PER_TASK

Task掃描并發額度的中間值,基于該值增加或降低掃描并發額度。默認值為32,取值范圍為[MIN_RUNNING_SPLITS_LIMIT_PER_TASK,MAX_RUNNING_SPLITS_LIMIT_PER_TASK]。

當節點上運行的所有Task的掃描并發數的中間值之和小于節點并發額度時,節點會動態增加Task掃描并發額度;反之會動態降低Task掃描并發額度。

MAX_RUNNING_SPLITS_LIMIT_PER_TASK

Task掃描并發額度的最大值。默認值為64,取值范圍大于TARGET_RUNNING_SPLITS_LIMIT_PER_TASK值。

開啟動態調整Task掃描并發功能后,當節點上運行的掃描并發數較低時,節點會動態增加Task的掃描并發額度,且最大不高于該值。

Task掃描并發額度的調整建議

AnalyticDB for MySQL支持對不同的查詢配置不同的掃描并發額度,從而將有限的資源按照不同要求在不同Task之間分配。例如:

  • 查詢RT小,掃描量小的查詢(例如:點查場景):您可以將MIN_RUNNING_SPLITS_LIMIT_PER_TASKTARGET_RUNNING_SPLITS_LIMIT_PER_TASKMAX_RUNNING_SPLITS_LIMIT_PER_TASK三個參數都設置為一個很大的值,或直接關閉掃描并發控制功能(即SET ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED=false;),確保查詢的所有掃描任務均能快速啟動。

  • 掃描量大,執行優先級不高的查詢:您可以將TARGET_RUNNING_SPLITS_LIMIT_PER_TASK設置為一個較小的值,在資源緊張時查詢只會占用很小的額度,減少對其他重要查詢的影響;在資源空閑時也可能動態增加并發數來提升執行效率。

  • 外表查詢:您可以根據數據源的傳輸限制等因素設置合適的并發數。

示例

  • 在集群級別將所有Task掃描并發額度的最小值設置為24。

    SET ADB_CONFIG MIN_RUNNING_SPLITS_LIMIT_PER_TASK=24;
  • 在查詢級別將指定Task掃描任務的并發額度最小值設置為10。

    /*MIN_RUNNING_SPLITS_LIMIT_PER_TASK=10*/SELECT * FROM orders;
  • 在集群級別將所有Task掃描并發額度的最大值設置為128。

    SET ADB_CONFIG MAX_RUNNING_SPLITS_LIMIT_PER_TASK=128;
  • 在查詢級別將指定Task掃描任務的并發額度最大值設置為100。

    /*MAX_RUNNING_SPLITS_LIMIT_PER_TASK=100*/SELECT * FROM adb_test;

配置節點的掃描并發額度

  • 存儲節點

    存儲節點的掃描并發額度默認為256,掃描并發額度過大或過小都會影響集群性能,建議您不要修改默認值。命令如下:

    SET ADB_CONFIG WORKER_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
  • 計算節點

    計算節點的掃描并發額度默認為256,掃描并發額度過大或過小都會影響集群性能,建議您不要修改默認值。命令如下:

    SET ADB_CONFIG EXECUTOR_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
重要
  • 您可以使用SHOW ADB_CONFIG命令查看節點的掃描并發額度,詳情請參見SHOW ADB_CONFIG

  • 設置節點級別的掃描并發額度后,可能不會立即生效。原因如下:

    • 設置節點級別的掃描并發額度后,僅對節點中未運行的掃描任務生效,對當前節點中已運行的掃描任務不會生效。因此,降低掃描并發額度時,需等待已經開始執行的掃描任務執行完成。

    • 掃描并發控制會確保所有Task的掃描并發數大于所設置的最小值。當節點上所有Task掃描并發數的最小值之和超過節點的掃描并發額度時,會導致實際并發數超過設定的節點并發額度。