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

選取說明文件版本:

本頁說明如何佈建、設定及使用 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 Kubernetes 運算子的通用磁碟區上啟用磁碟快取,您需要永久磁碟區storageClass

舉例來說,如果您使用 GKE,且沒有永久磁碟區和 storageClass,請務必先執行下列操作,再對一般磁碟區啟用磁碟快取:

  1. 建立具有本機 SSD 儲存空間的叢集
  2. 使用「執行本機磁碟區靜態佈建工具」的步驟 1,將磁碟區格式化為 ext4 檔案系統。
  3. 為叢集中的每個 SSD 手動建立永久磁碟區,並使用 storageClass 在儲存裝置上定義永久儲存空間。

如要為資料庫的通用磁碟區啟用磁碟快取,請完成下列步驟:

  1. 修改資料庫叢集資訊清單,將 ultraFastCache 屬性新增至 spec 區段的 features 區段:

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.0"
            primarySpec:
              features:
                ultraFastCache:
                  cacheSize: DISK_CACHE_SIZE
                  genericVolume:
                    storageClass: "STORAGE_CLASS_NAME"
          ...
          

    更改下列內容:

    • DB_CLUSTER_NAME:資料庫叢集名稱。也就是建立資料庫叢集時所宣告的名稱。
    • DISK_CACHE_SIZE:快取大小,例如 100Gi。必須大於 shared_buffers。這是選填欄位。如果您未指定這個欄位的值,AlloyDB Omni 會使用磁碟上所有剩餘空間,這適用於容器和 Kubernetes 叢集中的 AlloyDB Omni。
    • STORAGE_CLASS_NAME:超高速快取磁碟區的 storage class 名稱,例如 local-storage
  2. 重新套用資訊清單。

在本機磁碟區上啟用磁碟快取

如要使用本機磁碟區,不必建立永久磁碟區。您可以改用下列最佳化方式。

舉例來說,如果您使用 GKE,且沒有永久磁碟區和 storageClass,請務必先執行下列操作,再在本機磁碟區上啟用磁碟快取:

  1. 建立具有本機 SSD 儲存空間的叢集
  2. 使用「執行本機磁碟區靜態佈建工具」的步驟 1,將磁碟區格式化為 ext4 檔案系統。

如要在資料庫的本機磁碟區啟用磁碟快取,請按照下列步驟操作:

  1. 修改資料庫叢集資訊清單,將 ultraFastCache 屬性新增至 spec 區段的 features 區段:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "17.5.0"
          primarySpec:
            features:
              ultraFastCache:
                cacheSize: DISK_CACHE_SIZE
                localVolume:
                  path: "LOCAL_VOLUME_PATH"
                  nodeAffinity:
                    required:
                      nodeSelectorTerms:
                      - matchExpressions:
                        - key: "LABEL_KEY"
                          operator: "OPERATOR_VALUE"
                          values:
                          - "LABEL_KEY_VALUE"
        ...
          

    更改下列內容:

    • CLUSTER_NAME:資料庫叢集名稱。也就是建立資料庫叢集時所宣告的名稱。
    • DISK_CACHE_SIZE:快取大小,例如 100Gi。必須大於 shared_buffers。這是選填欄位。如果您未指定這個欄位的值,AlloyDB Omni 會使用磁碟上所有剩餘空間,這適用於容器和 Kubernetes 叢集中的 AlloyDB Omni。
    • STORAGE_CLASS_NAME儲存空間類別的名稱。
    • LOCAL_VOLUME_PATH:本機磁碟區的路徑,例如 /mnt/disks/raid/0
    • LABEL_KEY:節點的標籤,用於做為位置指標,並在叢集中平均分配 Pod,例如 cloud.google.com/gke-local-nvme-ssd
    • OPERATOR_VALUE:鍵與一組值的關係,例如 In。將參數設為下列其中一個值:
      • In:值陣列不得為空。
      • NotIn:值陣列不得為空。
      • Exists:值陣列必須為空白。
      • DoesNotExist:值陣列必須為空白。
      • Gt:值陣列必須只有一個元素,且會解譯為整數。
      • Lt:值陣列必須只有一個元素,且會解譯為整數。
    • LABEL_KEY_VALUE:標籤鍵的值,例如 true。將參數設為字串值陣列,如下所示:
      • 如果運算子為 InNotIn,值陣列不得為空。
      • 如果運算子是 ExistsDoesNotExist,值陣列必須為空。
      • 如果運算子為 GtLt,值陣列必須只有一個元素,且會解譯為整數。
  2. 重新套用資訊清單。

在暫時磁碟區上啟用磁碟快取

您可以使用 emptyDir 磁碟區啟用磁碟快取,這會提供與 Pod 生命週期直接相關的暫時儲存空間。系統將 Pod 指派給節點時會建立 emptyDir;只要該 Pod 仍在該節點上執行,這個磁碟區就會繼續保留。

當 Pod 從節點移除時,emptyDir 中的資料也會永久刪除。這類磁碟區適合用於快取,因為可提供暫時性的快速儲存空間。如果 Pod 重新排程,快取中的資料就不需要保留。

如要為資料庫的暫時性磁碟區啟用磁碟快取,請完成下列步驟:

  1. 修改資料庫叢集資訊清單,將 ultraFastCache 屬性新增至 spec 區段的 features 區段,並指定 emptyDirVolume

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.0"
            primarySpec:
              features:
                ultraFastCache:
                  cacheSize: DISK_CACHE_SIZE
                  emptyDirVolume: {}
            ...
          

    更改下列內容:

    • CLUSTER_NAME:資料庫叢集名稱。也就是建立資料庫叢集時所宣告的名稱。
    • DISK_CACHE_SIZE:快取大小,例如 200Gi。
  2. 重新套用資訊清單。

驗證磁碟快取設定

啟用 AlloyDB Omni 磁碟快取後,請使用 iotopiostat 等實用工具監控磁碟的讀取和寫入活動,確認磁碟快取是否遭到存取。

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

如要驗證 AlloyDB Omni 的磁碟快取設定,請使用下列指令。

  kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"

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

後續步驟