为什么 MySQL table_cache 已满但从未使用

为什么 MySQL table_cache 已满但从未使用

我一直在使用 tuning-primer.sh 脚本来调整我的 my.cnf 设置。大多数东西都运行良好,但关于 TABLE CACHE 的部分却毫无意义:

表缓存当前 table_cache 值 = 900 个表。

您总共有 0 张桌子 您已打开 900 张桌子。

当前 table_cache 命中率为 1%,而您的表缓存已 100% 被使用。

你可能应该增加你的table_cache

当我执行 SHOW STATUS; 时,我得到了以下与表相关的数字:

打开表 = 900

打开的表 = 0

似乎出了点问题。我有一些额外的内存可以用来增加 table_cache 的大小,但我的感觉是,已经可用的 900 个表没有任何作用,增加它只会浪费更多的能量。

为什么会发生这种情况?是否有其他设置可能导致我的所有 table_cache 槽都被使用,即使它们没有命中?

我最多有 150 个连接,并且每个连接可能不超过 4 个表,仅供参考。

以下是临时表的调整器脚本输出,我也一直在调整它:

临时表

当前 max_heap_table_size = 90 M

当前 tmp_table_size = 90 M

在 11032358 个临时表中,40% 是在磁盘上创建的

也许您应该增加 tmp_table_size 和/或 max_heap_table_size 以减少基于磁盘的临时表的数量。

注意!内存表中不允许存在 BLOB 和 TEXT 列。

如果您使用这些列,提高这些值可能不会影响磁盘临时表的比例。

答案1

表缓存当前 table_cache 值 = 900 个表,这将是您所有 150 个连接的总数。如果我没记错的话,每个连接都使用自己的 table_cache

相关内容