MySQL 能否有效利用 64 GB RAM?

Gal*_*len 22 mysql linux memory database 64-bit

我们遇到了一个问题,查询一个大约有 5000 万行且索引大小为 4 GB(表大小约为 6 GB)的表导致数据库服务器交换内存,并显着减慢。我很确定这与超出临时表大小有关,并且它被交换到磁盘。

如果我将我的数据库服务器从 32 GB RAM 升级到 64 GB RAM,我想知道 MySQL 数据库是否能够充分利用这个额外的内存而不是交换。我已经研究了一些变量(例如 KEY_BUFFER_SIZE 等...),它们似乎支持超过 64 GB 的设置值。但是,MySQL 文档说 tmp_table_size 最大为 4 GB。

那么内存升级值得吗?“查询大表”问题会从中受益,还是因为 4 GB 的限制而无济于事?我知道还有其他可能的解决方案,例如重组以不同方式分区的表等......但是如果不改变表的任何内容,额外的内存会有所帮助吗?

另外,一般来说,当从 32 GB RAM 移动到 64 GB RAM 时,是否还有其他与内存相关的变量是 MySQL 无法利用的?

我们使用 64 位 linux (Ubuntu) 作为我们的数据库服务器。

谢谢,盖伦

pQd*_*pQd 11

是的 - 如果您使用 InnoDB 并且有读取密集型工作负载,您绝对可以利用大量 RAM [假设您的数据集适合内存 - 您的服务器将非常快]。

我在 8-16 GB 服务器上使用 MySQL 和 InnoDB 存储,工作集适合内存。


小智 9

在花钱购买内存之前,是否值得花一些额外的时间和精力来研究导致系统交换的原因?

即使在将整个表、索引和最大 temp_table 加载到内存中之后,32GB 的内存仍然留有足够的可用内存。快速搜索带来了这两个可能相关的文档:


vmf*_*rms 5

如果您使用的是 InnoDB,则要设置的最重要的变量是innodb_buffer_pool_size. 我会将其设置为大约 80% 的系统内存。一旦您的缓存在使用后预热,您最活跃的数据(工作数据集)将在内存中(innodb_buffer_pool_size)并且您的操作应该非常快。有了 64GB 的内存,你绝对可以在里面装下很多东西。对于数据库服务器来说,内存总是一个不错的选择。