如何防止TiDB OOM?

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】 3.10.0-862.9.1.el7.x86_64

  • TiDB 版本

Release Version: v4.0.0-alpha-303-gf792e8d78-dirty
Git Commit Hash: f792e8d7879c13c5ee250c6242269527303369a2
Git Branch: master
UTC Build Time: 2019-09-19 11:41:53
GoVersion: go version go1.12 linux/amd64
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
  • 磁盘型号
CPU:Silver 4114 CPU @ 2.20GHz  (40 cores)
MEM:192G
DISK:12 * 6TB SATA Raid 10 
  • 集群节点分布
store 1 -- tikv(sata盘), pd(ssd)
store 4 -- tikv(sata盘), pd(ssd)
store 6 -- tikv(sata盘), pd(ssd)
store 801041 -- tikv(sata盘),tidb
store 801042 -- tikv(sata盘),tidb
  • 数据量 & region 数量 & 副本数】 38TB 632819 3

  • 问题描述(我做了什么)

1、写了一条隐形转换(全表扫描,10亿数据),那么tidb占用90G的内存,如果前端web不限制,开发多点几次,机器就oom panic自动重启了

2、抛砖引玉,对于OLAP统计类,要统计一个月的数据,也很容易TiDB占用大量的内存

3、开启了streaming,观察内存好像有所降低,这个参数具体功用是什么?
# Enable coprocessor streaming.
enable-streaming = true

如果并发太多,那也没办法……,比如机器64G内存,128条这样的sql,每条不超过1G,但也有900MB,那么需要115GB内存,就OOM了