Tentang mesin berbasis kolom AlloyDB

Halaman ini memberikan ringkasan columnar engine yang ditawarkan AlloyDB untuk PostgreSQL dan menunjukkan cara menggunakannya.

Columnar engine AlloyDB mempercepat pemrosesan kueri SQL untuk pemindaian, gabungan, dan agregat dengan menyediakan komponen berikut:

  • Penyimpanan kolom yang berisi data tabel dan tampilan terwujud untuk kolom yang dipilih, yang disusun ulang ke dalam format berorientasi kolom. Anda juga dapat menambahkan ekspresi yang sering digunakan ke penyimpanan kolom.

  • Mesin eksekusi dan perencana kueri berbasis kolom untuk mendukung penggunaan penyimpanan kolom dalam kueri.

Columnar engine dapat digunakan pada instance utama, instance pool baca, atau keduanya. Jika columnar engine diaktifkan pada instance pool baca, Anda dapat mengaktifkan penerusan kueri transparan secara opsional untuk otomatis merutekan traffic hanya baca ke instance tersebut.

Anda juga dapat menggunakan kolom otomatis untuk menganalisis workload dan otomatis mengisi penyimpanan kolom dengan kolom yang memberikan peningkatan performa terbaik.

Untuk menggunakan columnar engine dengan kueri tertentu, semua kolom dalam fragmen kueri tersebut, seperti gabungan dan pemindaian, harus berada di penyimpanan kolom.

Secara default, columnar engine ditetapkan untuk menggunakan 30% memori instance Anda. Bergantung pada workload, penggunaan memori, dan apakah Anda telah mengonfigurasi pool baca, Anda dapat memilih untuk mengurangi alokasi memori columnar engine pada instance utama dan mengalokasikan lebih banyak memori ke instance pool baca. Untuk melihat dan memantau penggunaan memori oleh columnar engine, lihat Melihat penggunaan memori penyimpanan kolom. Untuk mengubah ukuran memori yang digunakan oleh penyimpanan kolom, lihat Mengonfigurasi ukuran penyimpanan kolom. Untuk menemukan ukuran memori columnar engine yang direkomendasikan untuk instance Anda, lihat Merekomendasikan ukuran memori penyimpanan kolom.

Jenis kueri yang diuntungkan oleh columnar engine

Kueri tertentu dapat diuntungkan oleh columnar engine. Berikut adalah daftar operasi dan pola kuerinya yang paling diuntungkan oleh columnar engine:

  • Pemindaian tabel

    • Memiliki filter selektif, seperti klausa WHERE.
    • Menggunakan sejumlah kecil kolom dari tabel atau tampilan terwujud yang lebih besar.
    • Menggunakan ekspresi seperti LIKE, ILIKE, SUBSTR, dan TRIM.
  • Fungsi agregasi

    • Hanya menggunakan ekspresi berikut: SUM, MIN, MAX, AVG, dan COUNT.
    • Berada di awal kueri pemindaian kolom.
    • Tidak dikelompokkan, atau dikelompokkan menurut kolom.
  • ORDER-BY dan SORT: hanya jika ORDER-BY atau SORT berada pada hasil pemindaian kolom yang diakses dari columnar engine.

  • LIMIT: hanya jika operator berada di awal kueri pemindaian kolom dan berada sebelum operator SORT atau GROUP BY.

  • INNER HASH JOIN hanya jika kunci yang digunakan adalah kolom dan tidak ada penentu gabungan yang digunakan.

  • Gabungan selektif hanya jika gabungan berada di awal kueri pemindaian kolom.

  • Kueri filter dengan ekspresi JSON.

Untuk mengetahui informasi selengkapnya tentang kueri mana yang paling cocok dengan columnar engine, apakah columnar engine digunakan oleh kueri, dan bagaimana cara menggunakannya, lihat Memverifikasi penggunaan columnar engine menggunakan EXPLAIN.

Cara menggunakan columnar engine

