扩容tidb后,sql只占用其中一个内存,导致内存不足

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
执行一条sql报错,Your query has been cancelled due to exceeding the allowed memory limit for a single SQL query,将tidb_mem_quota_query参数调到最高还是不行,进行tidb扩容,又调高了tidb_mem_quota_query
【遇到的问题:问题现象及影响】
扩容后执行sql发现占比只在没扩容之前的tidb上,新扩容的,没有cpu使用率,各位老师帮忙看看如何能搞一下呗
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

根本原因是sql性能不行,优化下sql

sql没办法优化

扩容之后,数据均衡了不?
另外就是机器内存最大多少,下面这个配置也会影响 https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage#如何配置-tidb-server-实例使用内存的阈值

这个图怎么感觉像有个tidb没发力,在摸鱼。
是有两个tidb,但只扩容了一个实例吗?

1 个赞

容后执行sql发现占比只在没扩容之前的tidb上,新扩容的,没有cpu使用率

你前面有负载均衡吗,客户端连哪个tidb哪个tidb工作

1 个赞

是通过haproxy连接的吗?
感觉完全没有负载均衡,很有可能原来是直接连接的tidb server。

没负载均衡考虑这个问题,就是正常扩容了一个tidb

1 个赞

:thinking:一个语句只会在一个tidb上执行吧,这个不会分布到所有tidb节点上吧。

1 个赞

没有负载均衡,那sql在哪个tidb执行就是完全由客户端决定的

首先,如果你用了 haproxy ,需要在ha的配置上加上新扩容的节点,你的业务连接才能连到新扩容的tidb-server上。
如果你没用ha,那么你应用程序应该是直连之前的 tidb-server的,那需要把部分连接连到新扩容的tidb-server 才能分摊压力

如果没有负载均衡,那你现在业务侧连的还是原先那个tidb-server, 新扩容上来的等于就没用上呀,所以不均衡是预期的。。

:sweat_smile: 学习了,原来是基础的负载均衡问题~ 想太复杂了

我已经做好了负载均衡,但是一条sql最后是只会落在一个服务器上嘛,不能两个tidb同时分摊一条sql的压力吗

一条SQL,只能在一个tidb里运行的,然后算子下推,多个tikv在处理数据

我还没有遇到过不能优化的SQL

tidb server是不能分布式的,每个语句只会有一个tidb server的owner去执行。
tidb server是无状态的,分布式计算不是在这一层进行的。

1 个赞

多个tidb不能分摊一条sql的压力,如果tikv多算子下推能多个tikv执行

Tidb server没有高可用及负载均衡一说,所以说扩容了感觉也没有用,重点在于sql问题

不能的,针对于某一条 sql ,只能在一个tidb-server 执行。
负载均衡解决的是你同一类sql ,执行多次,可以分布在不同的 tidb-server
比如你一条sql 执行 1000次, 理论上是两个 tidb-server 各执行500次。