關於自動記憶體管理

選取文件版本:

AlloyDB Omni 使用可自動調整的演算法管理記憶體。

您可以在啟動 AlloyDB Omni 時,決定共用緩衝區的上限。如未設定上限,AlloyDB Omni 會自動將共用緩衝區備份大小設為系統記憶體的 80%。共用緩衝區的初始備份大小可以與上限不同。

AlloyDB Omni 包含智慧型記憶體工作站,可持續監控記憶體狀態,並調整共用緩衝區備份大小,在快取資料時達到最佳效能。

自動記憶

預設情況下,shared_buffers 參數會設為 0,這個特殊值會將 shared buffers 快取的大小上限設為系統記憶體的 80%。AlloyDB Omni 的起始值為 shared_buffers 上限的 10%。如果 shared_buffers 遭到自訂值覆寫,AlloyDB Omni 會將該值視為 shared_buffers 大小的上限,並從指定的自訂大小開始。

如要指定自訂大小,可以將 shared_buffers 設為 1GB。具體方法取決於部署類型:

如為 Docker 容器部署作業,請使用下列其中一個指令:

  • docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image

  • docker run --name CONTAINER_NAME $image -c shared_buffers=1GB

將 CONTAINER_NAME 替換為您在安裝時指派給 AlloyDB Omni 容器的名稱。

盡可能提高查詢效能

shared_buffers 參數的預設值適用於常見情境。

不過,您可以調整這個值,以達到最佳效能。如果選擇依賴 shared_buffers 的預設值來推斷共用緩衝區上限,請使用 cgroup memory.max 值來影響計算。

資料欄引擎記憶體

動態 shared_buffers 與資料欄引擎記憶體無關。啟用資料欄引擎後,動態 shared_buffers 大小可透過下列方式計算:從系統或 cgroup 可用的總記憶體 80% 中,扣除資料欄引擎使用的記憶體量。

大型分頁

巨頁可提升資料庫效能。AlloyDB Omni 會盡可能明確管理巨型頁面,否則會依賴作業系統的透明巨型頁面 (THP) 功能。如果系統不支援任何巨型頁面類型,AlloyDB Omni 會改用 4k 頁面,並在 Docker 容器記錄中列印警告訊息 docker logs $container_name,提供設定巨型頁面的具體操作說明。如需如何啟動容器的操作說明,請參閱「啟動 AlloyDB Omni」。

警告訊息大致如下:


HINT:  Please either execute the all-in-one setup script:
          docker run --rm --privileged $image setup-host
        OR manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages=1048576

執行階段自動記憶體管理

AlloyDB Omni 會持續監控系統負載,並調整記憶體用量,以提升效能。具體來說,您可能會發現以下情況:

動態 shared_buffers 大小變更
AlloyDB Omni 會在系統記憶體用量偏低時增加動態 shared_buffers 大小,並在系統記憶體用量偏高時減少大小。AlloyDB Omni 發行版本內含 `g_memory` 擴充功能。如要啟用這項功能並監控動態 `shared_buffers` 大小,請執行下列指令:
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
系統記憶體極度不足時,終止 PostgreSQL 連線
當 AlloyDB Omni 偵測到系統記憶體嚴重不足時,會嘗試刪除最耗用記憶體的 PostgreSQL 連線,直到負載降回合理程度為止。發生這類事件時,AlloyDB Omni 會在 Docker 容器記錄中記錄類似下列範例的項目:
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)