Mempercepat performa database menggunakan cache disk

Halaman ini menjelaskan cara menyediakan, menyiapkan, dan menggunakan cache disk di AlloyDB Omni untuk meningkatkan performa penginstalan AlloyDB Omni Anda.

Selain buffer bersama dalam memori PostgreSQL standar, cache disk AlloyDB Omni memungkinkan penyimpanan buffer di penyimpanan cepat seperti solid-state drive (SSD). Cache disk mempercepat pengambilan data dalam penginstalan AlloyDB Omni dengan direktori data yang terletak di penyimpanan yang lebih lambat.

Seperti buffer bersama PostgreSQL, cache disk AlloyDB Omni bersifat non-persisten, yang berarti data yang di-cache akan hilang saat dimulai ulang.

Secara default, cache disk AlloyDB Omni menggunakan semua penyimpanan yang dilaporkan oleh sistem file. Anda dapat menentukan jumlah penyimpanan yang dicadangkan untuk menyimpan data dalam cache menggunakan parameter omni_disk_cache_file_size.

Mengaktifkan cache disk AlloyDB Omni

Langkah-langkah yang Anda gunakan untuk mengaktifkan cache disk untuk AlloyDB Omni bergantung pada apakah Anda menjalankan AlloyDB Omni dalam penampung atau di cluster Kubernetes.

Server tunggal

Menyediakan disk dan membuat sistem file

Untuk cache disk AlloyDB Omni, Anda membuat sistem file di disk atau beberapa disk dan memasangnya di dalam penampung dengan AlloyDB Omni. Selain itu, Anda dapat menggunakan utilitas seperti mdadm atau lvm untuk menggabungkan kapasitas menggunakan beberapa disk dan menggunakan sistem file apa pun.

Langkah-langkah berikut menunjukkan penggunaan lvm dan ext4 pada instance Ubuntu Compute Engine menggunakan SSD NVMe.

  1. Buat grup volume dari semua perangkat fisik yang tersedia:

      nvme_prefix="STORAGE_PREFIX"
      nvme_list=$(ls "$nvme_prefix"*)
      sudo vgcreate VOLUME_GROUP ${nvme_list}

    Ganti kode berikut:

    • STORAGE_PREFIX: awalan jalur disk lokal target yang dilampirkan ke virtual machine menggunakan antarmuka nonvolatile memory express (NVMe)—misalnya, di Google Cloud, jalur perangkat NVMe selalu dimulai dengan /dev/nvme0n.
    • VOLUME_GROUP: nama grup volume tempat SSD Anda digabungkan—misalnya, omni-disk-cache-volume.
  2. Untuk membuat volume logis dari kapasitas bebas grup volume dari langkah sebelumnya, gunakan perintah berikut:

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    Ganti LOGICAL_VOLUME dengan nama volume logis yang diperlakukan sebagai partisi oleh LVM—misalnya, omni_disk_cache_device.

  3. Buat sistem file ext4 di volume logis. Jika diperlukan, Anda dapat menentukan opsi ext4 lainnya yang tunduk pada keamanan data.
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. Untuk membuat direktori yang berfungsi sebagai titik pemasangan di mesin host dan memasang sistem file, gunakan perintah berikut:

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

    Ganti OMNI_DISK_CACHE_DIRECTORY dengan nama direktori atau jalur ke direktori yang berfungsi sebagai titik pemasangan—misalnya, omni_disk_cache_directory.

Memasang direktori cache di dalam AlloyDB Omni

Sebelum mengaktifkan cache disk untuk AlloyDB Omni yang berjalan dalam penampung, Anda harus memasang direktori cache di dalam AlloyDB Omni.

Untuk informasi tentang cara menginstal AlloyDB Omni dari image Docker dan menyesuaikannya, lihat Menyesuaikan penginstalan AlloyDB Omni.

Untuk memasang OMNI_DISK_CACHE_DIRECTORY di dalam penampung Docker yang menjalankan AlloyDB Omni, gunakan perintah berikut:

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
      

