始终将 MySQL 数据库管理到内存中

始终将 MySQL 数据库管理到内存中

不是系统管理员,所以...我们在 MySQL 5.0.22 实例上有一个大约 4GB 大小的数据库。表是 InnoDB / UTF-8。基本上有一个针对索引列的查询。硬件有 16GB 内存。理想情况下,我希望管理数据文件和索引文件始终在内存中(写入被刷新到磁盘)。这台服务器上的活动很少。

假设它有足够的内存(我认为确实如此),这应该是无需交换到磁盘的预期行为吗?

我如何确认这种行为正在发生?

提前致谢

答案1

如果您没有运行任何其他占用大量内存的应用程序,那么将您的“工作集”放入内存中应该没有任何问题。完全。我有几个 SQL 服务器就是这么做的。它们提供了出色的读取性能并且没有造成任何麻烦。

要做的事情:

  1. 确保 mysql 被告知为 innodb 分配足够的缓冲池 - 在 my.cnf 中输入:

    innodb_buffer_pool_size=8GB

  2. 假设你没有其他占用大量内存的应用程序 [ Apache / 任何应用程序服务,自定义内容 ] - 最小化可用的交换 [ 关于这个问题有不同的相互矛盾的“学派”。我会放 1GB 的交换 + 监视器,并确保它没有被使用。 ] ; [ 你可以阅读一些关于交换的意见这里]

  3. 确保 mysql 在启动后立即“预热”——运行查询,强制 mysql 读取表中的每一行/列。简单:

    从表中选择 md5(col1),md5(col2)

    应该可以解决问题。重复修改此查询[例如length(col1)]以确保数据确实是从内存中读取的。为了进行更科学的检查,您可以并行运行iostat并确保未触及磁盘。为了更加科学 - 您可能需要查看innodb的统计数据[以确保在执行新版本的查询时没有I / O]通过执行

    显示引擎 INNODB 状态\G

    更多关于解释输出的内容这里这里

相关内容