我最近开始了一个PoC项目,我们正在开发一个小型Web应用程序。初始设置在AWS的微实例上完成。我们在rails + mysql堆栈上。
在安装/运行MySQL之后,我发现已经消耗了大约500多MB的RAM;其余的系统(微型实例只有620 MB RAM)就相当少了。
我们的应用程序在此阶段相当简单。我可以做些什么来减少MySQL服务器消耗的内存吗?
感谢帮助。
答案 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。