Menjaga keaktualan data penyimpanan kolom dalam memori

Pilih versi dokumentasi:

Halaman ini menjelaskan cara menjaga keaktualan data di penyimpanan kolom mesin columnar di AlloyDB Omni menggunakan orchestrator RPM.

Saat baris tabel ditambahkan, dihapus, atau diperbarui, mesin berbentuk kolom tidak akan langsung memperbarui data di penyimpanan kolom. Sebagai gantinya, mesin ini menandai konten yang terpengaruh di penyimpanan kolom sebagai tidak valid, dan kueri direncanakan serta dieksekusi menggunakan data berorientasi kolom dari penyimpanan kolom dan data berorientasi baris dari cache baris dan penyimpanan database.

Seiring waktu, karena semakin banyak blok data menjadi tidak valid, peningkatan performa kueri yang diberikan oleh columnar engine akan berkurang hingga titik di mana data kolom perlu diperbarui untuk mendapatkan kembali peningkatan performa kueri. Saat batas refresh ini tercapai, columnar engine akan menggunakan tugas latar belakang untuk me-refresh data yang tidak valid di penyimpanan kolom. Secara default, mesin columnar menggunakan nilai minimum refresh 50, yang menunjukkan bahwa konten tertentu di penyimpanan kolom ditandai untuk di-refresh jika 50% kontennya menjadi tidak valid. Anda dapat mengubah batas refresh ini untuk menyesuaikan overhead refresh otomatis dan berpotensi mendapatkan performa kueri berkelanjutan yang lebih baik untuk workload aplikasi Anda.

Selain itu, Anda dapat memperbarui secara manual tabel dan indeks ScaNN yang dimuat di columnar engine kapan saja. Biasanya, Anda melakukan refresh manual saat ingin perubahan pada tabel ditampilkan di column store sesegera mungkin setelah melakukan perubahan.

Memeriksa persentase data tidak valid

Saat aplikasi Anda menambahkan, menghapus, atau memperbarui baris dalam tabel, mesin columnar menandai data yang terpengaruh di penyimpanan kolom sebagai tidak valid. Anda dapat memeriksa persentase data yang tidak valid untuk tabel dan tampilan terwujud dengan membuat kueri tampilan g_columnar_relations. Hal ini membantu Anda memutuskan apakah perlu melakukan refresh manual atau menyesuaikan batas refresh otomatis.

Untuk melihat persentase pembatalan untuk semua relasi di penyimpanan kolom, jalankan kueri berikut:

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

Untuk memeriksa persentase invalidasi tabel tertentu, tambahkan klausa WHERE ke kueri.

SELECT   relation_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_relations;
WHERE
 relation_name =  TABLE_NAME

Ganti TABLE_NAME dengan string yang berisi nama tabel atau tampilan terwujud. Jika resource berada dalam skema selain public, tentukan nama skema menggunakan format SCHEMA_NAME.TABLE_NAME—misalnya, myschema.mytable.

Untuk memeriksa persentase invalidasi untuk indeks tertentu, tambahkan klausa WHERE ke kueri.

SELECT   index_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_indexes;
WHERE
  index_name = INDEX_NAME

Mengubah batas refresh columnar engine

Untuk mengubah nilai minimum pembaruan mesin columnar, selesaikan langkah-langkah berikut:

  1. Buka manifes cluster database DBCluster Anda.

  2. Di bagian primarySpec, tambahkan parameter google_columnar_engine.refresh_threshold_percentage ke blok parameters:

    DBCluster:
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        # ... existing cluster configuration ...
        primarySpec:
          # ... existing primary configuration ...
          parameters:
            google_columnar_engine.refresh_threshold_percentage: "THRESHOLD"
    

    Ganti kode berikut:

    • DB_CLUSTER_NAME: nama cluster database.
    • THRESHOLD: nilai bilangan bulat antara 1 dan 100. Nilai ini menentukan persentase blok data dalam konten yang harus menjadi tidak valid agar konten ditandai untuk dimuat ulang.
  3. Pengelola RPM akan otomatis memulai ulang database untuk menerapkan perubahan parameter. Terapkan manifes DBCluster yang diupdate menggunakan salah satu metode berikut:

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC_PATH" -r "DBCLUSTER_SPECIFICATION"

    Ganti kode berikut:

    • DEPLOYMENT_SPEC_PATH: jalur ke direktori spesifikasi deployment Anda.
    • DBCLUSTER_SPECIFICATION: jalur ke manifes DBCluster yang Anda ubah.

    Ansible

    1. Buat file playbook update.yml:

      ---
      - hosts: localhost
        vars:
          update_action: "update_resource_spec"
          ansible_user: SSH_USER
          ansible_ssh_private_key_file: SSH_KEY_PATH
        roles:
          - role: google.alloydbomni_orchestrator.update
      

      Ganti kode berikut:

      • SSH_USER: nama pengguna yang Anda gunakan untuk terhubung ke node di cluster menggunakan SSH.
      • SSH_KEY_PATH: jalur lokal ke file kunci pribadi SSH yang digunakan untuk terhubung ke node Anda.
    2. Jalankan playbook dari node kontrol Anda, dengan meneruskan spesifikasi resource sebagai variabel tambahan:

      ansible-playbook -i "DEPLOYMENT_SPEC_PATH" update.yml \
        -e resource_spec="DBCLUSTER_SPECIFICATION"

      Ganti kode berikut:

      • DEPLOYMENT_SPEC_PATH: jalur ke direktori spesifikasi deployment Anda.
      • DBCLUSTER_SPECIFICATION: jalur ke manifes DBCluster yang Anda ubah.

Memperbarui tabel dan indeks vektor secara manual di penyimpanan kolom

Anda dapat memuat ulang tabel dan indeks vektor secara manual di columnar engine kapan saja menggunakan fungsi SQL khusus. Jenis indeks yang didukung adalah ScaNN dan HNSW.

Untuk memuat ulang data tabel di columnar engine, jalankan fungsi google_columnar_engine_refresh.

SELECT google_columnar_engine_refresh(TABLE_NAME);

Ganti TABLE_NAME dengan string yang berisi nama tabel atau tampilan terwujud. Jika resource berada dalam skema selain public, tentukan nama skema menggunakan format SCHEMA_NAME.TABLE_NAME—misalnya, myschema.mytable.

Demikian pula, untuk merefresh indeks vektor secara manual di columnar engine, jalankan fungsi google_columnar_engine_refresh_index.

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

Ganti INDEX_NAME dengan string yang berisi nama indeks yang akan di-refresh.