TiDB go线程内存使用
时间: 2023-12-05 19:03:04 浏览: 145
Go在TiDB的实践
在 TiDB 中,每个 goroutine 都有自己的栈空间,当 goroutine 开始执行时,会分配一定大小的栈空间,用于存储该 goroutine 执行过程中的临时变量和调用栈等信息。当 goroutine 执行结束时,分配的栈空间会被释放。
TiDB 运行时的内存使用主要集中在两个方面:
1. goroutine 栈空间:每个 goroutine 分配的栈空间大小默认为 8KB,可以通过配置项 `tidb_mem_quota_query` 来调整。在 TiDB 中,大部分的查询请求都是在单独的 goroutine 中执行的,因此会有大量的 goroutine 栈空间被占用。
2. 缓存和内存池:TiDB 中还有一些缓存和内存池,用于存储查询过程中需要的中间结果和临时数据。这些缓存和内存池的大小也可以通过配置项来进行调整,如 `tidb_mem_quota_query`、`tidb_mem_quota_operator_memory_limit` 等。
为了避免过度使用内存,TiDB 还提供了一些监控指标,如 `tidb_mem_max_usage_bytes`、`tidb_mem_query_max_num` 等,可以用于监控内存使用情况和限制内存使用。
阅读全文