mysql使用large pages來提公升效能

2021-09-23 10:12:35 字數 3682 閱讀 9647

在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 ...