如何避免大表的OLAP影响到OLTP?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:TiDB-v3.0.12
  • 【问题描述】:
    环境:
    tikv * 3 16c64G,
    tipd * 2 16c32G
    tidb * 2 与pd混合部署
    默认参数安装

背景:
一张数据量7亿,45个字段的表A,实时更新
一张数据量在3亿,160字段的大宽表B,天级更新

实时数仓的场景,需要对A表进行实时插入和近期数据的更新,定时对A、B两表进行olap的聚合查询

问题:
在对AB两张大表聚合查询时,tidb duration99会打到5s左右,影响了插入和更新操作(tps大概为100~500)
监控发现tikv的coprocessor的wait_duration明显增高

不考虑olap是否打到索引的情况下,

  1. 怎样能避免olap的场景影响到oltp,保证oltp的稳定性?
  2. 有哪些参数调整,可以提高olap的性能?

增大 tidb_distsql_scan_concurrency(现为15)为50
增大tidb_index_serial_scan_concurrency (现为1)为10
增大tidb_index_join_batch_size (现为25000)为50000
能否解决上述两个问题?数值合理吗?

补充:
tidb duration99的监控

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

建议可以升级到4.0GA版本,安装tiflash,使用tiflash来做聚合查询,tiflash是列式存储,更加适合,并且tiflash是单独的副本,不影响oltp的运行。

感谢解答,我还有几个问题想请教一下

  1. 不想引入tiflash的情况下,升级tidb到4.0会缓解这个问题吗?
  2. 能否限制单个查询在tikv上消耗的资源?有什么tikv的配置参数吗?
  3. 问题中我提到的三个tidb的变量调整,有效吗?主要瓶颈是在tidb没有资源去查询tikv,还是tikv的资源吃紧呢?
  4. 调整tikv的sync_log = False 会显著提高查询的效率吗?
  1. 同一个tikv,又要跑oltp,又要跑olap,所以影响是肯定的。
  2. 您可以参考下 tikv 的配置参数,看看有什么资源来限制。https://github.com/tikv/tikv/blob/v3.0.12/etc/config-template.toml
  3. 这几个参数如果调大,olap如果使用时会占用更多资源,但是可以加快速度
  4. 会加快写入,但是不安全,如果断电,可能丢失数据。

https://docs.pingcap.com/zh/tidb/v3.0/tidb-specific-system-variables#tidb_force_priority
根据上面的文档,我把olap的连接设置 tidb_force_priority = ‘LOW_PRIORITY’, oltp设置成高优先级的,再观察一下。

请问这个变量的DELAYED 是什么含义呢?
是HIGH_PRIORITY > NO_PRIORITY > LOW_PRIORITY > DELAYED 这样的排序吗?

HIGH_PRIORITY > NO_PRIORITY > LOW_PRIORITY

DELAYED 应该是兼容 mysql,但是会忽略这个值