除了標準 PostgreSQL 記憶體內共用緩衝區,AlloyDB Omni 磁碟快取還能將緩衝區儲存在固態硬碟 (SSD) 等快速儲存空間。如果資料目錄位於較慢的儲存空間,磁碟快取功能可加快 AlloyDB Omni 安裝作業的資料擷取速度。
與 PostgreSQL 共用緩衝區類似,AlloyDB Omni 磁碟快取不會保留資料,因此快取資料會在重新啟動時遺失。
根據預設,AlloyDB Omni 磁碟快取會使用檔案系統回報的所有儲存空間。您可以使用 omni_disk_cache_file_size 參數,定義要保留多少儲存空間來快取資料。
啟用 AlloyDB Omni 磁碟快取
如要啟用磁碟快取,請完成下列所有子節:
佈建磁碟並建立檔案系統
如要使用 AlloyDB Omni 磁碟快取,請在一或多個磁碟上建立檔案系統,並掛接該系統。此外,您可以使用 mdadm 或 lvm 等公用程式,透過多個磁碟集區容量,並使用任何檔案系統。
下列步驟示範如何在採用 NVMe SSD 的 Ubuntu Compute Engine 執行個體上使用 lvm 和 ext4。
從所有可用的實體裝置建立磁碟區群組:
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。
-
如要使用上一步中磁碟區群組的可用容量建立邏輯磁碟區,請使用下列指令:
sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP
將
LOGICAL_VOLUME替換為 LVM 視為分區的邏輯磁碟區名稱,例如omni_disk_cache_device。 - 在邏輯磁碟區上建立
ext4檔案系統。如有需要,您可以指定其他ext4選項,但須遵守資料安全性規定。sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
如要在主體機器上建立目錄做為掛接點,並掛接檔案系統,請使用下列指令:
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 \ -d google/alloydbomni
更改下列內容:
CONTAINER_NAME:要指派給新 AlloyDB Omni 容器的名稱,例如my-omni。PASSWORD:PostgreSQL 資料庫根管理員的密碼。DATA_DIR:AlloyDB Omni 資料目錄的檔案系統路徑。CACHE_DIRECTORY_PATH: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 \ -d docker.io/google/alloydbomni
更改下列內容:
CONTAINER_NAME:要指派給新 AlloyDB Omni 容器的名稱,例如my-omni。PASSWORD:PostgreSQL 資料庫根管理員的密碼。CACHE_DIRECTORY_PATH: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 /OMNI_DISK_CACHE_DIRECTORY
sudo docker exec -it CONTAINER_NAME chmod -R a+rw /OMNI_DISK_CACHE_DIRECTORY
Podman
sudo podman exec -it CONTAINER_NAME chown postgres:postgres /OMNI_DISK_CACHE_DIRECTORY
sudo podman exec -it CONTAINER_NAME chmod -R a+rw /OMNI_DISK_CACHE_DIRECTORY
啟用磁碟快取
如要為資料庫啟用磁碟快取,請完成下列步驟:
以
SUPERUSER身分連線至資料庫。Docker
sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgresPodman
sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres設定
omni_disk_cache_enabled和omni_disk_cache_directoryGrand Unified Configuration (GUC) 旗標。ALTER SYSTEM SET omni_disk_cache_enabled=on; ALTER SYSTEM SET omni_disk_cache_directory='/OMNI_DISK_CACHE_DIRECTORY';(選用) 根據預設,AlloyDB Omni 會使用檔案系統中的所有可用空間。如有需要,您可以更新
omni_disk_cache_file_sizeGUC 旗標來覆寫這項設定。ALTER SYSTEM SET omni_disk_cache_file_size=SIZE_IN_MB;將
SIZE_IN_MB替換為磁碟快取要使用的磁碟空間量 (以 MB 為單位)。重新啟動 AlloyDB Omni。
Docker
sudo docker restart CONTAINER_NAMEPodman
sudo podman restart CONTAINER_NAME
驗證磁碟快取設定
啟用 AlloyDB Omni 磁碟快取後,請使用 iotop 或 iostat 等可用公用程式監控磁碟的讀寫活動,確認磁碟快取是否可存取。
此外,您也可以檢查 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 ... 訊息。