全部產品
Search
文件中心

PolarDB:資源管理使用說明

更新時間:Dec 05, 2025

PolarDB MySQL版新增資源控制(Resource control)功能,支援建立資源控制規則,以限制特定使用者、資料庫或串連ID所使用的資源。通過這一功能,您可以從使用者、資料庫或串連的角度限制CPU資源的使用,以防止突發流量對線上業務造成影響,並能夠迅速對某些大查詢進行資源限制。

版本限制

  • 僅支援企業版。

  • 產品系列為叢集版時:

    • PolarDB MySQL版8.0.1版本,且修訂版本為8.0.1.1.48及以上。

    • PolarDB MySQL版8.0.2版本,且修訂版本為8.0.2.2.27及以上。

  • 產品系列為為多主叢集(Limiless)時:

    • PolarDB MySQL版8.0.1,且修訂版本為8.0.1.0.33及以上。

注意事項

  • PolarDB Resource Control功能與MySQL官方Resource Group功能並不相同,分別使用如下2種機制控制叢集的資源使用:

    • PolarDB Resource Control功能能夠在資料庫、資料庫使用者以及資料庫連接維度上限制所能使用的資源,更適配於雲原生資料庫。

    • MySQL官方Resource Group功能能夠為不同資源群組設定所能使用的CPU核以及線程的優先順序。其功能試用可參考MySQL官方文檔 Resource Groups,目前PolarDB MySQL版中暫不支援開啟。

  • 使用Resource control功能需開啟Thread Pool功能。

  • 唯讀(RO)節點非同步從讀寫(RW)節點同步資源控制資訊,因此可能會出現延遲。

使用方式

串連PolarDB資料庫叢集後,通過高許可權賬戶進行登入。

開啟Resource Control功能

PolarDB叢集參數在控制台與會話中修改方式存在差異,詳細區別如下:

  • PolarDB控制台上修改

    • 相容性說明:部分叢集參數在PolarDB控制台上均已添加MySQL設定檔的相容性首碼loose_

    • 操作方法:找到並修改這些帶loose_首碼的參數。

  • 在資料庫會話中修改(使用命令列或用戶端):

    • 操作方法:當您串連到資料庫,使用SET命令修改參數時,請去掉loose_首碼,直接使用參數的原始名稱進行修改。

參數名稱

層級

描述

loose_enable_resource_control

Globa

控制是否開啟叢集的資源控制(Resource control)功能。

  • ON:開啟

  • OFF(預設):關閉

建立Resource Control

CREATE polar_resource_control <rc_name> max_cpu <max_cpu_value>;

參數說明:

參數名稱

說明

rc_name

需要建立的資源控制(Resource Control)名稱,最長長度為64個字元。

max_cpu_value

此資源控制所設定的最大CPU,其值表示占整個叢集CPU的百分比,取值範圍為[1,100]。

建立完成後,可以通過高許可權賬戶執行以下SQL查詢以擷取所有資源控制(Resource Control)。

SELECT * FROM mysql.polar_resource_control;

可以通過高許可權賬戶執行以下SQL查詢,擷取Resource Control下的Thread Group。

SELECT id, resource_control_name FROM information_schema.thread_pool_status;

修改Resource Control

ALTER polar_resource_control <rc_name> max_cpu <max_cpu_value>;

參數說明:

參數名稱

說明

rc_name

需要修改的資源控制(Resource Control)名稱,最長長度為64個字元。

max_cpu_value

此資源控制所修改的最大CPU,其值表示占整個叢集CPU的百分比,取值範圍為[1,100]。

說明

修改Resource Control對應的最大CPU後,屬於該Resource Control的Thread Group數量可能會發生變化。

刪除Resource Control

DROP polar_resource_control <rc_name>;

參數說明:

參數名稱

說明

rc_name

需要刪除的資源控制(Resource Control)名稱。

說明

刪除此Resource Control後,屬於該Resource Control的Thread Group將會被釋放掉,同時原先受該Resource Control CPU限制的使用者、資料庫或串連將不會再受到限制。

對使用者或資料庫設定Resource Control

綁定

SET polar_resource_control <rc_name> FOR [database|USER] <db_name/user_name>;

SQL語句詳細描述如下所示:

參數名稱

說明

rc_name

需要綁定的資源控制(Resource Control)名稱。

db_name/user_name

需要限制資源的資料庫或使用者。

說明

執行上述SQL後,資料庫或使用者將受到相應Resource Control的CPU資源限制。正在執行的語句不會受到影響,只有在綁定後執行的語句才會生效。

解除綁定

RELEASE polar_resource_control <rc_name> FOR [database|USER] db_name/user_name>;

執行上述SQL後,資料庫或使用者將解除相應Resource Control的CPU資源限制。同樣,正在執行的語句不會受到影響,只有在解除後執行的語句才會生效。

對Query或Connection設定Resource Control

綁定

SET polar_resource_control <rc_name> FOR [query|connection] <connection_id>;

參數說明:

參數名稱

說明

rc_name

需要綁定的資源控制(Resource Control)名稱。

connection_id

需要限制的Connection ID。

說明
  • 當為Query設定Resource Control時,可以通過SHOW PROCESSLIST查看(Query)對應的Connection ID。當Query執行完成之後,將不再受到對應Resource Control的資源限制。

  • 當Connection設定Resource Control時,當前Query執行結束,仍將受到相應Resource Control的資源限制,直到Connection結束並退出。