Ganti kode berikut:

  • CONTAINER_NAME: nama untuk menetapkan penampung AlloyDB Omni baru—misalnya, my-omni.
  • PASSWORD: sandi untuk administrator root database PostgreSQL Anda.
  • DATA_DIR: jalur sistem file yang Anda inginkan agar digunakan AlloyDB Omni untuk direktori datanya.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: direktori cache di dalam penampung AlloyDB Omni yang dipetakan ke titik pemasangan di mesin host—misalnya, berdasarkan nilai direktori cache di dalam penampung, baik /omni_disk_cache_directory, mirip dengan OMNI_DISK_CACHE_DIRECTORY, atau /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
      

Ganti kode berikut:

  • CONTAINER_NAME: nama untuk menetapkan penampung AlloyDB Omni baru—misalnya, my-omni.
  • PASSWORD: sandi untuk administrator root database PostgreSQL Anda.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: direktori cache di dalam penampung AlloyDB Omni yang dipetakan ke titik pemasangan di mesin host—misalnya, berdasarkan nilai direktori cache di dalam penampung, baik /omni_disk_cache_directory, mirip dengan OMNI_DISK_CACHE_DIRECTORY, atau /disk/cache/inside/container.

Untuk memberikan izin akses penuh ke OMNI_DISK_CACHE_DIRECTORY yang terpasang, gunakan perintah berikut:

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
      

Mengaktifkan cache disk AlloyDB Omni untuk AlloyDB Omni yang berjalan dalam penampung

Untuk mengaktifkan cache disk AlloyDB Omni untuk database Anda, tetapkan parameter Grand Unified Configuration (GUC) yang sesuai setelah memastikan bahwa direktori cache yang dipasang dapat diakses dari dalam penampung Docker.

  1. Untuk terhubung ke database AlloyDB Omni dalam penampung sebagai superuser, gunakan perintah berikut:

    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. Untuk menetapkan nilai parameter, gunakan perintah berikut di dalam database AlloyDB Omni:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. Secara default, AlloyDB Omni menggunakan semua ruang yang tersedia di sistem file. Anda dapat mengganti nilai default menggunakan parameter omni_disk_cache_file_size jika diperlukan.

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. Agar perubahan parameter konfigurasi penyimpanan dalam cache diterapkan, mulai ulang penampung yang berjalan dengan AlloyDB Omni:

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

Kubernetes

Mengaktifkan cache disk pada volume generik

Anda dapat mengaktifkan cache disk menggunakan volume umum.

Untuk mengaktifkan cache disk pada volume generik di operator AlloyDB Omni Kubernetes, Anda memerlukan volume persisten yang sudah siap sebelumnya dan storageClass.

Misalnya, jika Anda menggunakan GKE dan belum menyiapkan volume persisten dan storageClass, pastikan Anda telah melakukan hal berikut sebelum mengaktifkan cache disk pada volume generik:

  1. Membuat cluster dengan penyimpanan berbasis SSD lokal.
  2. Memformat volume ke sistem file ext4 menggunakan langkah 1 dari Menjalankan penyedia statis volume lokal.
  3. Membuat volume persisten secara manual untuk setiap SSD di cluster Anda dengan storageClass yang menentukan penyimpanan persisten di perangkat penyimpanan.

Untuk mengaktifkan cache disk pada volume generik untuk database Anda, selesaikan langkah-langkah berikut:

  1. Ubah manifes cluster database Anda untuk menambahkan atribut ultraFastCache ke bagian features di bagian spec:

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

    Ganti kode berikut:

    • DB_CLUSTER_NAME: nama cluster database Anda. Nama ini sama dengan nama cluster database yang Anda deklarasikan saat membuatnya.
    • DISK_CACHE_SIZE: ukuran cache—misalnya, 100Gi. Nilainya harus lebih besar dari shared_buffers. Kolom ini bersifat opsional. Jika Anda tidak menentukan nilai kolom ini, AlloyDB Omni akan menggunakan semua ruang yang tersisa di disk, yang berlaku untuk AlloyDB Omni dalam penampung dan di cluster Kubernetes.
    • STORAGE_CLASS_NAME: nama storage class volume cache ultra cepat—misalnya, local-storage.
  2. Terapkan kembali manifes.

