天天看点

ubuntu mysql 内存满了_ubuntu – 如何为mySQL分配内存限制?

mysql tuner报告mySQL可以使用166%的已安装ram,我如何限制RAM的使用?

[!!] Maximum possible memory usage: 426.8M (166% of installed RAM)

你可以配置

>所有MyISAM

>所有InnoDB

> MyISAM和InnoDB的混合物

在为任一引擎分配内存之前,最好反思每个存储引擎的缓存

配置MYISAM

使用的主要机制是密钥缓存.它仅缓存来自.MYI文件的索引页面.要调整密钥缓存的大小,请运行以下查询:

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密钥缓存的推荐设置(key_buffer_size)(the query will cap the recommendation at 4G (4096M).对于32位操作系统,4GB是限制.对于64位,8GB.

配置InnoDB

使用的主要机制是InnoDB缓冲池.它缓存来自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 Server二进制文件超过了这一点.我最近使用innodb_log_file_size设置了一个带有4G的大型数据库服务器,用于单个InnoDB日志文件)

为简单起见,只给出两个日志文件,以下是如何调整它们的大小:

>步骤1)将innodb_log_file_size = NNN添加到/etc/my.cnf

(NNN应为innodb_buffer_pool_size的25%或2047M,以较小者为准)

>步骤2)服务mysql停止

>步骤3)rm / var / log / mysql / ib_logfile [01]

>步骤4)服务mysql start(重新创建ib_logfile0和ib_logfile1)

警告

两个查询的结尾都是一个内联查询:(SELECT 2 PowerOfTwo)B

>(SELECT 0 PowerOf1024)给出字节设置

>(SELECT 1 PowerOf1024)以千字节为单位给出设置

>(SELECT 2 PowerOf1024)以兆字节为单位给出设置

>(SELECT 3 PowerOf1024)给出以千兆字节为单位的设置

>不接受0或大于3的功率

结语

常识无可替代.如果内存有限,存储引擎混合或其组合,则必须针对不同的方案进行调整.

如果您有2GB RAM和16GB InnoDB,请将512M分配为innodb_buffer_pool_size.

如果您有2GB RAM和4GB MyISAM索引,请将512M分配为key_buffer_size.

如果您有2GB RAM和4GB MyISAM索引和16GB InnoDB,请将512M分配为key_buffer_size,将512M分配为innodb_buffer_pool_size.

可能的场景是无止境的

请记住,无论您分配什么,请为数据库连接和操作系统留出足够的RAM.