解除綁定

RELEASE polar_resource_control <rc_name> FOR [query|connection] <connection_id>;

參數說明:

參數名稱

說明

rc_name

需要綁定的資源控制(Resource Control)名稱。

connection_id

需要限制的Connection ID。

說明
  • 當為Query解除Resource Control時,一旦Query執行完成,若無對應Resource Control,則將不會受到限制。

  • 當Connection解除Resource Control限制後,該串連將根據串連、使用者或資料庫進行相應的Resource Control限制。如果沒有對應的Resource Control,則將不受到限制。

Resource Control生效順序

對於一條query語句而言,是否受到Resource Control及具體受到哪個Resource Control的資源限制,按照以下順序生效:

  1. 如果將query主動通過串連ID方式綁定至資源控制,優先順序最高。

  2. 判斷當前串連是否已經綁定至資源控制,若已綁定,則進行資源限制。

  3. 判斷串連的使用者是否已經綁定至資源控制,若已綁定,則進行資源限制。

  4. 判斷當前串連的資料庫是否已經綁定至資源控制,若已綁定,則進行資源限制。

  5. 如果以上都未滿足,則不會受到資源限制。

多主叢集使用方式

多主叢集的使用方式與單主叢集相同,文法完全相容。在執行CREATEALTERDROP POLAR_RESOURCE_CONTROL時,將隨機轉寄至叢集中的讀寫節點,並在所有讀寫節點之間進行同步,這可能會有一些延遲。在對查詢或串連進行資源限制時,可以通過HINT文法使用的方式來指定對某個節點進行設定。

最佳實務

應用情境

  • 防止惡意使用者佔用過多的叢集資源。

  • 應對線上突發的慢查詢。

  • Serverless叢集中防止惡意使用者引發叢集的彈性擴充。

  • 在多使用者環境或不同業務共用同一叢集時,限制CPU的使用。

使用樣本

  • 防止惡意使用者佔用過多的叢集資源

    應對惡意使用者,可提前設定其最多可使用CPU資源,或者可以在惡意使用者出現後,設定其CPU資源。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;

    為使用者trouble_user設定資源控制後,該使用者線程最大可使用的CPU為整個叢集的10%。這樣可以有效防止惡意使用者佔用過多的CPU資源,從而避免對其他業務造成影響。

  • 應對線上突發慢查詢

    線上有時會出現意外的慢查詢,這可能是由於SQL解析或最佳化不當導致CPU負載增加,SQL查詢長時間處於執行狀態並消耗大量CPU。雖然可以通過kill命令終止這個查詢,但需要等待查詢執行到特定的臨界點,這個過程會耗費一些時間。同時,在kill過程中事務的復原也會消耗CPU資源並需要一定時間。為了快速降低因慢查詢導致的CPU負載或避免CPU被完全佔用,可以對該慢查詢進行CPU使用限制。

    CREATE polar_resource_control rc_for_slow_query max_cpu 10;
    SET polar_resource_control rc_for_slow_query FOR query query_id;
    說明

    為慢查詢query_id設定資源控制時,可以通過SHOW PROCESSLIST查看(Query)對應的query_id。

    為慢查詢query_id設定資源控制後,該查詢最大可使用的CPU限制為整個叢集的10%。這樣可以迅速降低叢集的CPU負載,避免對線上其他業務造成影響。

    由於PolarDB叢集中可能存在多個計算節點,且不同節點中可能會有相同的串連ID查詢。因此,在為查詢設定資源控制時,可以通過HINT文法使用的方式來指定對特定節點進行設定。

    /*force_node='pi-bpxxxxxxxx'*/ SET polar_resource_control rc_for_slow_query FOR query query_id;
  • Serverless叢集防止惡意使用者引發叢集彈升

    當叢集開啟Serverless模式時,它會根據負載自動彈性擴充,以處理突發的高負載。然而,有時面對一些惡意使用者時,我們可能不希望因其請求而導致叢集擴充。在這種情況下,可以對這些惡意使用者在Serverless叢集上施加資源限制。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;
  • 多租或不同業務使用同一叢集,限制CPU使用

    在SaaS情境中,多個租戶經常被放置在同一叢集上進行處理,同時也有許多情況下不同業務共用同一叢集。在這種情境下,我們希望限制單個租戶或單個業務所能使用的資源,以防止某個使用者或業務佔用過多的CPU,從而影響整個叢集的狀態。為了應對這種情況,可以對各個業務分別設定CPU資源限制(例如,可以通過使用者進行限制,資料庫則可實現相同效果)。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    CREATE polar_resource_control rc_for_business_2 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_2 FOR USER user_2;

    根據上述設定user_1user_2各自對應的不同業務可以分別設定為最多使用整個叢集CPU的20%。因此,兩個使用者最多可共同使用40%的 CPU 資源。當user_1的業務負載突然增加時,其使用的CPU限制仍然保持在20%以內,這樣就能夠保證不影響叢集上其他業務的CPU使用方式。

    若同一個業務使用了不同的user,那麼可以將不同user設定為同一個Resource control。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_1 FOR USER user_2;

    根據上述設定user_1user_2所對應的業務可以限制為最多使用整個叢集CPU的20%。因此,兩位使用者總共最多隻能共同使用20%的CPU 資源。這樣,當某一使用者的負載增加時,能夠有效防止超出設定的CPU使用限制,確保資源的合理分配。