文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  啟用大型頁面支援

10.12.3.3 啟用大型頁面支援

某些硬體和作業系統架構支援大於預設值(通常為 4KB)的記憶體頁面。此支援的實際實作取決於底層硬體和作業系統。執行大量記憶體存取的應用程式可能會因為減少轉譯後備緩衝區 (TLB) 錯失而透過使用大型頁面來獲得效能提升。

在 MySQL 中,InnoDB 可以使用大型頁面來為其緩衝池和額外記憶體池配置記憶體。

在 MySQL 中標準使用大型頁面會嘗試使用最大支援的大小,最高可達 4MB。在 Solaris 下,超大型頁面功能可啟用最高達 256MB 的頁面。此功能適用於最近的 SPARC 平台。可以使用 --super-large-pages--skip-super-large-pages 選項來啟用或停用此功能。

MySQL 也支援 Linux 對大型頁面支援的實作(在 Linux 中稱為 HugeTLB)。

在 Linux 上可以使用大型頁面之前,必須啟用核心來支援它們,並且必須配置 HugeTLB 記憶體池。作為參考,HugeTBL API 記載於 Linux 原始碼的 Documentation/vm/hugetlbpage.txt 檔案中。

某些最近的系統(例如 Red Hat Enterprise Linux)的核心可能預設已啟用大型頁面功能。若要檢查您的核心是否為真,請使用以下命令並尋找包含 huge的輸出列

$> grep -i huge /proc/meminfo
AnonHugePages:   2658304 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

非空命令輸出表示存在大型頁面支援,但零值表示沒有配置頁面供使用。

如果您的核心需要重新配置以支援大型頁面,請查閱 hugetlbpage.txt 檔案以取得指示。

假設您的 Linux 核心已啟用大型頁面支援,請使用以下步驟配置它以供 MySQL 使用

  1. 判斷需要的大型頁面數量。這是 InnoDB 緩衝池的大小除以大型頁面大小,我們可以計算為 innodb_buffer_pool_size / Hugepagesize。假設 innodb_buffer_pool_size (128MB) 的預設值,並使用從 /proc/meminfo (2MB) 取得的 Hugepagesize 值,則為 128MB / 2MB,或 64 個大型頁面。我們將此值稱為 P

  2. 以系統根使用者身分,在文字編輯器中開啟 /etc/sysctl.conf 檔案,並新增此處顯示的行,其中 P 是在上一個步驟中取得的大型頁面數量

    vm.nr_hugepages=P

    使用先前取得的實際值,新增的行應如下所示

    vm.nr_hugepages=66

    儲存更新的檔案。

  3. 以系統根使用者身分,執行以下命令

    $> sudo sysctl -p
    注意

    在某些系統上,大型頁面檔案的名稱可能會略有不同;例如,某些發行版將其稱為 nr_hugepages。如果 sysctl 傳回與檔案名稱相關的錯誤,請檢查 /proc/sys/vm 中對應檔案的名稱,並改用該名稱。

    若要驗證大型頁面設定,請如先前所述再次檢查 /proc/meminfo。現在您應該會在輸出中看到一些額外的非零值,類似於以下所示:

    $> grep -i huge /proc/meminfo
    AnonHugePages:   2686976 kB
    ShmemHugePages:        0 kB
    HugePages_Total:     233
    HugePages_Free:      233
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:          477184 kB
  4. 您也可以選擇壓縮 Linux VM。您可以使用一系列命令來完成此操作,可能在腳本檔案中,類似於此處顯示的內容:

    sync
    sync
    sync
    echo 3 > /proc/sys/vm/drop_caches
    echo 1 > /proc/sys/vm/compact_memory

    請參閱您的作業系統平台文件,以取得有關如何執行此操作的更多資訊。

  5. 檢查伺服器使用的任何組態檔案,例如 my.cnf,並確保 innodb_buffer_pool_chunk_size 設定為大於巨型頁面大小。此變數的預設值為 128M。

  6. MySQL 伺服器中的大型頁面支援預設為停用。若要啟用它,請使用 --large-pages 啟動伺服器。您也可以將以下這行新增至伺服器 my.cnf 檔案的 [mysqld] 區段來達成:

    large-pages=ON

    啟用此選項後,InnoDB 會自動將大型頁面用於其緩衝池和其他記憶體池。如果 InnoDB 無法執行此操作,它會退回使用傳統記憶體,並在錯誤日誌中寫入警告:警告:使用傳統記憶體池

您可以透過在重新啟動 mysqld 後再次檢查 /proc/meminfo 來驗證 MySQL 現在是否正在使用大型頁面,如下所示:

$> grep -i huge /proc/meminfo
AnonHugePages:   2516992 kB
ShmemHugePages:        0 kB
HugePages_Total:     233
HugePages_Free:      222
HugePages_Rsvd:       55
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          477184 kB