我们遇到了一个问题,即查询一个大约有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移至64 GB RAM时,MysqL是否还有其他与内存无关的变量?
我们使用64位linux(Ubuntu)作为我们的数据库服务器.
谢谢,
盖伦
解决方法
如果你正在使用InnoDB,那么设置的最重要的变量是innodb_buffer_pool_size.我会将其设置为大约80%的系统内存.一旦你在一些使用后缓存热身,你最活跃的数据(工作数据集)将在内存中(innodb_buffer_pool_size),你对它的操作应该非常快.凭借64GB的内存,你绝对可以在那里体验到很多.内存对于数据库服务器来说总是一个好买的.