MySQL调整内存过多的情况

时间:2011-07-21 17:32:06

标签: mysql

我在拥有8Gb RAM的服务器上运行带有500mb数据库的MySQL服务器。是否有任何合理的调音会占用所有可用的内存(我的意思是大约80%的8Gb)?

1 个答案:

答案 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等)