除了標準 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,請務必先執行下列操作,再對一般磁碟區啟用磁碟快取:
- 建立具有本機 SSD 儲存空間的叢集。
- 使用「執行本機磁碟區靜態佈建工具」的步驟 1,將磁碟區格式化為 ext4 檔案系統。
- 為叢集中的每個 SSD 手動建立永久磁碟區,並使用
storageClass在儲存裝置上定義永久儲存空間。
如要為資料庫的通用磁碟區啟用磁碟快取,請完成下列步驟:
修改資料庫叢集資訊清單,將
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。
- 重新套用資訊清單。
在本機磁碟區上啟用磁碟快取
如要使用本機磁碟區,不必建立永久磁碟區。您可以改用下列最佳化方式。
舉例來說,如果您使用 GKE,且沒有永久磁碟區和 storageClass,請務必先執行下列操作,再在本機磁碟區上啟用磁碟快取:
- 建立具有本機 SSD 儲存空間的叢集。
- 使用「執行本機磁碟區靜態佈建工具」的步驟 1,將磁碟區格式化為
ext4檔案系統。
如要在資料庫的本機磁碟區啟用磁碟快取,請按照下列步驟操作:
修改資料庫叢集資訊清單,將
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。將參數設為字串值陣列,如下所示:- 如果運算子為
In或NotIn,值陣列不得為空。 - 如果運算子是
Exists或DoesNotExist,值陣列必須為空。 - 如果運算子為
Gt或Lt,值陣列必須只有一個元素,且會解譯為整數。
- 如果運算子為
- 重新套用資訊清單。
在暫時磁碟區上啟用磁碟快取
您可以使用 emptyDir 磁碟區啟用磁碟快取,這會提供與 Pod 生命週期直接相關的暫時儲存空間。系統將 Pod 指派給節點時會建立 emptyDir;只要該 Pod 仍在該節點上執行,這個磁碟區就會繼續保留。
當 Pod 從節點移除時,emptyDir 中的資料也會永久刪除。這類磁碟區適合用於快取,因為可提供暫時性的快速儲存空間。如果 Pod 重新排程,快取中的資料就不需要保留。
如要為資料庫的暫時性磁碟區啟用磁碟快取,請完成下列步驟:
修改資料庫叢集資訊清單,將
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。
- 重新套用資訊清單。
驗證磁碟快取設定
啟用 AlloyDB Omni 磁碟快取後,請使用 iotop 或 iostat 等實用工具監控磁碟的讀取和寫入活動,確認磁碟快取是否遭到存取。
此外,您也可以檢查 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 ... 訊息。