什么是MySQL“关键效率”

时间:2010-10-02 08:50:33

标签: mysql reporting performance

MySQL Workbench报告与服务器运行状况相关的名为“密钥效率”的值。这意味着什么?它的含义是什么?

alt text

MySQL.com开始,“关键效率”是:

  

...表明实际 key_read_requests key_reads 的数量。

好的,那是什么意思。它告诉我如何调整服务器?

2 个答案:

答案 0 :(得分:81)

“关键效率”表示您从MySQL内存中保存的索引缓存中获得了多少价值。如果您的密钥效率很高,那么MySQL通常会从内存空间执行密钥查找,这比从磁盘检索相关索引块要快得多。

提高密钥效率的方法是将更多的系统内存专用于MySQL的索引缓存。如何执行此操作取决于您使用的存储引擎。对于MyISAM,增加key-buffer-size的值。对于InnoDB,增加innodb-buffer-pool-size的值。

然而,正如Michael Eakins指出的那样,操作系统还拥有最近访问过的磁盘块缓存。操作系统可用的内存越多,它可以缓存的磁盘块就越多。此外,磁盘驱动器本身(以及某些情况下的磁盘控制器)也有缓存 - 这也可以加速从磁盘检索数据。层次结构有点像这样:

  1. 最快 - 从MySQL的索引缓存中检索索引数据。成本是一些记忆操作。
  2. 检索OS文件系统缓存中保存的索引数据。成本是系统调用(用于读取)和一些内存操作。
  3. 检索磁盘系统缓存(控制器和驱动器)中保存的索引数据。成本是系统调用(用于读取),与磁盘设备的通信以及一些内存操作。
  4. slowest - 从磁盘表面检索索引数据。成本是系统调用,与设备的通信,磁盘的物理移动(手臂移动+旋转)。
  5. 在实践中,除非您的系统非常繁忙,否则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