全部產品
Search
文件中心

PolarDB:資源管理使用樣本

更新時間:Feb 11, 2025

本文將向您介紹如何以資料庫帳號、資料庫、單條查詢、資料庫連接4種維度進行資料庫資源管理。

版本限制

  • 僅支援企業版。

  • 產品系列為叢集版時:

    • 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及以上。

注意事項

重要

該功能目前處於申請使用階段,如有需要,請提交工單諮詢和開啟。您也可以加入官方DingTalk群進行諮詢,擷取更多支援人員。DingTalk群號:59535005981。

  • 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)節點同步資源控制資訊,因此可能會出現延遲。

測試環境

重要

測試需要的ECS執行個體和PolarDB MySQL版叢集需要在同一個Region和VPC下。

  • 測試所用ECS執行個體規格:

    ecs.g7.2xlarge(8 vCPU,32 GB記憶體)。

  • 測試所用PolarDB MySQL版叢集配置如下:

    • 產品版本:企業版。

    • 系列:叢集版。

    • 子系列:獨享規格。

    • 資料庫引擎:MySQL 8.0.1。

    • 規格:polar.mysql.x4.xlarge(8 vCPU,32 GB記憶體)。

測試準備

重要

建立資料庫帳號和資料庫

執行如下SQL,建立2個資料庫帳號user_1user_2,2個資料庫database_1database_2

CREATE USER user_1 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER user_2 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE DATABASE database_1;
CREATE DATABASE database_2;
GRANT ALL ON database_1.* TO user_1;
GRANT ALL ON database_2.* TO user_1;
GRANT ALL ON database_1.* TO user_2;
GRANT ALL ON database_2.* TO user_2;

匯入測試資料

執行如下命令,使用Sysbench工具分別為database_1database_2匯入測試資料:

sysbench oltp_read_write --threads=16 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare
sysbench oltp_read_write --threads=16 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare

建立資源管理(Resource Control)

執行如下SQL,建立多個Resource Control:

CREATE polar_resource_control rc_1 max_cpu 20;
CREATE polar_resource_control rc_2 max_cpu 50;
CREATE polar_resource_control rc_3 max_cpu 70;
CREATE polar_resource_control rc_4 max_cpu 100;

通過如下SQL,可以查詢已建立的Resource Control資訊:

SELECT * FROM mysql.polar_resource_control;

執行測試

重要
  • 以下操作中的Sysbench測試相關內容均在ECS執行個體中執行。

  • 以下操作中的資料庫內容均為高許可權帳號登入資料庫後執行。

以資料庫帳號維度限制CPU資源

  1. 使用user_1帳號對資料庫database_1database_2進行壓力測試(Sysbench測試):

    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
  2. 執行如下SQL,依次將user_1rc_1rc_2rc_3rc_4進行綁定和解除綁定:

    SET polar_resource_control rc_1 FOR USER user_1;
    -- 相隔3分鐘再執行解除綁定rc_1並綁定rc_2,便於觀察結果
    RELEASE polar_resource_control rc_1 FOR USER user_1;
    SET polar_resource_control rc_2 FOR USER user_1;
    -- 相隔3分鐘再執行解除綁定rc_2並綁定rc_3,便於觀察結果
    RELEASE polar_resource_control rc_2 FOR USER user_1;
    SET polar_resource_control rc_3 FOR USER user_1;
    -- 相隔3分鐘再執行解除綁定rc_3並綁定rc_4,便於觀察結果
    RELEASE polar_resource_control rc_3 FOR USER user_1;
    SET polar_resource_control rc_4 FOR USER user_1;
  3. 控制台查看效能監控,觀察以資料庫使用者維度限制CPU資源後CPU使用率和QPS的變化,具體操作,請參見效能監控

    • RW節點和RO節點的CPU使用率:

      image

    • RW節點和RO節點的QPS:

      image

    說明

    如上圖所示CPU使用率以及QPS都隨著user_1綁定的Resource Control的變化而變化(例如rc_1的CPU最大為20%,rc_2的CPU最大為50%)。通過綁定不同CPU資源的Resource Control可以對user_1所能使用的CPU資源進行有效控制。

