在大结果集的场景中使用 StreamingResult,客户端撑爆会导致什么现象?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
在大结果集的场景中使用 StreamingResult,客户端撑爆会导致什么现象?

【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

1 个赞

设置 StreamingResult ,结果集缓存在 server 端,客户端循环获取还会 撑爆?

文档说缓存在客户端的

不是的,流式只会分批次从 server 端获取数据,调用 next() 才会获取下一批。StreamingResult 本身就是为了解决大结果集时客户端可能会 oom 的问题,主要是避免了结果集一次性加载到客户端

1 个赞

明白了,谢谢。

  • 支持以流式获取游标的结果集(实验特性)#54526 @YangKeao当应用代码通过 Cursor Fetch 获取结果集时,TiDB 通常会先将完整结果保存至 TiDB 内存,再分批返回给客户端。如果结果集过大,可能会触发落盘临时将结果写入硬盘。从 v8.3.0 开始,如果将系统变量 tidb_enable_lazy_cursor_fetch 设置为 ON,TiDB 不再把所有数据读取到 TiDB 节点,而是会随着客户端的读取逐步将数据读到 TiDB 节点。在处理较大的结果集时,这将减少 TiDB 节点的内存使用,提升集群的稳定性。更多信息,请参考用户文档

https://docs.pingcap.com/zh/tidb/dev/release-8.3.0

这个Cursor Fetch的问题,在8.3这个DMR版本上也专门进一步优化过。不过8.3不是LTS版本,不建议采用。

1 个赞

好的,我验证一下,谢谢