在 AlloyDB Omni 中設定資料欄引擎

選取說明文件版本:

本頁說明如何啟用或停用 AlloyDB Omni 資料庫叢集的資料欄引擎。本文也會說明如何為資料欄商店設定適當的初始大小。

如要瞭解 AlloyDB 資料欄引擎的概念總覽,請參閱「AlloyDB Omni 資料欄引擎總覽」。

啟用資料欄引擎

如要在執行個體上使用資料欄引擎,請將執行個體的 google_columnar_engine.enabled 標記設為 on

在執行個體上設定這個標記的步驟,取決於您是在容器中還是 Kubernetes 叢集上執行 AlloyDB Omni。

單一伺服器

如要將 google_columnar_engine.enabled 設為 on,請按照下列步驟操作:

  1. 執行 PostgreSQL 指令ALTER SYSTEM

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. 如要調整直欄引擎的設定,請按照下一節的說明操作,然後重新啟動資料庫伺服器。如否,請完成下列步驟,立即重新啟動資料庫伺服器。

  3. 如要讓設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器。

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Kubernetes

如要將 google_columnar_engine.enabled 旗標設為 on,請修改資料庫叢集資訊清單,在 primarySpec 區段中新增 parameters 屬性:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "16.8.0"
      primarySpec:
        parameters:
          google_columnar_engine.enabled: "on"

CLUSTER_NAME 換成資料庫叢集的名稱。也就是建立資料庫叢集時所宣告的名稱。

設定資料欄儲存空間大小

在執行個體上啟用資料欄引擎後,AlloyDB Omni 會分配部分執行個體記憶體來儲存資料欄資料。將高速 RAM 專用於資料欄儲存庫,可確保 AlloyDB Omni 盡可能快速存取資料欄資料。

記憶體和儲存空間快取加總,代表資料欄引擎的整體容量。

設定記憶體

您可以使用 google_columnar_engine.memory_size_in_mb 標記,將分配大小設為固定大小。

設定 AlloyDB Omni 資料欄儲存庫記憶體的步驟,取決於您是在容器還是 Kubernetes 叢集中執行 AlloyDB Omni。

單一伺服器

如要在執行個體上設定 google_columnar_engine.memory_size_in_mb 標記,請執行下列操作:

  1. 執行 ALTER SYSTEM PostgreSQL 指令,設定記憶體:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    COLUMN_MEMORY_SIZE 替換為新的資料欄儲存空間大小 (以 MB 為單位),例如 256

  2. 如要讓設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器。

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

如要設定 google_columnar_engine.memory_size_in_mb 旗標,請修改資料庫叢集資訊清單,在 primarySpec 區段中新增 parameters 屬性:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "16.8.0"
      primarySpec:
        parameters:
          google_columnar_engine.memory_size_in_mb: "COLUMN_MEMORY_SIZE"

更改下列內容:

  • CLUSTER_NAME:資料庫叢集的名稱。也就是建立資料庫叢集時所宣告的名稱。
  • COLUMN_MEMORY_SIZE:資料欄儲存空間的新大小,以 MB 為單位,例如 256

設定儲存空間快取

為 AlloyDB Omni 設定資料欄引擎儲存空間快取的步驟,取決於您是在容器中還是 Kubernetes 叢集上執行 AlloyDB Omni。

單一伺服器

您可以在專用或共用裝置上設定直欄式引擎儲存空間快取。

專用裝置

在專用裝置上,如要為單一伺服器容器啟用 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_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

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

在 AlloyDB Omni 內掛接資料欄儲存空間快取目錄

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

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

如要在執行 AlloyDB Omni 的 Docker 容器內掛接 OMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

更改下列內容:

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

如要將完整存取權授予已掛接的 OMNI_COLUMNAR_STORAGE_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. 設定資料欄儲存空間快取目錄:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY 替換為專屬目錄的絕對路徑,AlloyDB Omni 會將資料欄引擎儲存空間快取檔案儲存在該目錄中。請確認這個目錄存在,且資料庫使用者具備適當的寫入權限。

  2. 設定儲存空間快取大小:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    STORAGE_CACHE_SIZE 替換為所需的資料欄儲存空間快取大小 (以 MB 為單位)。根據預設,系統會將專用裝置的整體大小分配給資料欄引擎,不會影響磁碟快取。這個標記允許的最大值為 1000 * google_columnar_engine.memory_size_in_mb,取兩者中的最小值。

  3. 如要讓設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器。

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

