tidb-ddl的速度的调整

一、环境描述

ip组件配置
192.168.1.1tidb、pd、tikv2c4g
192.168.1.2tidb、pd、tikv2c4g
192.168.1.3tidb、pd、tikv2c4g

二、实验环境准备

1.建表

# ddl_1,ddl_2,ddl_3表结构一致
CREATE TABLE `ddl_1` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `z_name` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `z_info` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

2.插入

import pymysql
conn = pymysql.Connect()
cur = conn.cursor()
# ddl_1,ddl_2,ddl_3插入数据
sql_str = 'insert into ddl_2(z_name, z_info) values("csdfsdfsdfsda", "qwwerwerisdfnsdvj vsd")'
for i in range(1000):
    sql_str = sql_str + ',("csdfsdfsdfsda", "qwwerwerisdfnsdvj vsd")'
for i in range(1000):
    print(i)
    cur.execute(sql_str)
    conn.commit()
conn.close()

3.查看表信息

mysql> show table ddl_2 regions\G
*************************** 1. row ***************************
           REGION_ID: 1149
           START_KEY: t_80_
             END_KEY: t_85_
           LEADER_ID: 1152
     LEADER_STORE_ID: 5
               PEERS: 1150, 1151, 1152
          SCATTERING: 0
       WRITTEN_BYTES: 0
          READ_BYTES: 0
APPROXIMATE_SIZE(MB): 108
    APPROXIMATE_KEYS: 1346062
1 row in set (0.02 sec)

mysql> show table ddl_1 regions\G
*************************** 1. row ***************************
           REGION_ID: 2
           START_KEY: t_85_
             END_KEY:
           LEADER_ID: 3
     LEADER_STORE_ID: 1
               PEERS: 3, 6, 7
          SCATTERING: 0
       WRITTEN_BYTES: 0
          READ_BYTES: 0
APPROXIMATE_SIZE(MB): 97
    APPROXIMATE_KEYS: 1013491
1 row in set (0.10 sec)

mysql> show table ddl_3 regions\G
*************************** 1. row ***************************
           REGION_ID: 2
           START_KEY: t_89_
             END_KEY:
           LEADER_ID: 3
     LEADER_STORE_ID: 1
               PEERS: 3, 6, 7
          SCATTERING: 0
       WRITTEN_BYTES: 0
          READ_BYTES: 93093000
APPROXIMATE_SIZE(MB): 101
    APPROXIMATE_KEYS: 1031510
1 row in set (0.01 sec)

4.添加索引

mysql> alter table ddl_1 add index idx_z_info(z_info);
Query OK, 0 rows affected (2 min 16.17 sec)

set global tidb_ddl_reorg_batch_size=1024;
mysql> alter table ddl_2 add index idx_z_info(z_info);
Query OK, 0 rows affected (1 min 44.53 sec)

set global tidb_ddl_reorg_worker_cnt=8;
mysql> alter table ddl_3 add index idx_z_info(z_info);
Query OK, 0 rows affected (1 min 40.01 sec)

5.控制ddl的相关参数

参数意义
ddl_slow_threshold耗时超过该阈值的 DDL 操作会被输出到日志
tidb_ddl_error_count_limit用来控制 DDL 操作失败重试的次数。失败重试次数超过该参数的值后,会取消出错的 DDL 操作
tidb_ddl_reorg_priority用来设置 ADD INDEX 操作 re-organize 阶段的执行优先级,可设置为 PRIORITY_LOW/PRIORITY_NORMAL/PRIORITY_HIGH
tidb_ddl_reorg_batch_size用来设置 DDL 操作 re-organize 阶段的 batch size,比如 ADD INDEX 操作,需要回填索引数据,通过并发 tidb_ddl_reorg_worker_cnt 个 worker 一起回填数据,每个 worker 以 batch 为单位进行回填
tidb_ddl_reorg_worker_cnt用来设置 DDL 操作 re-organize 阶段的并发度

三、对比结论

tidb_ddl_reorg_batch_sizetidb_ddl_reorg_worker_cnt执行时间消耗cpu
2564136s102%
10244104s128%
10248100s130%

结论: 从测试结果上看,越大的tidb_ddl_reorg_batch_size,越大的tidb_ddl_reorg_worker_cnt会带来更快的执行时间,同时也会带来更高的cpu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值