作者: weixiaobing 

1、集群信息

[tidb@vm116 ~]$ tiup cluster display tidb-prd
tiup is checking updates for component cluster ...
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.12.2/tiup-cluster display tidb-prd
Cluster type:       tidb
Cluster name:       tidb-prd
Cluster version:    v7.1.0
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://10.2.103.116:32379/dashboard
Grafana URL:        http://10.2.103.116:5000
ID                  Role          Host          Ports                            OS/Arch       Status   Data Dir                            Deploy Dir
--                  ----          ----          -----                            -------       ------   --------                            ----------
10.2.103.116:9793   alertmanager  10.2.103.116  9793/9794                        linux/x86_64  Up       /data1/tidb-data/alertmanager-9793  /data1/tidb-deploy/alertmanager-9793
10.2.103.116:5000   grafana       10.2.103.116  5000                             linux/x86_64  Up       -                                   /data1/tidb-deploy/grafana-5000
10.2.103.116:32379  pd            10.2.103.116  32379/3380                       linux/x86_64  Up|L|UI  /data1/tidb-data/pd-32379           /data1/tidb-deploy/pd-32379
10.2.103.116:9390   prometheus    10.2.103.116  9390/32020                       linux/x86_64  Up       /data1/tidb-data/prometheus-9390    /data1/tidb-deploy/prometheus-9390
10.2.103.116:43000  tidb          10.2.103.116  43000/20080                      linux/x86_64  Up       -                                   /data1/tidb-deploy/tidb-34000
10.2.103.116:9300   tiflash       10.2.103.116  9300/9123/4930/30170/30292/8234  linux/x86_64  Up       /data1/tidb-data/tiflash-9300       /data1/tidb-deploy/tiflash-9300
10.2.103.116:30160  tikv          10.2.103.116  30160/30180                      linux/x86_64  Up       /data1/tidb-data/tikv-30160         /data1/tidb-deploy/tikv-30160
Total nodes: 7
[tidb@vm116 ~]$



相关参数

mysql> show variables like '%tidb_enable_resource_control%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| tidb_enable_resource_control | ON    |
+------------------------------+-------+
1 row in set (0.00 sec)

mysql> show config where name like '%resource-control%';
+---------+--------------------+------------------------------------------+-------+
| Type    | Instance           | Name                                     | Value |
+---------+--------------------+------------------------------------------+-------+
| tikv    | 10.2.103.116:30160 | resource-control.enabled                 | true  |
| tiflash | 10.2.103.116:4930  | raftstore-proxy.resource-control.enabled | true  |
+---------+--------------------+------------------------------------------+-------+
2 rows in set (0.01 sec)

mysql>



预估集群容量

mysql> CALIBRATE RESOURCE;
+-------+
| QUOTA |
+-------+
| 23256 |
+-------+
1 row in set (0.01 sec)

mysql> CALIBRATE RESOURCE WORKLOAD OLTP_WRITE_ONLY;
+-------+
| QUOTA |
+-------+
| 36592 |
+-------+
1 row in set (0.00 sec)

mysql> CALIBRATE RESOURCE WORKLOAD OLTP_READ_ONLY;
+-------+
| QUOTA |
+-------+
|  6985 |
+-------+
1 row in set (0.00 sec)

mysql> CALIBRATE RESOURCE WORKLOAD OLTP_READ_WRITE;
+-------+
| QUOTA |
+-------+
| 14886 |
+-------+
1 row in set (0.00 sec)

mysql>

v7.1 LTS Resource Control 试用_压测

mysql> CALIBRATE RESOURCE START_TIME '2023-06-07 10:40:00' DURATION '20m';
ERROR 1105 (HY000): There are too few metrics points available in selected time window
mysql>

v7.1 LTS Resource Control 试用_mysql_02

v7.1 LTS Resource Control 试用_linux_03

当负载太小时,可能不能正确的估算出容量

v7.1 LTS Resource Control 试用_压测_04

调整负载后,可以正常估算容量

v7.1 LTS Resource Control 试用_压测_05



管理资源组



创建资源组

mysql> CREATE RESOURCE GROUP IF NOT EXISTS read_write RU_PER_SEC = 5000 BURSTABLE;
Query OK, 0 rows affected (0.21 sec)

mysql> CREATE RESOURCE GROUP IF NOT EXISTS read_write_no RU_PER_SEC = 5000 ;
Query OK, 0 rows affected (0.14 sec)

mysql> CREATE RESOURCE GROUP IF NOT EXISTS read RU_PER_SEC = 2000 ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 40 near "read RU_PER_SEC = 2000"  

mysql> CREATE RESOURCE GROUP IF NOT EXISTS read_only RU_PER_SEC = 2000;
Query OK, 0 rows affected (0.17 sec)

mysql> CREATE RESOURCE GROUP IF NOT EXISTS write_only RU_PER_SEC = 12000;
Query OK, 0 rows affected (0.18 sec)

mysql> CREATE RESOURCE GROUP IF NOT EXISTS write RU_PER_SEC = 12000;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 41 near "write RU_PER_SEC = 12000" 
mysql>
mysql> select * from information_schema.RESOURCE_GROUPS;
+---------------+------------+----------+-----------+
| NAME          | RU_PER_SEC | PRIORITY | BURSTABLE |
+---------------+------------+----------+-----------+
| default       | UNLIMITED  | MEDIUM   | YES       |
| read_only     | 2000       | MEDIUM   | NO        |
| read_write    | 5000       | MEDIUM   | YES       |
| read_write_no | 5000       | MEDIUM   | NO        |
| write_only    | 12000      | MEDIUM   | NO        |
+---------------+------------+----------+-----------+
5 rows in set (0.01 sec)

