一般情況下使用的記憶體為每頁4k,使用
huge page 的話預設是每頁 2m。如果設定mysql使用 huge page 至少有兩個好處,乙個是可以減少 translation lookaside buffer (tlb) 失誤以提高效能,另乙個是利用 huge page不會swap的特性保證mysql的記憶體不會被交換到swap中。
mysql 5.0.3之後在linux上支援huge page,可以使用 large-page 選項啟動mysql。
當然還有一些相關的系統設定。
echo 400 > /proc/sys/vm/nr_hugepages
這個指定總共huge page的頁數,可以放到/etc/rc.local中。由於分配時需要有連續的記憶體空間,所以如果在執行了一段時間的系統上執行,可能無法分配到指定的數量,即使還有足夠的記憶體。
之後還需要設定核心引數kernel.shmmax和kernel.shmall,否則mysql啟動時會報22的錯誤
innodb: hugetlb: warning: failed to allocate 536887296 bytes. errno 22
shmmax是最大的共享記憶體段的大小,單位是位元組,預設32m,肯定是不夠的,這個應該比innodb_buffer_pool要大。shmall是共享記憶體的總大小,單位是頁,預設2097152(8g)。可以使用sysctl -w或者在/etc/sysctl.conf中設定。
除此還需要設max locked memory,使用ulimit -l或設定/etc/security/limits.conf,否則會報12的錯誤:
warning: failed to allocate 31457280 bytes from hugetlb memory. errno 12
mysql啟動之後可以使用
grep huge /proc/meminfo檢視huge page的使用情況。
hugepages_total: 400hugepages_free: 128
hugepagesize: 2048 kb
mysql 大記憶體 記憶體頻寬對mysql影響多大?
網路是資料庫基礎架構的主要部分。但是,通常效能基準測試是在本地計算機上完成的,客戶端和伺服器並置在一起。這樣做是為了簡化結構並排除乙個以上的變數 網路部分 但是我們也忽略了網路對效能的影響。對於像 mysql group replication 這樣的產品集群來說,網路更為重要。在這篇文章中,我將介...
ERROR演示 設定JVM最大記憶體
error錯誤通常程式設計師不應該去進行處理的,合理的應用程式不應該試圖捕獲的嚴重問題。比如,程式執行後由於記憶體不足導致的記憶體溢位這種錯誤,如下 了解 設定jvm記憶體 jvm設定記憶體 xms128m xmx256m xms表示初始記憶體,以上表示jvm初始128m xmx表示最大記憶體,以上...
Ant中設定JVM的最大記憶體
用ant跑一堆junit的測試,大概是測試太多的緣故吧,跑到後來就出現 outofmemory exception。心想大概是jvm的記憶體不足 預設只有64m 於是想設定到256m 網上查了一些資料說是設定ant opts的環境變數 xmx256m 發現還是不行在單元測試裡加了句 system.o...