Halaman ini mendokumentasikan kesadaran cache selama pemindaian indeks. Jika diaktifkan, perencana kueri AlloyDB for PostgreSQL akan menyesuaikan perkiraan biaya I/O pemindaian indeks berdasarkan jumlah halaman indeks dan tabel yang sudah tersedia di buffer bersama saat eksekusi dimulai. Rencana kueri akhir kemudian dipilih berdasarkan biaya rencana yang disesuaikan. Tindakan ini akan meningkatkan performa kueri dan mengurangi biaya database.
Setelah diaktifkan, fitur kepekaan terhadap cache akan berfungsi secara otomatis dan menyesuaikan diri dengan perubahan status saat mengakses buffer bersama. Selain itu, cache awareness
dapat bekerja sama dengan praktik penyesuaian kueri lainnya, seperti menyetel
perkiraan biaya perencana kueri AlloyDB ke
random_page_cost
.
Mengaktifkan kesadaran cache
Untuk mengaktifkan cache awareness untuk instance AlloyDB, tetapkan flag
alloydb.enable_cache_aware_costing
(Pratinjau) ke
on
. Selain itu, Anda dapat menyetel tanda di tingkat sesi untuk memengaruhi rencana kueri yang terjadi dalam sesi yang sama. Untuk mengetahui informasi tentang cara menyetel flag, lihat
Mengonfigurasi flag database instance.
Contoh skenario
Contoh kode berikut menunjukkan rencana pemindaian indeks yang dieksekusi dengan cache buffer bersama yang sepenuhnya di-warm-up.
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 mengetahui cache, 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 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
.