mysql>



绑定资源组

mysql> create user read_only identified by 'tidb';
Query OK, 0 rows affected (0.08 sec)

mysql> create user read_write identified by 'tidb';
Query OK, 0 rows affected (0.03 sec)

mysql> create user read_write_no identified by 'tidb';
Query OK, 0 rows affected (0.04 sec)

mysql> create user write_only identified by 'tidb';
Query OK, 0 rows affected (0.03 sec)

mysql> alter user read_only resource group read_only;
Query OK, 0 rows affected (0.05 sec)

mysql> alter user write_only resource group write_only;
Query OK, 0 rows affected (0.04 sec)

mysql> alter user read_write resource group read_write;
Query OK, 0 rows affected (0.03 sec)

mysql> alter user read_write_no resource group read_write_no;
Query OK, 0 rows affected (0.04 sec)

mysql>



将用户绑定到资源组

mysql> select user,host,User_attributes from mysql.user;
+---------------+------+-------------------------------------+
| user          | host | User_attributes                     |
+---------------+------+-------------------------------------+
| root          | %    | NULL                                |
| read_only     | %    | {"resource_group": "read_only"}     |
| read_write    | %    | {"resource_group": "read_write"}    |
| write_only    | %    | {"resource_group": "write_only"}    |
| read_write_no | %    | {"resource_group": "read_write_no"} |
+---------------+------+-------------------------------------+
5 rows in set (0.00 sec)

mysql>

v7.1 LTS Resource Control 试用_linux_06



性能测试



read_only



压测脚本

[tidb@vm116 ~]$ more sysbench_read_only.config 
mysql-host=10.2.103.116
mysql-port=43000
mysql-user=read_only
mysql-password=tidb
mysql-db=sbtest
time=600
threads=16
report-interval=1
db-driver=mysql
[tidb@vm116 ~]$ 

sysbench --config-file=sysbench_read_only.config oltp_read_only --tables=10 --table-size=10000 run



监控与图表

v7.1 LTS Resource Control 试用_压测_07



机器负载

v7.1 LTS Resource Control 试用_linux_08



压测结果

SQL statistics:
    queries performed:
        read:                            4125548
        write:                           0
        other:                           589364
        total:                           4714912
    transactions:                        294682 (491.11 per sec.)
    queries:                             4714912 (7857.77 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0306s
    total number of events:              294682

Latency (ms):
         min:                                    9.70
         avg:                                   32.57
         max:                                  204.13
         95th percentile:                       38.94
         sum:                              9599029.86

Threads fairness:
    events (avg/stddev):           18417.6250/23.24
    execution time (avg/stddev):   599.9394/0.01



read_only_no



压测脚本

[tidb@vm116 ~]$ more sysbench_read_only_no.config 
mysql-host=10.2.103.116
mysql-port=43000
mysql-user=read_only_no
mysql-password=tidb
mysql-db=sbtest
time=600
threads=16
report-interval=1
db-driver=mysql
[tidb@vm116 ~]$ sysbench --config-file=sysbench_read_only_no.config oltp_read_only --tables=10 --table-size=10000 run



监控与图表

v7.1 LTS Resource Control 试用_mysql_09



机器负载

v7.1 LTS Resource Control 试用_linux_10



压测结果

SQL statistics:
    queries performed:
        read:                            7025844
        write:                           0
        other:                           1003692
        total:                           8029536
    transactions:                        501846 (836.38 per sec.)
    queries:                             8029536 (13382.01 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0231s
    total number of events:              501846

Latency (ms):
         min:                                    7.99
         avg:                                   19.13
         max:                                  167.63
         95th percentile:                       28.67
         sum:                              9598335.88

Threads fairness:
    events (avg/stddev):           31365.3750/58.39
    execution time (avg/stddev):   599.8960/0.01

[tidb@vm116 ~]$



没有资源限制用户测试



压测脚本

[tidb@vm116 ~]$ more sysbench.config 
mysql-host=10.2.103.116
mysql-port=43000
mysql-user=root
mysql-password=
mysql-db=sbtest
time=600
threads=16
report-interval=1
db-driver=mysql
[tidb@vm116 ~]$



监控与图表

v7.1 LTS Resource Control 试用_linux_11



机器负载

v7.1 LTS Resource Control 试用_linux_12



压测结果

SQL statistics:
    queries performed:
        read:                            6938876
        write:                           0
        other:                           991268
        total:                           7930144
    transactions:                        495634 (826.02 per sec.)
    queries:                             7930144 (13216.36 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0232s
    total number of events:              495634

Latency (ms):
         min:                                    7.88
         avg:                                   19.37
         max:                                  239.23
         95th percentile:                       29.19
         sum:                              9598338.50

Threads fairness:
    events (avg/stddev):           30977.1250/55.63
    execution time (avg/stddev):   599.8962/0.01

[tidb@vm116 ~]$



总结

Resource Contro 的确可以限制用户的资源使用,但是当资源组设置BURSTABLE 属性后,基本可以用到机器所有的资源,建议还是需要设置一个最大值,这样可以更好的保护集群。

由于测试资源有限,没有测试更大的集群,在有更多的tidb servre 和tikv 后,希望可以测试一下在资源管控后,是否会资源均衡,希望大家多多测试。