我一直在努力优化我的网站和数据库,我一直在使用mysqltuner.pl来帮助解决这个问题.我得到的一切都是正确的,除了表缓存命中率,无论我在my.cnf中提高它有多高,我仍然打0%(284开/ 79k开).
我的问题是我真的不明白究竟是什么影响了这个,所以我真的不知道在我的查询/数据库结构中要找什么来解决这个问题.
该表缓存定义MySQL有同时打开的文件描述符的数量.因此,表缓存命中率将受到相对于您的限制的表数以及重新引用表的频率的影响(请记住,它不只是计算单个连接,而是同时连接)
例如,如果您的限制为100并且您有101个表并且按顺序查询每个表,则永远不会获得任何表缓存命中.另一方面,如果你只有1个表,你通常应该接近100%的命中率,除非你经常运行FLUSH TABLES(只要你的table_cache设置得高于通常同时连接的数量).
因此,对于调优,您需要查看一个进程/客户端可能引用的不同表的数量,然后查看您可能通常具有的并发连接数.
没有更多细节,我无法猜测你的情况是由于同时连接太多还是经常引用的表太多.
缓存应该维护热数据的副本。热数据是被大量使用的数据。如果您无法从某个缓存中检索数据,则意味着数据库必须访问磁盘来检索数据。
- 编辑 -
抱歉,如果这个定义看起来有点令人讨厌。一个特定的缓存往往会覆盖很多实体,而这些都是数据库特定的,你需要首先找出表缓存缓存了什么。
--编辑:一些调查--
好吧,看来(从这篇文章的回复来看),Mysql 使用表缓存来存储用于表示表的数据结构。数据结构还(通过封装或通过为每个表具有重复的表条目)表示为文件系统上的数据文件打开的一组文件描述符。MyIsam 引擎对表使用一个,对每个索引使用一个,此外,每个活动查询元素都需要自己的描述符。
文件描述符是用于文件IO的内核实体,它代表特定文件读取或写入的低级上下文。
我认为您要么错误地解释了该值,要么在这种情况下需要以不同的方式解释它们。284 是您拍摄快照的实例上的活动表数量,第二个值表示自您启动 Mysql 以来获取表的次数。
我大胆猜测您需要对该读取进行多个快照,并查看第一个值(该实例中的活动 fd)是否超出了您的缓存大小容量。
ps,内核通常对允许每个进程打开的文件描述符的数量有一个上限——因此,如果它太低,您可能需要调整它。
归档时间: |
|
查看次数: |
17759 次 |
最近记录: |