Mengaktifkan cache disk di volume lokal

Jika ingin menggunakan volume lokal, Anda tidak perlu membuat volume persisten. Sebagai gantinya, Anda dapat menggunakan pengoptimalan berikut.

Misalnya, jika Anda menggunakan GKE dan belum menyiapkan volume persisten dan storageClass, pastikan Anda telah melakukan hal berikut sebelum mengaktifkan cache disk di volume lokal:

  1. Membuat cluster dengan penyimpanan berbasis SSD lokal.
  2. Memformat volume ke sistem file ext4 menggunakan langkah 1 dari Menjalankan penyedia statis volume lokal.

Untuk mengaktifkan cache disk di volume lokal untuk database Anda, lakukan hal berikut:

  1. Ubah manifes cluster database Anda untuk menambahkan atribut ultraFastCache ke bagian features di bagian spec:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "15.7.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"
        ...
          

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster database Anda. Nama ini sama dengan nama cluster database yang Anda deklarasikan saat membuatnya.
    • DISK_CACHE_SIZE: ukuran cache—misalnya, 100Gi. Nilainya harus lebih besar dari shared_buffers. Kolom ini bersifat opsional. Jika Anda tidak menentukan nilai kolom ini, AlloyDB Omni akan menggunakan semua ruang yang tersisa di disk, yang berlaku untuk AlloyDB Omni dalam penampung dan di cluster Kubernetes.
    • STORAGE_CLASS_NAME: nama class penyimpanan.
    • LOCAL_VOLUME_PATH: jalur ke volume lokal—misalnya, /mnt/disks/raid/0.
    • LABEL_KEY: label node untuk kunci yang berfungsi sebagai indikator lokasi dan memfasilitasi distribusi Pod yang merata di seluruh cluster—misalnya, cloud.google.com/gke-local-nvme-ssd.
    • OPERATOR_VALUE: hubungan kunci dengan kumpulan nilai—misalnya, In. Tetapkan parameter ke salah satu opsi berikut:
      • In: array nilai tidak boleh kosong.
      • NotIn: array nilai tidak boleh kosong.
      • Exists: array nilai harus kosong.
      • DoesNotExist: array nilai harus kosong.
      • Gt: array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
      • Lt: array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
    • LABEL_KEY_VALUE: nilai untuk kunci label Anda—misalnya, true. Tetapkan parameter ke array nilai string sebagai berikut:
      • Jika operatornya adalah In atau NotIn, array nilai tidak boleh kosong.
      • Jika operatornya adalah Exists atau DoesNotExist, array nilai harus kosong.
      • Jika operatornya adalah Gt atau Lt, array nilai harus memiliki satu elemen, yang ditafsirkan sebagai bilangan bulat.
  2. Terapkan kembali manifes.

Memverifikasi konfigurasi cache disk

Setelah mengaktifkan cache disk AlloyDB Omni, pastikan cache disk diakses dengan memantau aktivitas baca dan tulis ke disk menggunakan utilitas yang tersedia seperti iotop atau iostat.

Selain itu, Anda dapat memeriksa apakah cache disk AlloyDB Omni terbuka.

Langkah-langkah yang Anda gunakan untuk memverifikasi konfigurasi cache disk untuk AlloyDB Omni bergantung pada apakah Anda menjalankan AlloyDB Omni dalam penampung atau di cluster Kubernetes.

Server tunggal

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"

Kubernetes

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

Jika penyimpanan dalam cache disk Anda dikonfigurasi dengan benar, pesan Successfully opened omni disk cache ... akan ditampilkan di log.

Langkah selanjutnya