Untuk menggunakan columnar engine di instance AlloyDB, Anda melakukan langkah-langkah tingkat tinggi berikut:

  1. Aktifkan engine di instance.

    Mengaktifkan engine adalah operasi satu kali dan memerlukan memulai ulang.

  2. Tambahkan kolom ke penyimpanan kolom.

    Untuk menambahkan kolom ke penyimpanan kolom, gunakan salah satu metode berikut:

  3. Anda dapat melacak konten di penyimpanan kolom menggunakan tampilan g_columnar_relations, dan, setelah kolom ditambahkan, Anda dapat menggunakan pernyataan EXPLAIN untuk memverifikasi penggunaan columnar engine dalam kueri SQL.

Untuk mengetahui petunjuk mendetail tentang cara menggunakan columnar engine, lihat Mengonfigurasi columnar engine.

Data yang dapat Anda tambahkan ke penyimpanan kolom

Ada beberapa batasan terkait jenis data dan sumber data yang dapat Anda gunakan saat menambahkan kolom ke penyimpanan kolom.

Jenis data yang didukung

Columnar engine dapat mengisi dan memperbarui kolom yang didukung dalam tabel meskipun beberapa kolom memiliki jenis data yang tidak didukung. Kolom dengan jenis data yang tidak didukung akan dilewati selama proses pengisian.

Saat menjalankan kueri, columnar engine akan memproses tabel jika semua kolom tertentu yang direferensikan dalam bagian kueri tersebut memiliki jenis data yang didukung dan ada di columnar engine.

Dalam kueri yang melibatkan beberapa tabel, seperti operasi JOIN, Anda dapat menggunakan columnar engine untuk setiap tabel secara individual. Selama semua kolom yang diakses dari tabel tertentu dalam kueri memiliki jenis data yang didukung dan berada di columnar engine, tabel tersebut dapat diproses oleh columnar engine, meskipun tabel lain dalam gabungan memiliki kolom yang tidak didukung.

Columnar engine hanya mendukung kolom dengan jenis data bawaan berikut:

  • array
  • bigint
  • boolean
  • bytea
  • char
  • date
  • decimal
  • double precision
  • enum
  • float4
  • float8
  • integer
  • json
  • jsonb
  • numeric
  • real
  • serial
  • short
  • smallint
  • text
  • timestamp
  • timestamptz
  • uuid
  • varchar
  • vector

Columnar engine mengabaikan upaya untuk menambahkan kolom dengan jenis data yang tidak didukung ke penyimpanan kolom secara manual.

Sumber data yang tidak didukung

Columnar engine tidak mendukung tabel atau tampilan terwujud dengan atribut berikut sebagai sumber data:

  • Tabel berpartisi non-leaf

  • Tabel asing

Batasan columnar engine

  • Jika Anda menjalankan kueri analisis pada kolom yang memiliki indeks, pengoptimal AlloyDB dapat memilih untuk menggunakan penyimpanan baris.
  • Kolom yang ditambahkan secara manual ke penyimpanan kolom tidak akan otomatis dihapus. Untuk menghapus kolom yang ditambahkan secara manual, gunakan google_columnar_engine_drop() di instance Anda.
  • Kolom otomatis dapat menambahkan dan menghapus kolom secara dinamis berdasarkan penggunaan kueri.
  • Tidak semua jenis data didukung oleh columnar engine. Untuk melihat jenis data yang didukung, lihat jenis data yang didukung.
  • Update yang sering dilakukan pada baris akan membatalkan data kolom. Untuk memvalidasi tabel atau a tampilan terwujud di penyimpanan kolom, Anda dapat mengurangi frekuensi update, atau menjadwalkan refresh columnar engine yang lebih sering.

    Anda dapat membandingkan kolom invalid_block_count dan total_block_count di g_columnar_relations untuk memeriksa apakah tabel atau tampilan Anda terpengaruh. Jika Anda sering atau memiliki perubahan volume tinggi pada tabel atau tampilan, invalid_block_count akan tinggi.

  • Tabel berpartisi tidak dapat diisi langsung ke columnar engine. Untuk menggunakan columnar engine, Anda harus mengisi setiap partisi leaf tabel secara individual.

  • Untuk tabel atau tampilan dengan jumlah baris yang kecil, biasanya kurang dari 5.000, perencana kueri dapat memilih untuk menggunakan penyimpanan baris, bukan penyimpanan kolom, untuk performa yang lebih baik, meskipun data berhasil dimuat ke columnar engine.

Langkah berikutnya