[!!] 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,IF(PowerOf1024>3,PowerOf1024)))+0.4999),SUBSTR(' KMG',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缓冲池的大小,PowerOf1024)))+0.49999),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.