我在拥有8Gb RAM的服务器上运行带有500mb数据库的MySQL服务器。是否有任何合理的调音会占用所有可用的内存(我的意思是大约80%的8Gb)?
答案 0 :(得分:2)
这取决于你正在调整的内容。如果你想调整InnoDB和/或MyISAM,即使在低内存环境中,你也需要从这个链接中扩展公式 - > https://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam/2194#2194
基本上,您需要75%的RAM专用于InnoDB。如果所有的MyISAM,从链接中给出的公式测量推荐。
更新2011-07-21 13:52美国东部时间
剪切并粘贴此公式
SELECT CONCAT(ROUND(KBS / POWER(1024,IF(PowerOfTwo< 0,0,IF(PowerOfTwo> 3,0,PowerOfTwo)))+ 0.49999),
SUBSTR('KMG',IF(PowerOfTwo< 0,0,IF(PowerOfTwo> 3,0,PowerOfTwo))+ 1,1))recommended_innodb_buffer_pool_size
FROM(SELECT SUM(data_length + index_length)KBS FROM information_schema.tablesM
WHERE engine ='InnoDB')A,
(选择2 PowerOfTwo)B; </ strong>
它将输出给定数据集的InnoDB缓冲池大小。
剪切并粘贴这一个
SELECT CONCAT(ROUND(KBS / POWER(1024,IF(PowerOfTwo&lt; 0,0,IF(PowerOfTwo&gt; 3,0,PowerOfTwo)))+ 0.4999),
SUBSTR('KMG',IF(PowerOfTwo&lt; 0,0,IF(PowerOfTwo&gt; 3,0,PowerOfTwo))+ 1,1))recommended_key_buffer_size
FROM(SELECT LEAST(POWER(2,32),KBS1)KBS FROM
(SELECT SUM(index_length)KBS1 FROM information_schema.tables
WHERE engine ='MyISAM'AND table_schema NOT IN('information_schema','mysql'))AA
)A,(SELECT 2 PowerOfTwo)B; <br/>
它将输出您给定数据集的MyISAM密钥缓冲区大小。
请运行这两个公式。请记住,MyISAM仅缓存索引页面。 InnoDB需要缓存数据和索引页面。可能它们的组合大小都将小于500 MB。
更新2011-07-21 14:54美国东部时间
您可能还想调整每个数据库的连接设置
I recommend tuning your max_connections
您可能还想下载mysqltuner.pl并在数据库服务器上运行它。
wget mysqltuner.pl
这个perl脚本将告诉您是否已经过度配置了DB Connections,以及mysql期望拥有的最大RAM。如果所需安装的RAM的百分比超过80%,则降低per_connect数据库设置(sort_buffer_size,read_buffer_size,join_buffer_size等)