在 mySQL 中调整(和理解)table_cache

jot*_*ngo 18 mysql performance-tuning

我运行了优秀的MySQL 性能调优脚本并开始研究这些建议。我遇到的一个是

TABLE CACHE
当前 table_cache 值 = 4096 个表 您总共有 1073 个表。您有 3900 个打开的表。当前 table_cache 命中率为 2%,而 95% 的表缓存正在使用中。你应该增加你的 table_cache

我开始阅读 table_cache,但发现MySQL 文档非常缺乏。他们确实说要增加table_cache“如果你有内存”。不幸的是,该table_cache变量被定义为“所有线程的打开表数”。

如果我增加这个变量,MySQL 使用的内存将如何变化?什么是好的值,将其设置为?

Man*_*cZX 16

来自MySQL 文档

例如,对于 200 个并发运行连接,您的表缓存大小应该至少为 200 × N,其中 N 是您执行的任何查询中每个连接的最大表数。您还必须为临时表和文件保留一些额外的文件描述符。

因此,如果在您的应用程序中,您有一个连接 4 个表的查询,并且您希望能够处理 200 个并发连接,那么根据该语句,您的 table_cache 应该至少为 800。

至于内存使用情况,我没有这些数字,我怀疑这将取决于它正在缓存的表的大小。