Mesin berbasis kolom AlloyDB untuk PostgreSQL mempercepat kueri SQL yang memindai, menggabungkan, dan mengagregasi data dalam jumlah besar dengan menyimpan kolom yang dipilih dalam memori dalam format berorientasi kolom. Anda dapat menggunakannya pada instance utama dan kumpulan baca, dan auto-columnarization dapat memilih kolom untuk Anda.
Columnar Engine 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 kumpulan baca, atau keduanya. Jika columnar engine diaktifkan pada instance kumpulan baca, Anda dapat mengaktifkan penerusan kueri transparan untuk mengarahkan traffic hanya baca ke instance tersebut secara otomatis.
Anda juga dapat menggunakan auto-columnarization 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 gabung dan pemindaian, harus berada di penyimpanan kolom.
Secara default, columnar engine ditetapkan untuk menggunakan 30% memori instance Anda (atau 10% pada instance 1-vCPU). Bergantung pada workload, penggunaan memori, dan jika Anda telah mengonfigurasi kumpulan baca, Anda dapat memilih untuk mengurangi alokasi memori columnar engine pada instance utama dan mengalokasikan lebih banyak memori ke instance kumpulan baca. Untuk melihat dan memantau penggunaan memori oleh mesin kolom, 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 mendapatkan manfaat dari columnar engine
Kueri tertentu dapat memanfaatkan columnar engine. Berikut adalah daftar operasi dan pola kuerinya yang paling diuntungkan dari columnar engine:
Pemindaian tabel
- Memiliki filter selektif, seperti klausa
WHERE. - Menggunakan sejumlah kecil kolom dari tabel atau tampilan terwujud yang lebih besar.
- Bahasa ini menggunakan ekspresi seperti
LIKE,ILIKE,SUBSTR, danTRIM.
- Memiliki filter selektif, seperti klausa
Fungsi agregasi
- Mereka hanya menggunakan ekspresi berikut:
SUM,MIN,MAX,AVG, danCOUNT. - Keduanya berada di awal kueri pemindaian berbasis kolom.
- Data tersebut tidak dikelompokkan, atau dikelompokkan menurut kolom.
- Mereka hanya menggunakan ekspresi berikut:
ORDER-BYdanSORT: hanya jikaORDER-BYatauSORTberada di hasil pemindaian kolom yang diakses dari columnar engine.LIMIT: hanya jika operator berada di awal kueri pemindaian kolom dan berada sebelum operatorSORTatauGROUP BY.INNER HASH JOINhanya jika kunci yang digunakan adalah kolom dan tidak ada penentu gabungan yang digunakan.Gabungan selektif hanya jika gabungan berada di awal kueri pemindaian berbasis kolom.
Filter kueri dengan ekspresi JSON.
Untuk mengetahui informasi selengkapnya tentang kueri mana yang paling cocok dengan columnar engine, apakah
columnar engine digunakan oleh kueri, dan cara penggunaannya, lihat
Memverifikasi penggunaan columnar engine menggunakan EXPLAIN.
Cara menggunakan columnar engine
Untuk menggunakan columnar engine di instance AlloyDB, lakukan langkah-langkah umum berikut:
Aktifkan mesin di instance.
Mengaktifkan mesin adalah operasi satu kali dan memerlukan mulai ulang.
Menambahkan kolom ke penyimpanan kolom.
Untuk menambahkan kolom ke penyimpanan kolom, gunakan salah satu metode berikut:
Gunakan auto-columnarization, yang menganalisis workload Anda dan menambahkan kolom secara otomatis.
Tambahkan kolom secara manual atau tambahkan ekspresi yang sering digunakan ke penyimpanan kolom (Pratinjau) berdasarkan pengetahuan Anda tentang workload pada database dalam instance.
Anda dapat melacak apa yang ada di penyimpanan kolom menggunakan tampilan
g_columnar_relations, dan, setelah kolom ditambahkan, Anda dapat menggunakan pernyataanEXPLAINuntuk memverifikasi penggunaan columnar engine dalam kueri SQL.
Untuk 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 di 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 tabel apa pun 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:
arraybigintbooleanbyteachardatedecimaldouble precisionenumfloat4float8integerjsonjsonbnumericrealserialshortsmallinttexttimestamptimestamptzuuidvarcharvector
Columnar engine mengabaikan upaya apa pun untuk menambahkan kolom secara manual dengan jenis data yang tidak didukung ke penyimpanan kolom.
Sumber data yang tidak didukung
Columnar Engine tidak mendukung tabel atau tampilan terwujud dengan atribut berikut sebagai sumber data:
Tabel berpartisi non-daun
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 dihapus secara otomatis. Untuk menghapus paksa
kolom yang ditambahkan secara manual, gunakan
google_columnar_engine_drop()pada instance Anda. - Auto-columnarization dapat menambahkan dan menghapus kolom secara dinamis berdasarkan penggunaan kueri.
- Tidak semua jenis data didukung oleh mesin berbasis kolom. Untuk melihat jenis data yang didukung, lihat jenis data yang didukung.
Pembaruan yang sering dilakukan pada baris akan membatalkan data berbentuk kolom. Untuk memvalidasi tabel atau tampilan terwujud di penyimpanan berbasis kolom, Anda dapat mengurangi frekuensi update, atau menjadwalkan refresh columnar engine lebih sering.
Anda dapat membandingkan kolom
invalid_block_countdantotal_block_countdi g_columnar_relations untuk memeriksa apakah tabel atau tampilan Anda terpengaruh. Jika Anda sering melakukan perubahan atau perubahan dalam jumlah besar pada tabel atau tampilan,invalid_block_countakan tinggi.Tabel berpartisi tidak dapat diisi langsung ke dalam columnar engine. Untuk menggunakan columnar engine, Anda harus mengisi setiap partisi leaf tabel satu per satu.
Untuk tabel atau tampilan dengan jumlah baris yang sedikit, biasanya kurang dari 5.000, perencana kueri mungkin memilih untuk menggunakan penyimpanan baris, bukan penyimpanan kolom, untuk performa yang lebih baik, meskipun data berhasil dimuat ke dalam columnar engine.