![为什么 MySQL table_cache 已满但从未使用](https://linux22.com/image/514788/%E4%B8%BA%E4%BB%80%E4%B9%88%20MySQL%20table_cache%20%E5%B7%B2%E6%BB%A1%E4%BD%86%E4%BB%8E%E6%9C%AA%E4%BD%BF%E7%94%A8.png)
我一直在使用 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