TIDB 服务器内存持续增涨,最终导致无法连接。

可以看看官方的部署建议

平时玩玩混布还行,项目用就不建议存储和计算节点混布,太容易oom了,而且很容易内存不够导致主动把内存消耗最大的进程给kill了

尽量不要混合部署,容易出现互相争取资源,如果资源不足,尽量减少节点数

针对这个问题,咱们可以从几个角度来分析和调整:

  1. 检查SQL执行计划和索引:确保插入操作没有触发不必要的全表扫描或者额外的内存消耗。优化索引策略,避免写入时的额外负担。
  2. TiDB配置调优:
    gc-life-time:这个参数控制了垃圾回收的周期,适当缩短可能有助于及时释放不再使用的内存。
    tidb_distsql_scan_concurrency 和 tidb_hash_join_concurrency:调整这两个参数可能能减少并发执行时的内存消耗。
    oom-action:检查这个设置,确保在内存溢出时的行为是合理的,比如是否应该杀掉查询而不是整个实例。
  3. 监控与日志分析:查看TiDB Dashboard上的监控指标,特别是与内存使用相关的,以及慢查询日志,找出内存激增的具体原因。你提到有截图和日志,这些是分析问题的关键。
  4. TiKV配置:TiDB集群的存储组件TiKV也可能涉及到内存管理问题,检查TiKV的配置,比如rocksdb_block_cache_size和rocksdb_write_buffer_manager_total_buffer_size,确保它们没有设置得过大。
  5. 资源限制与隔离:确认是否有容器或操作系统级别的资源限制未正确设置,或者考虑使用cgroup等机制来更好地隔离和限制TiDB组件的资源使用。
  6. 连接池管理:检查.NET应用程序的数据库连接池设置,确保连接被有效管理和重用,避免过多的空闲连接占用资源。