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

選取說明文件版本:

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

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

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

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

啟用 AlloyDB Omni 磁碟快取

啟用 AlloyDB Omni 的磁碟快取時,採取的步驟取決於您是在容器中還是 Kubernetes 叢集上執行 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
      

更改下列內容:

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

更改下列內容:

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

如要為資料庫啟用 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 ... 訊息。

後續步驟