我最近开始了一个PoC项目,我们正在开发一个小型的Web应用程序。初始设置是在AWS的一个微示例上完成的。我们使用的是Rails+mysql堆栈。在安装/运行MySQL之后,我发现已经消耗了大约500+ MB的RAM;为系统的其余部分留下的空间相当少(微示例只有620 MB RAM)。我们的应用程序在这个阶段是相当简单的。我可以做些什么来减少MySQL服务器消耗的内存吗?感谢你的帮助。
6qqygrtg1#
自MySQL 8.0.30起:编辑您的/etc/mysql/my.cnf文件并添加以下内容:
/etc/mysql/my.cnf
[mysqld] performance_schema = 0
重新启动你的mysql服务器,快乐就会接踵而至。要验证配置更改是否已正确加载,请启动一个新的mysql会话(例如mysql -u root -p)并运行以下命令:
mysql -u root -p
SHOW VARIABLES LIKE '%perf%';
您应该会在顶部看到以下行:
| performance_schema | OFF |
它应该是OFF。如果它是ON,则由于某种原因,您的配置没有正确加载。
OFF
ON
rur96b6h2#
在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
atmip9wb3#
为了补充另一个答案,我最近在使用Amazon Micro示例(不是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中添加:交换文件/mnt/交换文件.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
ukqbszuj4#
我有一个只有500mb内存的服务器,我发现mysql开始使用大量的内存,因为我的表变大了。在玩了一堆设置后,我减少内存使用的是将我所有的表转换为MyISAM。如果你不需要nodb的功能,将表转换为MyISAM会有很大帮助。你可以这样转换表:
ALTER TABLE test.mytable ENGINE=MyISAM;
在这个改变之后,我发现内存使用减少了20%。为了进一步减少内存使用,你可以把所有的表转换成MyISAM,然后完全关闭mysql中的innodb支持。这减少了我50%的内存使用。您可以通过添加以下内容来实现此目的:
[mysqld] default_storage_engine=myisam innodb=OFF
然后重新启动mysql。
inn6fuwd5#
配置交换文件 sudo fallocate -l 2G /交换文件 sudo chmod 600 /交换文件 sudo mkswap /交换文件 sudo交换打开/交换 文件sudo cp /etc/fstab/etc/fstab. bak sudo nano /etc/fstab
在结尾处添加以下行,保存并关闭: /swapfile swap swap defaults 0 0/etc/sysctl.conf文件中的所有文件都是空的。在结尾处添加以下行,保存并关闭:虚拟交换性=10
配置PHP sudo nano /opt/bitnami/php/etc/存储器配置文件
; Bitnami memory configuration for PHP-FPM ; ; Note: This will be modified on server size changes pm.max_children=10 pm.start_servers=2 pm.min_spare_servers=2 pm.max_spare_servers=10 pm.max_requests=5000
**配置MariaDB(MySQL)** sudo nano /opt/bitnami/mariadb/conf/bitnami/memory.conf文件中的数据库文件。
[mysqld] # wait_timeout = 120 long_query_time = 1 query_cache_limit=2M query_cache_type=1 query_cache_size=8M innodb_buffer_pool_size=16M # innodb_log_file_size=128M # innodb_flush_method=O_DIRECT tmp_table_size=16M max_connections = 100 max_user_connections = 250 key_buffer_size=8M
重新启动/opt/bitnami/ctlscript.sh
5条答案
按热度按时间6qqygrtg1#
自MySQL 8.0.30起:
编辑您的
/etc/mysql/my.cnf
文件并添加以下内容:重新启动你的mysql服务器,快乐就会接踵而至。
要验证配置更改是否已正确加载,请启动一个新的mysql会话(例如
mysql -u root -p
)并运行以下命令:您应该会在顶部看到以下行:
它应该是
OFF
。如果它是ON
,则由于某种原因,您的配置没有正确加载。rur96b6h2#
在MySQL配置文件(my.cnf)中更改此设置
atmip9wb3#
为了补充另一个答案,我最近在使用Amazon Micro示例(不是Ubuntu)时遇到了这个问题。my.cnf文件几乎是空的,所以我做了以下操作:
编辑my.cnf并启用innodb行(如果适用)。重新启动mysqld。
此外,微示例没有交换,这可能是一个问题。
然后在/etc/rc.local中添加:
交换文件/mnt/交换文件.swap
为了节省ruby中的内存,您可能需要使用ruby enterprise:
ukqbszuj4#
我有一个只有500mb内存的服务器,我发现mysql开始使用大量的内存,因为我的表变大了。在玩了一堆设置后,我减少内存使用的是将我所有的表转换为MyISAM。如果你不需要nodb的功能,将表转换为MyISAM会有很大帮助。你可以这样转换表:
在这个改变之后,我发现内存使用减少了20%。为了进一步减少内存使用,你可以把所有的表转换成MyISAM,然后完全关闭mysql中的innodb支持。这减少了我50%的内存使用。
您可以通过添加以下内容来实现此目的:
然后重新启动mysql。
inn6fuwd5#
配置交换文件 sudo fallocate -l 2G /交换文件 sudo chmod 600 /交换文件 sudo mkswap /交换文件 sudo交换打开/交换 文件sudo cp /etc/fstab/etc/fstab. bak sudo nano /etc/fstab
在结尾处添加以下行,保存并关闭: /swapfile swap swap defaults 0 0
/etc/sysctl.conf文件中的所有文件都是空的。
在结尾处添加以下行,保存并关闭:虚拟交换性=10
配置PHP sudo nano /opt/bitnami/php/etc/存储器配置文件
**配置MariaDB(MySQL)** sudo nano /opt/bitnami/mariadb/conf/bitnami/memory.conf文件中的数据库文件。
重新启动/opt/bitnami/ctlscript.sh