Mengaktifkan biaya yang kompatibel dengan cache untuk rencana kueri pemindaian indeks

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.