MySQL获取时间问题

时间:2017-03-19 22:44:02

标签: mysql performance fetch

我有两个不同的MySQL服务器,它们具有相同的数据库(副本),都带有Ubuntu x64,4Gb RAM。两者都是托管在同一VMWare服务器中的虚拟机。

第一个是带有MySQL 5.6.33-0ubuntu0.14.04.1-log的旧服务器,新的服务器安装了5.7.17-0ubuntu0.16.04.1版本。

我比较了一些SQL脚本的性能,并且我注意到新服务器具有更大的获取时间和完全相同的SQL。你能帮助确定可能的原因吗?

  • 也许5.7引擎以不同且效率较低的方式分析SQL?
  • 也许某些MySQL配置需要以不同的方式进行调整?我只更改了innodb_buffer_pool_size = 2G和innodb_buffer_pool_instances = 2(与旧服务器相同)

想法? THX

1 个答案:

答案 0 :(得分:1)

我怀疑你的问题是你的缓冲池已经分配,​​但还没有充满数据。在运行查询时,它必须从磁盘获取数据,这比RAM慢得多。当您一次又一次地运行这些查询时,所需的数据已经在缓冲池中,MySQL将利用它。可以在不触及磁盘的情况下读取缓冲池中已有的数据。

您可以查看缓冲池中的数量。这是我的测试实例的一个例子(我把“...”因为输出很长,我正在显示摘录。)

mysql> SHOW ENGINE INNODB STATUS\G
...
----------------------
BUFFER POOL AND MEMORY
----------------------
...
Buffer pool size   65528
Free buffers       64173
Database pages     1339
...

这些数字均为每页16KB的“页数”。你可以看到我有64 * 1024页= 1GB分配,但几乎所有这些都是免费的,即没有被数据占用。只有2%的缓冲池页面中包含数据。如果我现在运行查询,它可能必须从磁盘读取以加载数据。除非我在磁盘上的数据库中的数据也很少,并且它只填充了我的缓冲池的2%,即使它已经完全加载。

无论如何,假设您有比缓冲池大小更多的数据,它将在您运行查询时逐渐填充缓冲池。然后你会看到“数据库页面”与“自由缓冲区”的比例随着时间的推移而变化(我不知道为什么他们说两个页面和缓冲区,因为它们指的是同一个东西)。后续查询应该运行得更快。