以資料庫維度限制CPU資源

  1. 分別使用user_1user_2database_1進行壓力測試(Sysbench測試):

    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
    sysbench oltp_read_only --threads=256 --mysql-host=<host>  --mysql-user=user_2 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
  2. 執行如下SQL,依次將database_1rc_1rc_2進行綁定和解除綁定:

    SET polar_resource_control rc_1 FOR DATABASE database_1;
    -- 相隔3分鐘再執行解除綁定rc_1並綁定rc_2,便於觀察結果
    RELEASE polar_resource_control rc_1 FOR DATABASE database_1;
    SET polar_resource_control rc_2 FOR  DATABASE database_1;
    -- 相隔3分鐘再執行解除資源管理操作,便於觀察結果
    RELEASE polar_resource_control rc_2 FOR DATABASE database_1; 
  3. 控制台查看效能監控,觀察以資料庫維度限制CPU資源後CPU使用率和QPS的變化,具體操作,請參見效能監控

    image

    image

    說明

    如上圖所示CPU使用率以及QPS都隨著database_1綁定的Resource Control的變化而變化(例如rc_1的CPU最大為20%,rc_2的CPU最大為50%)。通過綁定不同CPU資源的Resource Control可以對database_1所能使用的CPU資源進行有效控制。

單條查詢維度限制CPU資源

說明

使用Resource Control可以對單條查詢進行資源限制,當這個查詢執行結束後,限制會自動結束,後續同一個串連(Connection)中的查詢不受影響。

  1. 執行如下SQL,類比大查詢:

    CREATE DATABASE rc_test;
    USE rc_test;
    CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10));
    INSERT INTO t1(name) VALUES('aaaaaaaaaa');
    INSERT INTO t1(name) SELECT name FROM t1; -- 重複執行20次此SQL
    
    -- 在2個用戶端分別同時執行,類比產生2條大查詢
    SELECT COUNT(*) FROM t1 a JOIN t1 B ON a.name = B.name;
  2. 擷取2個大查詢的Connection ID:

    SHOW processlist;
  3. 建立rc_5並分別綁定到兩個大查詢的Connection ID:

    CREATE polar_resource_control rc_5 max_cpu 5;
    -- 開始綁定資源管理
    SET polar_resource_control rc_5 FOR query <connection_id_1>;
    SET polar_resource_control rc_5 FOR query <connection_id_2>;
    -- 間隔5分鐘,對大查詢解除綁定資源管理限制
    RELEASE polar_resource_control rc_5 FOR query <connection_id_1>;
    RELEASE polar_resource_control rc_5 FOR query <connection_id_2>;
  4. 控制台查看效能監控,觀察以單條查詢維度限制CPU資源後CPU使用率的變化,具體操作,請參見效能監控

    image

以串連維度限制CPU資源

說明

在長會話情境過程中,可以使用Resource Control按照Connection維度限制所有查詢可以使用的資源。

  1. 執行如下SQL,類比大查詢:

    CREATE database rc_test;
    USE rc_test;
    CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10));
    INSERT INTO t1(name) VALUES('aaaaaaaaaa');
    INSERT INTO t1(name) SELECT name FROM t1; -- 重複執行20次此SQL
    
    -- 在2個用戶端分別同時執行,類比產生2條大查詢
    SELECT COUNT(*) FROM t1 A JOIN t1 B ON a.name = B.name;
  2. 擷取2個大查詢的Connection ID:

    SHOW processlist;
  3. 建立rc_5並分別綁定到2個大查詢的Connection ID:

    CREATE polar_resource_control rc_5 max_cpu 5;
    SET polar_resource_control rc_5 FOR connection <connection_id_1>;
    SET polar_resource_control rc_5 FOR connection <connection_id_2>;
  4. 控制台查看效能監控,觀察以串連維度限制CPU資源後CPU使用率的變化,具體操作,請參見效能監控

    image

    說明

    如上圖所示,對2個Connection進行資源限制後,叢集整體的CPU佔用率有明顯下降(15:28:25之後)。手動中斷2個大查詢後(15:30:35之後),再次執行2個大查詢(15:31:40之後),叢集整體的CPU佔用率仍然受到限制。

  5. 分別對2個大查詢釋放保留:

    -- 對connection 解除resource control限制
    RELEASE polar_resource_control rc_5 FOR connection <connection_id_1>;
    RELEASE polar_resource_control rc_5 FOR connection <connection_id_2>;

    大查詢釋放保留之後,叢集整體CPU上升至原來水平:

    image