Untuk meningkatkan performa kueri dan mengurangi biaya I/O database, Anda dapat mengaktifkan penetapan biaya pemindaian indeks berbasis cache di AlloyDB untuk PostgreSQL. Saat Anda mengaktifkan penetapan biaya pemindaian indeks yang mendukung cache, perencana kueri AlloyDB akan menyesuaikan perkiraan biaya I/O pemindaian indeks berdasarkan jumlah halaman indeks dan tabel yang tersedia di buffer bersama saat eksekusi dimulai, dan memilih rencana kueri akhir berdasarkan biaya yang disesuaikan tersebut.
Setelah Anda mengaktifkan cache awareness, fitur ini akan berfungsi secara otomatis dan
menyesuaikan saat rasio hit buffer bersama berubah. Cache awareness juga dapat berfungsi dengan
praktik penyesuaian kueri lainnya, seperti menetapkan perkiraan biaya perencana kueri AlloyDB di
random_page_cost.
Mengaktifkan cache-awareness
Untuk mengaktifkan cache awareness untuk instance AlloyDB, tetapkan flag
alloydb.enable_cache_aware_costing
(Pratinjau) ke
on. Selain itu, Anda dapat menetapkan flag di tingkat sesi untuk memengaruhi rencana kueri yang terjadi dalam sesi yang sama. Untuk mengetahui informasi tentang cara menetapkan flag, lihat
Mengonfigurasi flag database instance.
Contoh skenario
Contoh kode berikut menunjukkan rencana pemindaian indeks yang dijalankan dengan cache buffer bersama yang telah dihangatkan sepenuhnya.
explain (analyze, verbose, buffers)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate (cost=3908.93..3908.94 rows=1 width=8) (actual time=4.128..4.130 rows=1 loops=1)
Output: count(d)
Buffers: shared hit=926
-> Index Scan using idx1 on public.t1 (cost=0.43..3906.49 rows=975 width=2) (actual time=0.143..3.205 rows=919 loops=1)
Output: a, b, c, d
Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))
Buffers: shared hit=926
Execution Time: 4.353 ms
Selama eksekusi ini, tidak ada pembacaan I/O. Tanpa cache awareness, perencana kueri menyertakan biaya I/O untuk rencana kueri pemindaian indeks. Hal ini dapat menyebabkan rencana kueri pemindaian indeks kalah dari rencana kueri pemindaian berurutan.
Cuplikan kode berikut menunjukkan biaya rencana kueri yang disesuaikan saat cache awareness diaktifkan.
explain (verbose)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate (cost=29.93..29.94 rows=1 width=8)
Output: count(d)
-> Index Scan using idx1 on public.t1 (cost=0.43..27.49 rows=975 width=2)
Output: a, b, c, d
Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))
Biaya baru, 27.49, untuk rencana kueri pemindaian indeks yang sama jauh lebih rendah daripada biaya lama, 3906.49.