文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 取得的 Hugepagesize 值 (2MB),則結果為 128MB / 2MB,即 64 個大型頁面。我們將此值稱為 P

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

    vm.nr_hugepages=P

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

    vm.nr_hugepages=66

    儲存更新後的檔案。

  3. 以系統 root 身分,執行以下命令

    $> 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