我最近開始了一個PoC項目,其中我們正在開發一個小型Web應用程序。最初的設置是在AWS的微型實例上完成的。我們在rails + mysql堆棧上。在ubuntu @ aws微實例上減少mysql的內存消耗
安裝/運行MySQL後,我發現大約有500多MB的RAM已經被使用;剩下的系統只剩下少量的620 MB RAM(微型實例)。
我們的應用程序在這個階段相當簡單。我可以做些什麼來減少MySQL服務器消耗的內存嗎?
欣賞幫助。
我最近開始了一個PoC項目,其中我們正在開發一個小型Web應用程序。最初的設置是在AWS的微型實例上完成的。我們在rails + mysql堆棧上。在ubuntu @ aws微實例上減少mysql的內存消耗
安裝/運行MySQL後,我發現大約有500多MB的RAM已經被使用;剩下的系統只剩下少量的620 MB RAM(微型實例)。
我們的應用程序在這個階段相當簡單。我可以做些什麼來減少MySQL服務器消耗的內存嗎?
欣賞幫助。
只需添加到其他的答案。我最近在亞馬遜微型實例(而不是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企業:
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
在你的my.cnf文件:
performance_schema = 0
並重新啓動mysql。如果您以前使用過內存,應該會顯着減少內存使用量。
2016編輯:從MySQL 5.7.8起,上面是不夠的,釋放你的性能架構數據的存儲器:
在MySQL 5.7.8中,即使性能架構被禁用,它將繼續填充global_variables,session_variables,global_status和session_status表。
(source)
爲了防止此問題,除了performance_schema
設置show_compatibility_56
爲1。也就是說,你的my.cnf的變化應該是這樣的:
performance_schema = 0
show_compatibility_56 = 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的。
你如何定義內存消耗?有很多控制內存大小的MySQL設置。 –
我不是mysql管理員,但我看到在系統上,除了操作系統本身和mysql服務器以外,沒有別的東西在運行,並且消耗了超過500M的... – Gyan
優化您的查詢!查看慢速查詢日誌以查看確切的查詢。可能很多內存浪費在臨時表中 –