tidb-server 单个请求能否负载均衡

【 TiDB 使用环境】生产环境
【 TiDB 版本】7.5.1
【复现路径】提交查询汇总sql
【遇到的问题:问题现象及影响】计算sql.查询3百万结果集做聚合计算
【资源配置】


单个计算sql(前提,sql不优化),导致 单个tidb-server节点cpu耗尽,监控无法捕捉到资源信息。当时在后台top看。cpu全部被使用。 请问单个sql请求能否负载均衡?目前三个tidb-server没有做负载均衡。

你是想单条SQL分到多个tidb-server上去执行对吧,这种搞不了,tidb-server是无状态的。

看你是什么样的聚合运算,有部分能下推到tikv执行的话就稍微好点。

1 个赞

你单个 SQL 没并发是怎么把 TiDB 节点打满的 :face_in_clouds:

tidb的并行框架是算子内并行(业界tp数据库较多的是算子间并行),一条语句中多来几个hash join+hashagg 很容易吃到十几个CPU,他这个8c打满也是常见的。

算子间并行:容易在SQL级别控制并行度,比如设置了parallel=3,那么基本最多就是3c,优点是:语句级CPU控制力度较好,缺点是:容易造成局部算力不足,ap能力偏弱一些。
算子内并行:在算子级别控制并行度,一个算子可能吃多个CPU,算子多了起来就容易被严重放大,优点是ap能力较强,纯ap场景下比较占优,缺点是:不容易控制CPU使用量,容易影响tp业务。

1 个赞

不可以,建议优化sql,按理来说300万结果聚合不算很大

我看架构部署的是tidb 和tiflash 混布,是tidb-server 全部占用的cpu,如果是只能考虑优化sql,尽可能下推tikv 或者tiflash

1 个赞

一般sql查询都会走tikv或者TiFlash,如果按你说的,都在tidb-server执行的话,说明sql写的有问题。用执行计划执行看下,尽量算子下推,释放tidb资源

不能。
这个是性能的负载均衡

什么样的SQL语句,能压到KV 或者 Flash 去做吗

汇总类sql的话建议加一个tiflash节点,体验感绝对很好。

单个sql不能做到负载均衡


截得不全。

单条sql肯定没法再负载了啊

不能,这不是原理课的内容吗

不可以

不行的

不可以

你这个看着是查询了之后又插入了吧。
感觉是插入300w的时间占比更高一些。