MySQL Workbench报告与服务器运行状况相关的名为“密钥效率”的值。这意味着什么?它的含义是什么?
从MySQL.com开始,“关键效率”是:
...表明实际
key_read_requests
的key_reads
的数量。
好的,那是什么意思。它告诉我如何调整服务器?
答案 0 :(得分:81)
“关键效率”表示您从MySQL内存中保存的索引缓存中获得了多少价值。如果您的密钥效率很高,那么MySQL通常会从内存空间执行密钥查找,这比从磁盘检索相关索引块要快得多。
提高密钥效率的方法是将更多的系统内存专用于MySQL的索引缓存。如何执行此操作取决于您使用的存储引擎。对于MyISAM,增加key-buffer-size的值。对于InnoDB,增加innodb-buffer-pool-size的值。
然而,正如Michael Eakins指出的那样,操作系统还拥有最近访问过的磁盘块缓存。操作系统可用的内存越多,它可以缓存的磁盘块就越多。此外,磁盘驱动器本身(以及某些情况下的磁盘控制器)也有缓存 - 这也可以加速从磁盘检索数据。层次结构有点像这样:
在实践中,除非您的系统非常繁忙,否则1和2之间的差异几乎无法察觉。此外,不太可能(除非您的系统具有比磁盘控制器少的备用RAM),方案3将发挥作用。
我使用过具有相对较小索引缓存(512MB)的MyISAM表的服务器,但是使用了大量系统内存(64GB),并且发现很难证明增加索引缓存大小的价值。我想这取决于你的服务器上发生了什么。如果您运行的只是一个MySQL数据库,那么OS缓存很可能非常有效。但是,如果您在同一台服务器上运行其他作业并且这些作业使用大量内存/磁盘访问,则这些可能会导致有价值的缓存索引块导致MySQL更频繁地访问磁盘。
一个有趣的练习(如果你有时间)是修补你的系统,让它运行得更慢。在大型表上运行标准工作负载,减少MySQL缓冲区,直到影响变得明显。通过文件系统(cat large-file> / dev / null)抽取大量(大于RAM)的无关数据来刷新文件系统缓存。在查询运行时观察iostat。
“关键效率”并不能衡量您的密钥有多好。精心设计的按键对性能的影响远远大于“关键效率”。遗憾的是,MySQL并没有太多帮助你。
答案 1 :(得分:7)
Key_read_requests是从缓存中读取密钥块的请求数。而 key_reads是磁盘上密钥块的物理读取次数。所以这两个变量 可以独立增加。 (http://bugs.mysql.com/bug.php?id=28384)
这仍然像泥一样清晰。
接下来的解释:
部分有效使用Key_reads
有一个部分有效的理由 检查Key_reads,假设我们 关心身体的数量 读取发生的事情,因为我们知道 磁盘相对于其他磁盘非常慢 计算机的一部分。这是 在哪里我回到我所说的 “大多是事实”,因为 Key_reads实际上不是物理的 磁盘读取。如果要求 数据块不在运行中 系统的缓存,然后一个Key_read是 磁盘读取 - 但如果它被缓存,那么 这只是一个系统调用。然而, 让我们第一次难以证明 假设:
难以证明的假设#1:A Key_read可能对应于a 物理磁盘读,也许。如果我们采取 那个假设是真的,然后是什么 其他原因可能是我们有关心的 关于Key_reads?这种假设导致 到“缓存未命中率显着 比缓存命中慢,“这使得 感。如果它的速度一样快 Key_read作为Key_read_request,是什么 无论如何使用密钥缓冲区? 让我们相信MyISAM的创作者 一,因为他们设计了缓存命中 比错过更快。 (http://planet.mysql.com/entry/?id=23679)