Ringkasan pengambilan data indeks

AlloyDB untuk PostgreSQL menggunakan pengambilan data di awal indeks untuk mempercepat kueri yang membaca rentang baris melalui indeks B-tree. Pengambilan data indeks diaktifkan secara default di instance AlloyDB dan AlloyDB Omni yang menjalankan PostgreSQL 17 dan yang lebih baru. Anda tidak perlu menetapkan flag apa pun, membangun ulang indeks, atau mengubah aplikasi atau kueri SQL untuk mendapatkan manfaatnya.

Cara kerja pengambilan data indeks

Saat kueri memindai rentang nilai melalui indeks—misalnya, predikat BETWEEN atau klausa ORDER BY ... LIMIT pada kolom yang diindeks—pemindaian akan membaca halaman indeks dan halaman tabel yang ditunjuk oleh entri indeks. Halaman tabel tersebut sering kali tersebar di seluruh penyimpanan. Di PostgreSQL standar, pemindaian membaca halaman ini satu per satu, sehingga saat halaman belum ada di memori, kueri menghabiskan sebagian besar waktunya untuk menunggu I/O penyimpanan.

Dengan pengambilan data indeks, AlloyDB melihat ke depan pemindaian yang berjalan pada indeks dan tabel, serta membaca halaman yang akan dibutuhkan pemindaian secara paralel. AlloyDB menempatkan halaman yang diambil di cache SSD lokal instance, sehingga saat pemindaian meminta halaman, halaman tersebut disajikan dari penyimpanan lokal yang cepat, bukan dari penyimpanan jarak jauh. Halaman yang diambil di awal disimpan di luar buffer bersama PostgreSQL, sehingga pengambilan di awal tidak mengurangi cache buffer yang tersedia untuk sesi lain.

Pengambilan data indeks mencakup pengamanan berikut agar tidak menambahkan overhead ke kueri yang tidak dapat memanfaatkannya:

  • Pengambilan data di awal berhenti di batas klausa LIMIT, sehingga pemindaian tidak membaca halaman setelah baris yang ditampilkan kueri.
  • Untuk pemindaian khusus indeks pada indeks cakupan, AlloyDB hanya mengambil data halaman indeks dan tidak membaca halaman tabel.
  • Kueri yang menampilkan satu baris, seperti pencarian kunci utama, tidak memicu pengambilan data di awal.

Manfaat untuk workload

Pengambilan data indeks sangat membantu jika set kerja Anda lebih besar daripada memori instance dan kueri Anda membaca banyak baris melalui indeks B-tree. Berikut adalah contoh kueri yang diuntungkan:

  • Kueri rentang pada kolom stempel waktu, tanggal, atau numerik yang diindeks, seperti laporan selama rentang waktu.
  • Kueri yang menampilkan banyak baris untuk satu kunci, seperti histori pesanan untuk pelanggan.
  • Gabungan yang sisi dalamnya adalah pemindaian indeks yang menampilkan banyak baris.
  • Kueri analisis yang membaca rentang besar dari tabel berorientasi baris.

Kueri yang datanya sudah ada di buffer bersama, dan pencarian satu baris, berperforma sama dengan atau tanpa pengambilan data di awal.

Pengambilan data di rencana eksekusi

Untuk melihat efek pengambilan data indeks pada kueri, jalankan kueri dengan EXPLAIN (ANALYZE, BUFFERS). Halaman yang dimuat oleh pengambilan data ke dalam cache SSD lokal akan muncul sebagai jumlah ultra fast cache hit pada node pemindaian indeks rencana. Untuk mengetahui informasi selengkapnya tentang cara membaca penghitung ini, lihat Mendapatkan dan menganalisis rencana eksekusi.

Langkah berikutnya