建表速度慢

在华为三台服务器部署TiDB的时候部署完成后建表速度特别慢 大概0.5秒一张表,相比于单节点myqsl和达梦都很慢,
SQL

# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
  # 部署tidb集群所使用的用户
  user: "tidb"
  ssh_port: 22
  # tidb各个组件部署后使用的全局部署目录
  deploy_dir: "/tidb-deploy"
  # tidb各个组件部署后使用的全局数据目录
  data_dir: "/tidb-data"

# # Monitored variables are applied to all the machines.
monitored:
  node_exporter_port: 9100
  blackbox_exporter_port: 9115
  # deploy_dir: "/tidb-deploy/monitored-9100"
  # data_dir: "/tidb-data/monitored-9100"
  # log_dir: "/tidb-deploy/monitored-9100/log"

# # Server configs are used to specify the runtime configuration of TiDB components.
# # All configuration items can be found in TiDB docs:
# # - TiDB: https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file
# # - TiKV: https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file
# # - PD: https://docs.pingcap.com/zh/tidb/stable/pd-configuration-file
# # All configuration items use points to represent the hierarchy, e.g:
# #   readpool.storage.use-unified-pool
# #
# # You can overwrite this configuration via the instance-level `config` field.

# tidb各个组件的配置文件参数管理
server_configs:
  tidb:
    log.slow-threshold: 300
    binlog.enable: false
    binlog.ignore-error: false
  tikv:
    # server.grpc-concurrency: 4
    # raftstore.apply-pool-size: 2
    # raftstore.store-pool-size: 2
    # rocksdb.max-sub-compactions: 1
    # storage.block-cache.capacity: "16GB"
    # readpool.unified.max-thread-count: 12
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    schedule.leader-schedule-limit: 4
    schedule.region-schedule-limit: 2048
    schedule.replica-schedule-limit: 64
    replication.max-replicas: 3

# pd_servers部署个数、所在机器IP、局部部署目录,数据目录管理、numa绑定、端口号、局部参数管理
pd_servers:
  - host: 10.0.1.4
    # ssh_port: 22
    # name: "pd-1"
    # client_port: 2379
    # peer_port: 2380
    # deploy_dir: "/tidb-deploy/pd-2379"
    # data_dir: "/tidb-data/pd-2379"
    # log_dir: "/tidb-deploy/pd-2379/log"
    # numa_node: "0,1"
    # # The following configs are used to overwrite the `server_configs.pd` values.
    # config:
    #   schedule.max-merge-region-size: 20
    #   schedule.max-merge-region-keys: 200000
  - host: 10.0.1.5
  - host: 10.0.1.6

tidb_servers部署个数、所在机器IP、局部部署目录,数据目录管理、numa绑定、端口号、局部参数管理

tidb_servers:
  - host: 10.0.1.1
    # ssh_port: 22
    # port: 4000
    # status_port: 10080
    # deploy_dir: "/tidb-deploy/tidb-4000"
    # log_dir: "/tidb-deploy/tidb-4000/log"
    # numa_node: "0,1"
    # # The following configs are used to overwrite the `server_configs.tidb` values.
    # config:
    #   log.slow-query-file: tidb-slow-overwrited.log
  - host: 10.0.1.2

tikv_servers部署个数、所在机器IP、局部部署目录,数据目录管理、numa绑定、端口号、局部参数管理

tikv_servers:
  - host: 10.0.1.7
    # ssh_port: 22
    # port: 20160
    # status_port: 20180
    # deploy_dir: "/tidb-deploy/tikv-20160"
    # data_dir: "/tidb-data/tikv-20160"
    # log_dir: "/tidb-deploy/tikv-20160/log"
    # numa_node: "0,1"
    # # The following configs are used to overwrite the `server_configs.tikv` values.
    # config:
    #   server.grpc-concurrency: 4
    #   server.labels: { zone: "zone1", dc: "dc1", host: "host1" }
  - host: 10.0.1.8
  - host: 10.0.1.9

监控机器

monitoring_servers:
  - host: 10.0.1.10
    # ssh_port: 22
    # port: 9090
    # deploy_dir: "/tidb-deploy/prometheus-8249"
    # data_dir: "/tidb-data/prometheus-8249"
    # log_dir: "/tidb-deploy/prometheus-8249/log"

grafana机器

grafana_servers:
  - host: 10.0.1.10
    # port: 3000
    # deploy_dir: /tidb-deploy/grafana-3000
    
# alertmanager_servers机器
alertmanager_servers:
  - host: 10.0.1.10
    # ssh_port: 22
    # web_port: 9093
    # cluster_port: 9094
    # deploy_dir: "/tidb-deploy/alertmanager-9093"
    # data_dir: "/tidb-data/alertmanager-9093"
    # log_dir: "/tidb-deploy/alertmanager-9093/log"

小技巧
SQL

ip替换

sed -i "s/10.0.1.1/192.168.1.101/g" topo.yaml
sed -i "s/10.0.1.2/192.168.1.102/g" topo.yaml
sed -i "s/10.0.1.3/192.168.1.103/g" topo.yaml
sed -i "s/10.0.1.4/192.168.1.101/g" topo.yaml
sed -i "s/10.0.1.5/192.168.1.102/g" topo.yaml
sed -i "s/10.0.1.6/192.168.1.103/g" topo.yaml
sed -i "s/10.0.1.7/192.168.1.101/g" topo.yaml
sed -i "s/10.0.1.8/192.168.1.102/g" topo.yaml
sed -i "s/10.0.1.9/192.168.1.103/g" topo.yaml

上述为部署的yaml文件,服务器架构为arm 128内存 64核心 ,硬盘为本地机械硬盘 ,16分钟只建了1800张表,对比mysql大概60毫秒一张,速度极慢,有没有优化策略

https://docs.pingcap.com/zh/tidb/stable/ddl-introduction#并发发送-ddl-请求实现快速建大量表

看看这个

我用的就是navicat并发建表

1 个赞

SET GLOBAL tidb_ddl_reorg_worker_cnt = 8;试一下这个

1 个赞

还是很慢,没啥变化 2分钟 230张表也就

可以适当的再设置的大一点,等建完表调小了,避免锁问题。

1 个赞

2分钟建230张表不慢吧,毕竟这种大批量ddl也就执行一次,需要频繁执行吗?

1 个赞

如果你是开了一个窗口,里面写了多行create table,这不会是并发执行,因为你能看到是一行一行执行下来的。
要并发就要开多个窗口,每个里面写一些create table。

这软件不想找破解有一阵没用了,现在是有新的功能了?

需要啊,达不到mysql的100毫秒左右一张吗,调到24也还是那样

有并发功能

1 个赞

tidb_ddl_reorg_worker_cnt

这个影响的是添加索引,重新调整分区这种需要reorg数据的操作。建表我理解影响应该是没有的。

并发数能设置,就把数字调大点,调到200试试。

官方的测试10分钟可以建10万张表啊,虽然arm和机械硬盘比较慢但是不至于这么慢吧

那你可以考虑建表和索引分开跑,最后跑索引脚本,开多窗口跑。

1 个赞

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_enable_fast_create_table-从-v800-版本开始引入

这个参数如果开了也很慢,那只有提高并发了,我估计tidb的cpu应该也不高。io也远没有达到瓶颈的程度。还是并发少了,压力不够。

我没建索引只跑的建表

那开多窗口试试吧,如果还不行就的评估一下硬件了。

2 个赞

参数开着呢,并发参数是哪个

这不清楚,我上面说了navicat有这功能我都不知道。

但你要说有这功能不能调参,我觉得那和没有也差不太多。
并发任务,不能调整并发不太合理。