我收到了托pipe服务提供商的build议,指出生产服务器pipe理中的一般规则是确保数据库服务器上的内存大于总数据库的大小。
我们的数据库是1800MB(不断增长),我们被告知要购买一个2GB的服务器。 这并没有与我坐在一起,但我不是生产服务器pipe理的专家。 我们正在运行一个主要是InnoDB表和一些MyISAM的MySQL数据库。
谢谢!
由于您正在使用MySQL,因此您需要测量两个存储引擎的内存
每个存储引擎都有不同的caching特征。 我在2011年4月14日的DBA StackExchange中写了这个 。
InnoDB会将数据和索引页面caching到其缓冲池中
这个查询会告诉你GB的innodb_buffer_pool_size的理想大小
SELECT SUM(data_length+index_length)/POWER(1024,3) RecommendedBufferPoolSize FROM information_schema.tables WHERE engine='InnoDB';
我也会确保InnoDB使用innodb_file_per_table 。
MyISAM会将索引页caching到其caching中
这个查询会告诉你key_buffer_size的理想大小
SELECT SUM(index_length)/POWER(1024,3) RecommendedKeyBufferSize FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','performance_schema','mysql');
将这两个数字放在一起,并乘以1.1(以便适应数据库连接,用于sorting,读取,连接的缓冲区)。 这应该是需要的RAM的数量。 在很多情况下,可能只是有太多的数据存储在内存中。
作为一个经验法则,如果你有所有的InnoDB数据,那么innodb_buffer_pool_size应该不超过安装RAM的80%(我更喜欢75%)。
从这里我build议你只使用常识。 仅仅因为你有10G的InnoDB数据和索引并不意味着所有的数据和索引都会驻留在RAM中,当然,除了使用每个InnoDB表和每个InnoDB索引在所有表上运行每个SELECT。
在你的情况下,如果你不知道你最初将使用哪个存储引擎,或者如果数据量远远超过安装的RAM,我将只使用InnoDB的65%的RAM和MyISAM的10%的RAM。