MySQL可以有效利用64 GB RAM吗?


22

我们一直在遇到这样一个问题:查询具有约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)作为我们的数据库服务器。

谢谢,盖伦

Answers:


5

如果您使用的是InnoDB,则要设置的最重要的变量是innodb_buffer_pool_size。我会将其设置为系统内存的大约80%。缓存在使用后经过预热后,最活跃的数据(工作数据集)将位于内存(innodb_buffer_pool_size)中,并且对其进行的操作应非常快。凭借64GB的内存,您绝对可以在其中容纳很多。内存始终是DB服务器的不错选择。


11

是的-如果您使用InnoDB且具有读取密集型工作负载,则您绝对可以利用大量RAM [假设您的数据集适合mem-您的服务器将很快地发展起来]。

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


同样在这里-我们在64GB的盒子上运行InnoDB,这很棒。
詹姆斯

9

也许值得花一些额外的时间和精力来研究什么导致系统在花费内存之前进行交换?

即使将整个表,索引和最大temp_table加载到内存中之后,32GB的内存也会留下大量可用内存。快速搜索找到了可能相关的以下两个文档:


0

如果您认为这是由于创建了非常大的临时表而引起的,则可能需要考虑可以改进查询以避免临时表的方法。

您可以在Stackoverflow上发布包含架构,查询,说明计划和一些有关该问题的详细信息的帖子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.