Saat baris tabel ditambahkan, dihapus, atau diperbarui, columnar engine tidak langsung memperbarui data di penyimpanan kolom. Sebagai gantinya, columnar engine 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 disediakan oleh columnar engine akan berkurang hingga data kolom perlu dimuat ulang untuk mendapatkan kembali peningkatan performa kueri. Saat nilai minimum pemuatan ulang ini tercapai, columnar engine akan menggunakan tugas latar belakang untuk memuat ulang data yang tidak valid di penyimpanan kolom. Secara default, columnar engine menggunakan nilai minimum pemuatan ulang sebesar 50, yang menunjukkan bahwa konten tertentu di penyimpanan kolom akan ditandai untuk dimuat ulang saat 50% kontennya menjadi tidak valid. Anda dapat mengubah nilai minimum pemuatan ulang ini untuk menyesuaikan overhead pemuatan ulang otomatis dan berpotensi mendapatkan performa kueri berkelanjutan yang lebih baik untuk workload aplikasi Anda.
Selain itu, Anda dapat memuat ulang tabel dan indeks ScaNN yang dimuat di columnar engine secara manual kapan saja. Biasanya, Anda melakukan pemuatan ulang manual saat ingin perubahan pada tabel ditampilkan di penyimpanan kolom sesegera mungkin setelah melakukan perubahan.
Memeriksa persentase data tidak valid
Saat aplikasi Anda menambahkan, menghapus, atau memperbarui baris dalam tabel, columnar engine akan menandai data yang terpengaruh di penyimpanan kolom sebagai tidak valid. Anda dapat memeriksa persentase data tidak valid untuk tabel dan tampilan terwujud dengan membuat kueri tampilan g_columnar_relations. Hal ini membantu Anda memutuskan apakah perlu melakukan pemuatan ulang manual atau menyesuaikan nilai minimum pemuatan ulang 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 pembatalan untuk 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 pembatalan 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 nilai minimum pemuatan ulang columnar engine
Untuk mengubah nilai minimum pemuatan ulang columnar engine, Anda harus mengubah nilai flag database google_columnar_engine.refresh_threshold_percentage.
ALTER SYSTEM SET google_columnar_engine.refresh_threshold_percentage=THRESHOLD;
Ganti THRESHOLD dengan 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.
Memuat ulang 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 memuat ulang 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 dimuat ulang.