web-dev-qa-db-ja.com

ubuntu @awsマイクロインスタンスでのmysqlのメモリ消費を削減

私は最近、小さなWebアプリを開発しているPoCプロジェクトを開始しました。初期設定は、AWSのマイクロインスタンスで行われます。 Rails + mysqlスタックを使用しています。

MySQLをインストール/実行した後、約500 MB RAMはすでに消費されており、残りのシステムではかなり少なくなっています(マイクロインスタンスのRAMはわずか620 MBです)。

私たちのアプリはこの段階ではかなりシンプルです。 MySQLサーバーによって消費されるメモリを削減するために何かを行うことはできますか?

助けに感謝します。

30
Gyan

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
36
user1391670

My.cnfファイル内:

performance_schema = 0

そして、mysqlを再起動します。以前に使用していた場合、これによりメモリ使用量が大幅に削減されます。


2016編集:MySQL 5.7.8以降、パフォーマンススキーマデータのメモリを解放するには、上記では不十分です。

MySQL 5.7.8以降、パフォーマンススキーマが無効になっている場合でも、global_variables、session_variables、global_status、およびsession_statusテーブルにデータが入力され続けます。

ソース

この動作を防ぐには、show_compatibility_56に加えてperformance_schemaを1に設定します。つまり、my.cnfの変更は次のようになります。

performance_schema = 0
show_compatibility_56 = 1
77
Mahn

他の答えに追加するだけです。私は最近、Amazonマイクロインスタンス(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/swapfile.swap

Rubyでメモリを節約するには、Rubyエンタープライズ:

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
2
EivinGS

私は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を再起動します。

1
Rockvole