修改核心參數 (Linux)

對於 root 身分安裝,資料庫管理程式會使用公式來自動調整核心參數設定,而且不需要手動更新這些設定。

開始之前

您必須具有 root 使用者權限,才能修改核心參數。

程序

若要更新 Red Hat 及 SUSE Linux®上的核心參數,請執行下列動作:

  1. 執行 ipcs -l 指令,以列出現行核心參數設定。
  2. 分析指令輸出,以判定您是否必須變更核心設定,方法是將現行值與下表中的 強制下限設定 進行比較。
    IPC 核心參數 強制下限設定
    kernel.shmmni (SHMMNI) 256 * <size of RAM in GB>
    kernel.shmmax (SHMMAX) <size of RAM in bytes>1
    kernel.shmall (SHMALL) 2 * <size of RAM in the default system page size>2
    kernel.sem (SEMMNI) 256 * <size of RAM in GB>
    kernel.sem (SEMMSL) 250
    kernel.sem (SEMMNS) 256,000
    kernel.sem (SEMOPM) 32
    kernel.msgmni (MSGMNI) 1 024 * <size of RAM in GB>
    kernel.msgmax (MSGMAX) 65,536
    kernel.msgmnb (MSGMNB) 65 536 3
    1. 在 32 位元 Linux 作業系統上, SHMMAX 的強制下限設定限制為 4 294 967 295 位元組
    2. SHMALL 會限制系統上可配置的虛擬共用記憶體總量。 每一個 Db2® 資料伺服器都會有效地管理它所耗用的系統記憶體數量,也稱為已確定記憶體。 Db2 資料伺服器配置的虛擬記憶體比它所確定的要多,以支援記憶體預先配置及動態記憶體管理。 記憶體預先配置有助於增進效能。 動態記憶體管理是一種程序,可在個別虛擬共用記憶體區域內增加和縮減實際記憶體用量。 若要有效地支援記憶體預先配置及動態記憶體管理,資料伺服器必須在系統上,經常配置比實體 RAM 數量還多的虛擬共用記憶體。 核心程式需要此值作為分頁數。
    3. 載入效能得益於 MSGMNB 以位元組為單位所指定的大型訊息佇列大小限制。 您可以執行 ipcs -q 指令來檢視訊息佇列使用情況。 如果在載入作業期間訊息佇列容量已滿或將達到容量,請考量增加訊息佇列大小所限制位元組數。
    下列文字是 ipcs 指令輸出的範例,在 // 後面加上註解以顯示參數名稱:
       # ipcs -l
    
       ------ Shared Memory Limits --------
       max number of segments = 4096               // SHMMNI	
       max seg size (kbytes) = 32768               // SHMMAX
       max total shared memory (kbytes) = 8388608  // SHMALL
       min seg size (bytes) = 1
    
       ------ Semaphore Limits --------
       max number of arrays = 1024                 // SEMMNI
       max semaphores per array = 250              // SEMMSL
       max semaphores system wide = 256000         // SEMMNS
       max ops per semop call = 32                 // SEMOPM
       semaphore max value = 32767
    
       ------ Messages: Limits --------
       max queues system wide = 1024               // MSGMNI
       max size of message (bytes) = 65536         // MSGMAX
       default max size of queue (bytes) = 65536   // MSGMNB
    • 從「共用記憶體限制」的第一個區段開始, SHMMAX 限制是 Linux 系統上共用記憶體區段的大小上限。 而 SHMALL 限制是系統上共用記憶體分頁的配置上限。
      • 建議將 SHMMAX 值設為等於系統上的實體記憶體量。 不過,x86 系統的最低需求是 268435456 (256 MB),而在 64 位元的系統中,則為 1073741824 (1 GB)。
    • 下一個區段包含作業系統可用之號誌的數量。 核心參數 sem 由四個記號組成: SEMMSLSEMMNSSEMOPMSEMMNISEMMNSSEMMSL 乘以 SEMMNI的結果。 資料庫管理程式需要視需要增加陣列數目 (SEMMNI)。 一般而言, SEMMNI 必須是系統上預期的代理程式數目上限的兩倍,乘以資料庫伺服器電腦上的邏輯分割區數目,再加上資料庫伺服器電腦上的本端應用程式連線數目。
    • 第三個區段包含系統的訊息。
      • MSGMNI 參數會影響可以啟動的代理程式數目。 MSGMAX 參數會影響佇列中可以傳送的訊息大小,而 MSGMNB 參數會影響佇列大小。
      • MSGMAX 參數必須變更為 64 KB(即 65536 個位元組),而 MSGMNB 參數必須增加至 65536
  3. 透過編輯 /etc/sysctl.conf 檔案,修改您必須調整的核心參數。 如果此檔案不存在,請建立該檔案。
    下列指令行是檔案中必須放置之內容的範例:
    #Example for a computer with 16GB of RAM:
    kernel.shmmni=4096
    kernel.shmmax=17179869184
    kernel.shmall=8388608
    #kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
    kernel.sem=250 1024000 32 4096
    kernel.msgmni=16384
    kernel.msgmax=65536
    kernel.msgmnb=65536
  4. 執行 sysctl 時使用 -p 參數,以從預設檔案 /etc/sysctl.conf中的 sysctl 設定載入:
       sysctl -p
  5. 選用項目: 每次重新開機之後持續保存變更:
    • (SUSE Linux) 使 boot.sysctl 處於作用中。
    • (Red Hat) rc.sysinit 起始設定 Script 會自動讀取 /etc/sysctl.conf 檔。