在linux系統當中預設值的記憶體頁通常為4kb。實際實現取決於底層硬體和作業系統。執行大量記憶體訪問的應用程式可能會因為減少了轉換後備緩衝區(tlb)丟失而使用大頁面來提高效能。通過增大頁面大小來減少 tlb 條目數。
page table: page table是一種用於實體地址到虛擬之間的對映。對於記憶體的訪問,先是訪問page table,然後根據page table 中的對映關係,隱式的轉移到實體地址來訪問資料。
tlb: translation lookaside buffer (tlb) ,cpu中的一塊固定大小的cache,包含了部分page table的對映關係,用於快速實現虛擬位址到實體地址的轉換。
hugetlb: hugetlb 是tlb中指向hugepage的乙個entry(通常大於4k或預定義頁面大小)。 hugepage 通過hugetlb entries來實現,也可以理解為hugepage 是hugetlb page entry的乙個控制代碼。
hugetlbfs: 乙個類似於tmpfs的新的in-memory filesystem,在2.6核心被提出。
未使用huge pages的對映過程:
process-->page table-->memory過程:
process: system cpu cache: memory:
process1
pagetable -----------------------> process1 page table>>page table ------------------------> 4k
pagetable -----------------------> process1 page table>>page table ------------------------> 4k
process2
pagetable -----------------------> process2 page table>>page table ------------------------> 4k
pagetable -----------------------> process2 page table>>page table ------------------------> 4k
使用huge pages的對映過程(process1使用huge pages,process2未使用):
process-->page table-->memory過程:
process: system cpu cache: memory:
process1
pagetable -----------------------> process1 page table>>page table ------------------------> 2048 k
pagetable -----------------------> process1 page table>>page table ------------------------> 2048 k
process2
pagetable -----------------------> process2 page table>>page table ------------------------> 4k
pagetable -----------------------> process2 page table>>page table ------------------------> 4k
在centos系統中,hugepages的大小預設為2048kb大小:
hugepages有點和缺點:
優點:無需交換。也就是說不存在swap換入換出問題。
降低page table負載。
提高記憶體的整體效能。
缺點:一次性分配,如果沒有手動介入,那麼永遠不會釋放
hugepages與傳統4kb頁使用記憶體不同,兩者不能一起使用。
前提:linux系統必須支援hugepages,檢視是否支援:
cat /proc/meminfo | grep -i huge | wc -l > 0 則為支援
如何配置hugepages:
一、系統層面:
mysql soft memlock 設定為記憶體大小單位為k
mysql hard memlock 設定為記憶體大小單位為k
說明:soft為警告值,hard才是真正的閥值,超過會報錯,mysql為使用者
------或者臨時改變:ulimit -l unlimited
2)修改記憶體中的大頁數量,根據自己記憶體設定,如果innodb緩衝池為4g,那麼應該設定為:4*1024/2+15
注意:nr_hugepages必須設定為大於innodb總大小,下面給出公式,自己計算即可。
說明:4*1024/2+15
上面公式中,4代表的是innodb緩衝池大小為4g,4*1024轉換為mb,然後除以2是計算出需要多少大頁,數字2代表linux系統大頁預設大小為2mb,最後+15是因為大頁大小必須大於innodb配置的大小:
大於innodb_buffer_pool_size+innodb_additional_mem_pool_size+innodb_log_buffer_size+tmp_table_size
echo 1039 > /proc/sys/vm/nr_hugepages
3)修改哪個使用者程序使用hugepages:
查詢出mysql程序的mysql使用者的所在組,mysql使用者必須是該組的成員。
echo 1001 > /proc/sys/vm/hugetlb_shm_group
4)配置共享記憶體大小:
一般設定為和記憶體大小相同。
shmall 是全部允許使用的共享記憶體大小,shmmax 是單個段允許使用的大小。
shmmax 單位為b,shmall 單位為頁(4k)
對於mysql的使用,通常希望值shmmax
接近於的值shmall
。
二、mysql層面:
1)只需在my.cnf檔案中加入:
[mysqld]
large-pages
即可啟用支援
檢視是否啟動成功:
檢視mysql錯誤日誌,如果顯示:
說明你的引數沒有配置合理,需要增大/proc/sys/vm/nr_hugepages大頁的數量,使其大於innodb所需要的記憶體大小。
mysql 使用 MySQL 基本使用
資料庫 create database 名字 建立資料庫 show databases 檢視所有資料庫 show create database book g 檢視建立好的資料庫的定義 drop database if exists 名字 刪除資料庫 use 名字 使用資料庫 引擎 show eng...
MySQL使用學習使用 mysql學習使用
1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...
mysql使用判斷 MySQL使用判斷
1.case語法 在第乙個方案的返回結果中,value compare value。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為else後的結果,如果沒有else 部分,則返回值為 null。mysql select case 1 when 1 then one ...