写点什么

TiDB 在长银五八消费金融核心系统适配经验分享

  • 2022 年 7 月 22 日
  • 本文字数:1965 字

    阅读完需:约 6 分钟

作者: cs58_dba 原文来源:https://tidb.net/blog/a2a6e0dc


    在独自查文档,逛论坛的过程中,积累了一些微末的实践经验,包括功能测试总结、兼容性问题、参数调试三个模块和大家分享,希望能让TiDB初学者少绕一些弯,TiDB大神和资深使用者可以忽略。
复制代码


一、Tidb 产品功能测试总结


下列所有项都在 TiDB 5.4 上测试过,亲测有效,我为我的结论负责。总体来说 TiDB 与 MySQL 功能上兼容性还是不错的。



###


二、Tidb 使用兼容性问题


在应用在 TiDB 进行兼容性测试过程中,暂时发现了如下几个问题,都已人工解决



三、Tidb 参数调整实操

1、mem-quota-query

单条 SQL 语句可以占用的最大内存阈值,单位为字节。


官网文档:https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file#mem-quota-query


这个配置值默认为 1GB,当一条查询语句超过这个值就会触发 OOM,导致查询失败。我们在日常使用过程中可能不会遇到这个限制。但是当数据量达到亿级以上,sql 语句中嵌套 join 等复杂情况时,就可能发生 OOM。


与其对应的系统变量是 tidb_mem_quota_query


官网文档:https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_mem_quota_query


这是一个 SESSION 级别的变量,只对当前会话有效。对于因为默认 mem-quota-query 阈值太小而发生 OOM 的情况。可以先设置会话级别的变量 tidb_mem_quota_query


  • 参数文件修改

2、txn-total-size-limit

TiDB 单个事务大小限制,默认大小 100M。


https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file#txn-total-size-limit


笔者在进行亿级大表更新时,发生了事务超出最大限制错误。原因是集群还部署了 binlog,当发生大表更新时,binlog 组件 pump 将抓取这个时间段的 binlog,并保证事务性。但是事务默认最大值是 100M,更新亿级大表的事务远大于 100M,遂发生报错。


可以根据实际业务情况,修改该配置值。但是最大不能超过 10GB。


  • 参数文件修改

3、加快统计更新速度

统计更新用于更新 TiDB 在表和索引上留下的统计信息。执行大批量更新或导入记录后,或查询执行计划不是最佳时就需要执行统计更新操作。


默认的统计更新速度比较慢,可以通过调整参数的方式大大加快统计更新的速度。


  • tidb_build_stats_concurrency

  • 作用域:SESSION | GLOBAL

  • 是否持久化到集群:是

  • 默认值:4

  • 这个变量用来设置 ANALYZE 语句执行时并发度。

  • 当这个变量被设置得更大时,会对其它的查询语句执行性能产生一定影响

  • tidb_distsql_scan_concurrency

  • 作用域:SESSION | GLOBAL

  • 是否持久化到集群:是

  • 默认值:15

  • 范围:[1, 256]

  • 这个变量用来设置 scan 操作的并发度。

  • AP 类应用适合较大的值,TP 类应用适合较小的值。对于 AP 类应用,最大值建议不要超过所有 TiKV 节点的 CPU 核数。

  • 若表的分区较多可以适当调小该参数(取决于扫描数据量的大小以及扫描频率),避免 TiKV 内存溢出 (OOM)。

  • tidb_index_serial_scan_concurrency

  • 作用域:SESSION | GLOBAL

  • 是否持久化到集群:是

  • 默认值:1

  • 范围:[1, 256]

  • 这个变量用来设置顺序 scan 操作的并发度,AP 类应用适合较大的值,TP 类应用适合较小的值

4、加快建立索引速度

在 TiDB 数据迁移操作过程中经常会采取先迁移数据到目标库,然后在目标库上还原原本的索引。建立索引的速度可以通过调整两个参数来加快。


通过 set global 的命令方式会持久化到集群,集群 reload 或者 restart 仍会有效。


  • tidb_ddl_reorg_worker_cnt

  • 作用域:GLOBAL

  • 是否持久化到集群:是

  • 默认值:4

  • 范围:[1, 256]

  • 这个变量用来设置 DDL 操作 re-organize 阶段的并发度

  • tidb_ddl_reorg_batch_size

  • 作用域:GLOBAL

  • 是否持久化到集群:是

  • 默认值:256

  • 范围:[32, 10240]

  • 这个变量用来设置 DDL 操作 re-organize 阶段的 batch size。比如 ADD INDEX 操作,需要回填索引数据,通过并发 tidb_ddl_reorg_worker_cnt 个 worker 一起回填数据,每个 worker 以 batch 为单位进行回填。

  • 如果 ADD INDEX 操作时有较多 UPDATE 操作或者 REPLACE 等更新操作,batch size 越大,事务冲突的概率也会越大,此时建议调小 batch size 的值,最小值是 32。

  • 在没有事务冲突的情况下,batch size 可设为较大值(需要参考 worker 数量,见线上负载与 ADD INDEX 相互影响测试),最大值是 10240,这样回填数据的速度更快,但是 TiKV 的写入压力也会变大。

  • 为了减少对在线业务的影响,添加索引的默认速度会比较保守。当添加索引的目标列仅涉及查询负载,或者与线上负载不直接相关时,可以适当调大上述变量来加速添加索引:

  • 当添加索引操作的目标列被频繁更新(包含 UPDATE、INSERT 和 DELETE)时,调大上述配置会造成较为频繁的写冲突,使得在线负载较大;同时添加索引操作也可能由于不断地重试,需要很长的时间才能完成。此时建议调小上述配置来避免和在线业务的写冲突:


建立索引将占用大量的系统 I/O 资源,需要按经验适当调整参数来加快但不至于影响系统正常运行


发布于: 3 小时前阅读数: 15
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB 在长银五八消费金融核心系统适配经验分享_安装 & 部署_TiDB 社区干货传送门_InfoQ写作社区