共用裝置

如要將資料欄式儲存空間快取設定為使用磁碟快取的共用裝置,請務必啟用 AlloyDB Omni 磁碟快取

在共用裝置上設定儲存空間快取,步驟如下:

  1. 設定儲存空間快取:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    STORAGE_CACHE_SIZE 替換為所需的儲存空間快取大小 (以 MB 為單位)。根據預設,系統會將 5% 的磁碟快取分配給直欄引擎。這個旗標允許的最大值為磁碟快取總大小的 50% 或 1000 * google_columnar_engine.memory_size_in_mb,以較小者為準。

  2. 如要讓設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器。

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

如要為資料庫啟用儲存空間快取,請修改資料庫叢集資訊清單,在 primarySpec 區段的 features 區段中新增 columnarSpillToDisk 屬性:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "16.8.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
      ultraFastCache:
        cacheSize: ULTRAFAST_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"
...

更改下列內容:

  • CLUSTER_NAME:資料庫叢集的名稱。也就是建立資料庫叢集時所宣告的名稱。
  • STORAGE_CACHE_SIZE:資料欄儲存空間快取的大小,例如 5Gi。如果未指定這個欄位的值,系統預設會將 5% 的磁碟快取分配給直欄引擎。
  • ULTRAFAST_CACHE_SIZE:快取大小,例如 100Gi。必須大於 shared_buffers。這是選填欄位。如果您未指定這個欄位的值,AlloyDB Omni 會使用磁碟上所有剩餘空間,這適用於容器和 Kubernetes 叢集中的 AlloyDB Omni。如要進一步瞭解計量單位,請參閱「記憶體資源單位」。
  • STORAGE_CLASS_NAME:超快速快取磁碟區的儲存空間類別名稱,例如 local-storage

啟用向量化聯結

直欄式引擎具有向量化聯結功能,可對符合條件的查詢套用向量化處理,藉此提升聯結效能。

啟用向量化聯結後,AlloyDB 查詢規劃工具可選擇套用向量化聯結運算子,而非標準 PostgreSQL 雜湊聯結運算子。規劃工具會比較使用每種方法執行查詢的費用,然後做出這項決定。

如要在執行個體上啟用向量化聯結,請將執行個體的 google_columnar_engine.enable_vectorized_join 旗標設為 on

如要在執行個體上設定這個標記,請執行 PostgreSQL ALTER SYSTEM 指令

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

根據預設,AlloyDB Omni 會為向量化聯結功能分配一個執行緒。您可以將 google_columnar_engine.vectorized_join_threads 旗標設為較大的值,增加這項功能可用的執行緒數量。最大值為 cpu_count * 2

手動重新整理資料欄引擎

預設情況下,啟用資料欄引擎後,系統會在背景重新整理資料欄儲存空間。

如要手動重新整理資料欄引擎,請執行下列 SQL 查詢:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

TABLE_NAME 替換為要手動重新整理的資料表或具體化檢視名稱。

停用資料欄引擎

如要在執行個體上停用 Columbar 引擎,請將 google_columnar_engine.enabled 標記設為 off

在執行個體上設定這個標記的步驟,取決於您是在單一伺服器上的容器中,還是 Kubernetes 叢集上執行 AlloyDB Omni。

單一伺服器

如要將 google_columnar_engine.enabled 設為 off,請按照下列步驟操作:

  1. 執行 PostgreSQL 指令ALTER SYSTEM
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. 如要讓設定參數變更生效,請重新啟動執行中的 AlloyDB Omni 容器。

Docker

如要重新啟動 AlloyDB Omni 容器,請執行docker container restart 指令

  sudo docker restart CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Podman

如要重新啟動 AlloyDB Omni 容器,請執行podman container start 指令

  sudo podman restart CONTAINER_NAME

CONTAINER_NAME 替換為您在安裝 AlloyDB Omni 容器時指派的名稱。

Kubernetes

如要將 google_columnar_engine.enabled 旗標設為 off,請修改資料庫叢集資訊清單,在 primarySpec 區段中新增 parameters 屬性:

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: DBCluster
  metadata:
    name: CLUSTER_NAME
  spec:
    databaseVersion: "16.8.0"
    primarySpec:
      parameters:
        google_columnar_engine.enabled: "off"

CLUSTER_NAME 換成資料庫叢集的名稱。也就是建立資料庫叢集時所宣告的名稱。

後續步驟