MYSQL,innodb_buffer_pool_size記憶體配置方式,innodbbufferpool

來源:互聯網
上載者:User

MYSQL,innodb_buffer_pool_size記憶體配置方式,innodbbufferpool

以前一直以為MYSQL,innodb_buffer_pool_size=8G,MySQL一起動就會將佔用掉8G記憶體(認為TOP可以看到記憶體被使用了8G),但是最近才仔細研究一下,原來不是這樣的(可能自己對Linux malloc記憶體配置也只是知道了個皮毛吧),MySQL啟動時實際只是在虛擬記憶體中分配了地址空間,而並沒有真正的映射到實體記憶體上。

因為malloc分配記憶體是先在虛擬記憶體中分配地址的,到實際使用時才真正的映射到實體記憶體

因此這個地方,如果由於機器記憶體使用量不當,到了MySQL真正要映射實體記憶體時,如果實體記憶體不足了,就會出錯甚至退出。


但是這裡也有個很奇妙的地方就是Linux下的OOM Killer:

假如我一個程式A已經運行,並且分配了22G記憶體(機器配置是實體記憶體16G+SWAP 8G),但是沒有真正的映射到實體記憶體;

這時MySQL啟動,innodb_buffer_pool_size=8G,啟動正常;

然後程式A開始實際分配實體記憶體,一下子只剩下2G SWAP記憶體了;

這時MYSQL也開始實際使用記憶體,因為只有2G SWAP,所以效能很差,再超過2G時,記憶體耗盡,這時OOM Killer開始殺進程,怎麼殺呢,誰佔用記憶體多殺誰,於是將進程A殺掉了,記憶體一下子回來了,MySQL不會退出;

但是一般系統中MySQL都是分配記憶體最大的,所以經常性的是MySQL被殺掉。


Linux OOM Killer可參見:理解和配置 Linux 下的 OOM Killer


linux 中更改 mysql的innodb的innodb_buffer_pool_size

是不是你的那個記憶體不夠大.貼 my.cnf檔案
 
我更改 了mysql的設定檔,在myini後面加上innodb buffer_pool_size 為何沒起用用

在[mysqld] 後面繼續加
不要再其他項目後面加

需要重新啟動Mysql
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.