减少ubuntu @ aws微实例上mysql的内存消耗

时间:2012-05-20 20:01:44

标签: mysql memory-management amazon-ec2 amazon-web-services mysql-management

我最近开始了一个PoC项目,我们正在开发一个小型Web应用程序。初始设置在AWS的微实例上完成。我们在rails + mysql堆栈上。

在安装/运行MySQL之后,我发现已经消耗了大约500多MB的RAM;其余的系统(微型实例只有620 MB RAM)就相当少了。

我们的应用程序在此阶段相当简单。我可以做些什么来减少MySQL服务器消耗的内存吗?

感谢帮助。

4 个答案:

答案 0 :(得分:71)

在my.cnf文件中:

performance_schema = 0

然后重启mysql。如果您以前使用它,这应该会大大削减内存使用量。


2016编辑:从MySQL 5.7.8开始,上述内容不足以释放您对性能架构数据的记忆:

  

从MySQL 5.7.8开始,即使禁用了性能模式,它也会继续填充global_variables,session_variables,global_status和session_status表。

source

要防止此行为,请在show_compatibility_56之外将performance_schema设置为1。也就是说,您的my.cnf更改应该如下所示:

performance_schema = 0
show_compatibility_56 = 1

答案 1 :(得分:36)

在MySQL配置文件(my.cnf)中更改此设置

key_buffer              = 8M 
max_connections         = 30 # Limit connections
query_cache_size        = 8M # try 4m if not enough 
query_cache_limit       = 512K
thread_stack            = 128K

答案 2 :(得分:2)

只是添加到另一个答案。我最近在亚马逊微实例(不是Ubuntu)上遇到了这个问题。 my.cnf文件几乎是空的,所以我做的是:

cp /etc/my.cnf /etc/my.cnf.orig
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

编辑my.cnf并启用innodb行(如果适用)。重启mysqld。

微实例也没有交换,这可能是个问题..

SWAPFILE=/mnt/swapfile.swap
dd if=/dev/zero of=$SWAPFILE bs=1M count=512
mkswap $SWAPFILE
swapon $SWAPFILE

然后在/etc/rc.local中添加:

swapon /mnt/swapfile.swap

要在ruby中保存内存,您可能需要使用ruby enterprise:

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
gpasswd -a root rvm
source /etc/profile.d/rvm.sh
rvm get head
rvm reload
rvm install ree
rvm --default use ree

答案 3 :(得分:1)

我有一台只有500mb ram的服务器,发现当我的表变大时,mysql开始使用很多ram。在玩了一堆设置之后,减少了我的内存使用量就是将我的所有表格转换为MyISAM。 如果你不需要innodb转换表的功能到MyISAM帮助相当多。 您可以像这样转换表:

ALTER TABLE test.mytable ENGINE=MyISAM;

在此更改后,我发现内存使用量减少了20%。 为了进一步减少内存使用量,您可以将所有表转换为MyISAM,然后完全关闭mysql中的innodb支持。 这使我的内存使用量减少了50%。

您可以通过添加:

来完成此操作
[mysqld]
default_storage_engine=myisam
innodb=OFF

然后重新启动mysql。