diff --git a/grafana-tidb-dashboard.md b/grafana-tidb-dashboard.md index 413c4c8ae8ce..2d23e41f2cf2 100644 --- a/grafana-tidb-dashboard.md +++ b/grafana-tidb-dashboard.md @@ -82,6 +82,8 @@ aliases: ['/docs-cn/dev/grafana-tidb-dashboard/','/docs-cn/dev/reference/key-mon - Expensive Executor OPS:每秒消耗系统资源比较多的算子。包括 Merge Join、Hash Join、Index Look Up Join、Hash Agg、Stream Agg、Sort、TopN 等。 - Queries Using Plan Cache OPS:每秒使用 Plan Cache 的查询数量。 - Plan Cache Miss OPS:每秒出现 Plan Cache Miss 的数量。 + - Plan Cache Memory Usage:每个 TiDB 实例上所有 Plan Cache 缓存的执行计划占用的总内存。 + - Plan Cache Plan Num:每个 TiDB 实例上所有 Plan Cache 缓存的执行计划总数。 - Distsql - Distsql Duration:Distsql 处理的时长 diff --git a/media/planCache-memoryUsage-planNum-panels.png b/media/planCache-memoryUsage-planNum-panels.png new file mode 100644 index 000000000000..311051ed4d61 Binary files /dev/null and b/media/planCache-memoryUsage-planNum-panels.png differ diff --git a/sql-prepared-plan-cache.md b/sql-prepared-plan-cache.md index b73100d1bd19..7a359e23e77e 100644 --- a/sql-prepared-plan-cache.md +++ b/sql-prepared-plan-cache.md @@ -134,11 +134,19 @@ MySQL [test]> select @@last_plan_from_cache; ## Prepared Plan Cache 的内存管理 -使用 Prepared Plan Cache 会有一定的内存开销,在内部测试中,平均每个缓存计划会消耗 100 KiB 内存,且目前 Plan Cache 是 `SESSION` 级别的,因此总内存消耗大致为 `SESSION 个数 * SESSION 平均缓存计划个数 * 100KiB`。 +使用 Prepared Plan Cache 会有一定的内存开销,可以通过 Grafana 中的 [`Plan Cache Memory Usage` 监控](/grafana-tidb-dashboard.md)查看每台 TiDB 实例上所有 `SESSION` 所缓存的计划占用的总内存。 -比如目前 TiDB 实例的 `SESSION` 并发数是 50,平均每个 `SESSION` 大致缓存 100 个计划,则总内存开销为 `50 * 100 * 100KiB` 约等于 `512MB`。 +> **注意:** +> +> 考虑到 Golang 的内存回收机制以及部分未统计的内存结构,Grafana 中显示的内存与实际的堆内存使用量并不相等。经过实验验证存在约 ±20% 的误差。 + +对于每台 TiDB 实例上所缓存的执行计划总数量,可以通过 Grafana 中的 [`Plan Cache Plan Num` 监控](/grafana-tidb-dashboard.md)查看。 + +Grafana 中 `Plan Cache Memory Usage` 和 `Plan Cache Plan Num` 监控如下图所示: + +![grafana_panels](/media/planCache-memoryUsage-planNum-panels.png) -目前可以通过变量 `tidb_prepared_plan_cache_size` 来设置每个 `SESSION` 最多缓存的计划数量,针对不同的环境,推荐的设置如下: +目前可以通过变量 `tidb_prepared_plan_cache_size` 来设置每个 `SESSION` 最多缓存的计划数量,针对不同的环境,推荐的设置如下,你可以结合监控进行调整: - TiDB Server 实例内存阈值 <= 64 GiB 时,`tidb_prepared_plan_cache_size = 50` - TiDB Server 实例内存阈值 > 64 GiB 时,`tidb_prepared_plan_cache_size = 100`