MySQL表适合主内存是什么意思?

时间:2014-01-26 22:44:05

标签: mysql innodb

我在谈论InnoDB表的优化时会看到这样的短语,但从未解释过:

  • 含义
  • 如何完成
  • 决定是否可以完成的条件

还有:

  • 带来的好处

2 个答案:

答案 0 :(得分:4)

从磁盘读取一行比从RAM读取同一行的时间长约100,000倍。

参见Numbers Everyone Should Know,基于Jeff Dean在2009年的一次有影响力的主题演讲。从RAM读取大约需要100纳秒。磁盘搜索需要大约10,000,000纳秒(当然一些磁盘速度更快,但最好的磁盘仍然比RAM慢几千倍)。

由于我们通常多次读取数据,因此我们希望避免多次从磁盘读取数据的开销。因此,第一次读取数据会将数据复制到RAM,然后后续读取将利用RAM的更快性能。

但是RAM是易失性的(当计算机断电时RAM中的数据被擦除),并且RAM比每个存储单元的磁盘要贵得多。因此,我们通常使用大磁盘(例如1 TB)来存储大量数据,并使用较少量的RAM(数据库服务器上为typically 16-64 GB)来存储最常访问的数据。

大多数情况下,我们可以为大多数读取假设数据库帐户的相对较小的子集。这称为Pareto Principle。因此,即使您的RAM比磁盘小得多,您也可以假设您可以在90%的时间内读取已经在RAM中的数据。

你可以看到它在MySQL中的效果如何:

mysql> SHOW ENGINE INNODB STATUS\G

...
----------------------
BUFFER POOL AND MEMORY
----------------------
...
Buffer pool hit rate 929 / 1000 ...
...

命中率为929/1000表示在1000行读取中,它能够读取RAM中的行929次。剩下的71次必须从磁盘读取数据行。这不是一个糟糕的比例,但如果你经常访问的数据完全适合RAM,你会看到这个比例增加到999/1000甚至是1000/1000。

您不一定需要与整个数据库一样多的RAM - 您只需要足够大的RAM来满足大多数查询。当然,确保最后一小部分查询从RAM读取数据会更好。如果我们能够承受1000 GB的RAM,那将是一件好事,但通常做出妥协会更具成本效益。


如果您想了解更多信息,请参阅以下资源:

答案 1 :(得分:1)

  • 这意味着该表足够小,可以完全保存在RAM中
  • 购买更多内存或缩小表格(使用更少的行,更少或更少的列,和/或更少或更小的索引)
  • 只有表格足够小才可以完全保存在RAM中
  • RAM比硬盘快得多