MySQL的调谐器报告说,MySQL可以使用安装的RAM的166%,我如何限制RAM的使用?
[!!]最大可能的内存使用量:426.8M(已安装RAM的166%)
你可以configuration
在将内存分配给任一引擎之前,最好反思一下每个存储引擎的caching情况
使用的主要机制是密钥caching。 它只caching来自.MYI文件的索引页面。 要调整您的密钥caching的大小,请运行以下查询:
SELECT CONCAT(ROUND(KBS/POWER(1024, IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), SUBSTR(' KMG',IF(PowerOf1024<0,0, IF(PowerOf1024>3,0,PowerOf1024))+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 PowerOf1024) B;
这将给出MyISAM密钥caching的推荐设置( key_buffer_size )给你的当前数据集( 查询将上限为4G(4096M),对于32位操作系统,4GB是限制,对于64位,8GB。
使用的主要机制是InnoDB缓冲池。 它caching来自InnoDB表访问的数据和索引页面。 要调整您的InnoDB缓冲池的大小,请运行以下查询:
SELECT CONCAT(ROUND(KBS/POWER(1024, IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), SUBSTR(' KMG',IF(PowerOf1024<0,0, IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables WHERE engine='InnoDB') A, (SELECT 2 PowerOf1024) B;
这将给出您的当前数据集的InnoDB缓冲池大小的推荐设置( innodb_buffer_pool_size )。
不要忘记调整InnoDB日志文件的大小(ib_logfile0和ib_logfile1)。 MySQL源代码放置所有InnoDB日志文件的组合大小的上限必须<4G(4096M)。 (注意:Percona服务器的二进制文件超过了这个,我最近使用innodb_log_file_size为一个InnoDB日志文件设置了一个4G的大型数据库服务器)
为了简单起见,只给出两个日志文件,下面是如何调整它们的大小:
在两个查询的最后是一个内联查询: (SELECT 2 PowerOfTwo) B
(SELECT 0 PowerOf1024)给出了字节中的设置 (SELECT 1 PowerOf1024)以千字节为单位给出设置 (SELECT 2 PowerOf1024)以兆字节为单位给出设置 (SELECT 3 PowerOf1024)以千兆字节为单位给出设置 没有常识的替代品。 如果内存有限,存储引擎混合或其组合,则必须针对不同的场景进行调整。
如果你有2GB内存和16GB的InnoDB,那么分配512M作为innodb_buffer_pool_size 。
如果您有2GB内存和4GB的MyISAM索引,请将512M分配为key_buffer_size 。
如果你有2GB内存和4GB的MyISAM索引和16GB的InnoDB,分配512M作为innodb_buffer_pool_size和512M作为innodb_buffer_pool_size 。
可能的场景是无尽的!
请记住,无论您分配给DB连接还是操作系统,都需要足够的RAM。
你应该调整my.cnf innodb_buffer_pool_size和innodb_buffer_pool_size ,这两个是最重要的内存相关的设置。 要获取当前值,可以使用show variables like 'key_buffer_size'; 并show variables like 'innodb_buffer_pool_size'; 在mysql命令行客户端。
在Myisam引擎的情况下
key_buffer_size +(read_buffer_size + sort_buffer_size)* max_connections
这个值给出了mysql可以消耗的所有可能的内存。这个值应该比你的RAM或接近60%的内存less。 innodb的innodb_buffer_pool_size应该小于你的RAM或者你的ram的60%
调整以上值,使RAM的使用率将是你的RAM的60%。