使用磁碟快取提升資料庫效能

選取說明文件版本:

本頁說明如何在 AlloyDB Omni 上佈建、設定及使用磁碟快取,以提升 AlloyDB Omni 安裝作業的效能。

除了標準 PostgreSQL 記憶體內建的共用緩衝區,AlloyDB Omni 磁碟快取還可將緩衝區儲存在固態硬碟 (SSD) 等快速儲存空間。如果 AlloyDB Omni 安裝作業的資料目錄位於較慢的儲存空間,磁碟快取可加快資料擷取速度。

與 PostgreSQL 共用緩衝區類似,AlloyDB Omni 磁碟快取不會保留資料,因此快取資料會在重新啟動時遺失。

根據預設,AlloyDB Omni 磁碟快取會使用檔案系統回報的所有儲存空間。您可以使用 omni_disk_cache_file_size 參數,定義保留用於快取資料的儲存空間量。

啟用 AlloyDB Omni 磁碟快取

如要在容器中為 AlloyDB Omni 啟用磁碟快取,請按照下列步驟操作。

佈建磁碟並建立檔案系統

如要使用 AlloyDB Omni 磁碟快取,請在磁碟或多個磁碟上建立檔案系統,然後掛接到 AlloyDB Omni 容器中。此外,您可以使用 mdadmlvm 等公用程式,將多個磁碟的容量集中在一起,並使用任何檔案系統。

下列步驟示範如何在 Ubuntu Compute Engine 執行個體上使用 NVMe SSD,執行 lvmext4

  1. 從所有可用的實體裝置建立磁碟區群組:

      nvme_prefix="STORAGE_PREFIX"
      nvme_list=$(ls "$nvme_prefix"*)
      sudo vgcreate VOLUME_GROUP ${nvme_list}

    更改下列內容:

    • STORAGE_PREFIX:使用非揮發性記憶體高速 (NVMe) 介面連結至虛擬機器的目標本機磁碟路徑前置字元,例如在 Google Cloud上,NVMe 裝置路徑一律以 /dev/nvme0n 開頭。
    • VOLUME_GROUP:SSD 組合所在的磁碟區群組名稱,例如 omni-disk-cache-volume
  2. 如要從上一步的磁碟區群組可用容量建立邏輯磁碟區,請使用下列指令:

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    LOGICAL_VOLUME 替換為 LVM 視為分割區的邏輯磁碟區名稱,例如 omni_disk_cache_device

  3. 在邏輯磁碟區上建立 ext4 檔案系統。如有需要,您可以指定其他 ext4 選項,但須遵守資料安全規定。
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. 如要在主機上建立當做掛接點的目錄並掛接檔案系統,請使用下列指令:

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

    OMNI_DISK_CACHE_DIRECTORY 替換為目錄名稱或目錄路徑 (做為掛接點),例如 omni_disk_cache_directory

在 AlloyDB Omni 內掛接快取目錄

為在容器中執行的 AlloyDB Omni 啟用磁碟快取前,您必須在 AlloyDB Omni 內掛接快取目錄。

如要瞭解如何從 Docker 映像檔安裝 AlloyDB Omni 並進行自訂,請參閱「自訂 AlloyDB Omni 安裝作業」。

如要在執行 AlloyDB Omni 的 Docker 容器內掛接 OMNI_DISK_CACHE_DIRECTORY,請使用下列指令:

Docker

      sudo docker run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

更改下列內容:

  • :要指派給新 AlloyDB Omni 容器的名稱,例如 my-omniCONTAINER_NAME
  • PASSWORD:PostgreSQL 資料庫根管理員的密碼。
  • DATA_DIR:您希望 AlloyDB Omni 用於資料目錄的檔案系統路徑。
  • :AlloyDB Omni 容器內的快取目錄,會對應至主機上的掛接點,例如根據容器內快取目錄的值,可能是 /omni_disk_cache_directory (類似 OMNI_DISK_CACHE_DIRECTORY) 或 /disk/cache/inside/containerCACHE_DIRECTORY_PATH_INSIDE_CONTAINER

Podman

      podman run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

更改下列內容:

  • :要指派給新 AlloyDB Omni 容器的名稱,例如 my-omniCONTAINER_NAME
  • PASSWORD:PostgreSQL 資料庫根管理員的密碼。
  • :AlloyDB Omni 容器內的快取目錄,會對應至主機上的掛接點,例如根據容器內快取目錄的值,可能是 /omni_disk_cache_directory (類似 OMNI_DISK_CACHE_DIRECTORY) 或 /disk/cache/inside/containerCACHE_DIRECTORY_PATH_INSIDE_CONTAINER

如要將完整存取權授予已掛接的 OMNI_DISK_CACHE_DIRECTORY,請使用下列指令:

Docker

      sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

Podman

      sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

啟用 AlloyDB Omni 磁碟快取

如要為資料庫啟用 AlloyDB Omni 磁碟快取,請先確認已掛接的快取目錄可從 Docker 容器內部存取,然後設定適當的 Grand Unified Configuration (GUC) 參數。

  1. 如要以超級使用者身分連線至容器化 AlloyDB Omni 資料庫,請使用下列指令:

    Docker

          sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
          

    Podman

          sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
          
  2. 如要設定參數值,請在 AlloyDB Omni 資料庫中使用下列指令:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. 根據預設,AlloyDB Omni 會使用檔案系統中的所有可用空間。如有需要,您可以使用 omni_disk_cache_file_size 參數覆寫預設值。

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. 如要讓快取設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器:

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

驗證磁碟快取設定

啟用 AlloyDB Omni 磁碟快取後,請使用 iotopiostat 等公用程式監控磁碟的讀寫活動,確認磁碟快取是否遭到存取。

此外,您也可以檢查 AlloyDB Omni 磁碟快取是否已開啟。

如要驗證容器中 AlloyDB Omni 的磁碟快取設定,請按照下列步驟操作:

Docker

sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Podman

sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

如果磁碟快取設定正確,記錄中會顯示 Successfully opened omni disk cache ... 訊息。

後續步驟