1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara men-deploy AlloyDB Omni dan menggunakan Columnar Engine untuk meningkatkan performa kueri.
Prasyarat
- Pemahaman dasar tentang Konsol Google Cloud
- Keterampilan dasar dalam antarmuka command line dan google shell
Yang akan Anda pelajari
- Cara men-deploy AlloyDB Omni di VM GCE di Google Cloud
- Cara terhubung ke AlloyDB Omni
- Cara memuat data ke AlloyDB Omni
- Cara mengaktifkan Mesin Berbasis Kolom
- Cara memeriksa Mesin Kolom dalam mode Otomatis
- Cara mengisi Columnar Store secara manual
Yang Anda butuhkan
- Akun Google Cloud dan Project Google Cloud
- Browser web seperti Chrome
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Sebelum memulai
Aktifkan API
Output:
Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:
PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
Jika tidak ditentukan dalam konfigurasi cloud shell, siapkan menggunakan perintah berikut
export PROJECT_ID=<your project>
gcloud config set project $PROJECT_ID
Aktifkan semua layanan yang diperlukan:
gcloud services enable compute.googleapis.com
Output yang diharapkan
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417 Updated property [core/project]. student@cloudshell:~ (test-project-001-402417)$ gcloud services enable compute.googleapis.com Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
4. Men-deploy AlloyDB Omni di GCE
Untuk men-deploy AlloyDB Omni di GCE, kita perlu menyiapkan virtual machine dengan konfigurasi dan software yang kompatibel. Berikut adalah contoh cara men-deploy AlloyDB Omni di VM berbasis Debian.
Membuat VM GCE
Kita perlu men-deploy VM dengan konfigurasi yang dapat diterima untuk CPU, memori, dan penyimpanan. Kita akan menggunakan image Debian default dengan ukuran disk sistem yang ditingkatkan menjadi 20 Gb untuk mengakomodasi file database AlloyDB Omni.
Kita dapat menggunakan cloud shell yang dimulai atau terminal dengan cloud SDK yang diinstal
Semua langkah juga dijelaskan dalam panduan memulai untuk AlloyDB Omni.
Siapkan variabel lingkungan untuk deployment Anda.
export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01
Kemudian, kita menggunakan gcloud untuk membuat VM GCE.
gcloud compute instances create $MACHINE_NAME \
--project=$(gcloud info --format='value(config.project)') \
--zone=$ZONE --machine-type=$MACHINE_TYPE \
--metadata=enable-os-login=true \
--create-disk=auto-delete=yes,boot=yes,size=$DISK_SIZE,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" \
--format="value(name)"),type=pd-ssd
Output konsol yang diharapkan:
gleb@cloudshell:~ (gleb-test-short-001-415614)$ export ZONE=us-central1-a export MACHINE_TYPE=n2-highmem-2 export DISK_SIZE=20 export MACHINE_NAME=omni01 gleb@cloudshell:~ (gleb-test-short-001-415614)$ gcloud compute instances create $MACHINE_NAME \ --project=$(gcloud info --format='value(config.project)') \ --zone=$ZONE --machine-type=$MACHINE_TYPE \ --metadata=enable-os-login=true \ --create-disk=auto-delete=yes,boot=yes,size=$DISK_SIZE,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" \ --format="value(name)"),type=pd-ssd Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-001-415614/zones/us-central1-a/instances/omni01]. WARNING: Some requests generated warnings: - Disk size: '20 GB' is larger than image size: '10 GB'. You might need to resize the root repartition manually if the operating system does not support automatic resizing. See https://cloud.google.com/compute/docs/disks/add-persistent-disk#resize_pd for details. NAME: omni01 ZONE: us-central1-a MACHINE_TYPE: n2-highmem-2 PREEMPTIBLE: INTERNAL_IP: 10.128.0.3 EXTERNAL_IP: 35.232.157.123 STATUS: RUNNING gleb@cloudshell:~ (gleb-test-short-001-415614)$
Menginstal AlloyDB Omni
Hubungkan ke VM yang dibuat:
gcloud compute ssh omni01 --zone $ZONE
Output konsol yang diharapkan:
gleb@cloudshell:~ (gleb-test-short-001-415614)$ gcloud compute ssh omni01 --zone $ZONE Warning: Permanently added 'compute.5615760774496706107' (ECDSA) to the list of known hosts. Linux omni01.us-central1-a.c.gleb-test-short-003-421517.internal 6.1.0-20-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.85-1 (2024-04-11) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. gleb@omni01:~$
Jalankan perintah berikut di terminal yang terhubung.
Instal docker di VM:
sudo apt update
sudo apt-get -y install docker.io
Output konsol yang diharapkan (disamarkan):
gleb@omni01:~$ sudo apt update sudo apt-get -y install docker.io Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B] Get:5 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B] Get:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease [5146 B] Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [6406 B] Get:9 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable/main amd64 Packages [1916 B] Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB] ... Setting up binutils (2.40-2) ... Setting up needrestart (3.6-4+deb12u1) ... Processing triggers for man-db (2.11.2-2) ... Processing triggers for libc-bin (2.36-9+deb12u4) ... gleb@omni01:~$
Tentukan sandi untuk pengguna postgres:
export PGPASSWORD=<your password>
Buat direktori untuk data AlloyDB Omni. Ini adalah pendekatan opsional, tetapi direkomendasikan. Secara default, data akan dibuat menggunakan lapisan sistem file sementara docker dan semuanya akan dihancurkan saat penampung docker dihapus. Dengan menyimpannya secara terpisah, Anda dapat mengelola penampung secara independen dari data dan secara opsional menempatkannya ke penyimpanan dengan karakteristik IO yang lebih baik
Berikut adalah perintah yang membuat direktori di direktori beranda pengguna tempat semua data akan ditempatkan:
mkdir -p $HOME/alloydb-data
Deploy penampung AlloyDB Omni:
sudo docker run --name my-omni \
-e POSTGRES_PASSWORD=$PGPASSWORD \
-p 5432:5432 \
-v $HOME/alloydb-data:/var/lib/postgresql/data \
-v /dev/shm:/dev/shm \
-d google/alloydbomni
Output konsol yang diharapkan (disamarkan):
gleb@omni01:~$ export PGPASSWORD=StrongPassword gleb@omni01:~$ sudo docker run --name my-omni \ -e POSTGRES_PASSWORD=$PGPASSWORD \ -p 5432:5432 \ -v $HOME/alloydb-data:/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -d google/alloydbomni Unable to find image 'google/alloydbomni:latest' locally latest: Pulling from google/alloydbomni 71215d55680c: Pull complete ... 2e0ec3fe1804: Pull complete Digest: sha256:d6b155ea4c7363ef99bf45a9dc988ce5467df5ae8cd3c0f269ae9652dd1982a6 Status: Downloaded newer image for google/alloydbomni:latest 56de4ae0018314093c8b048f69a1e9efe67c6c8117f44c8e1dc829a2d4666cd2 gleb@omni01:~$
Instal software klien PostgreSQL ke VM (opsional - diharapkan sudah diinstal):
sudo apt install -y postgresql-client
Output konsol yang diharapkan:
gleb@omni01:~$ sudo apt install -y postgresql-client Reading package lists... Done Building dependency tree... Done Reading state information... Done postgresql-client is already the newest version (15+248). 0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Hubungkan ke AlloyDB Omni:
psql -h localhost -U postgres
Output konsol yang diharapkan:
gleb@omni01:~$ psql -h localhost -U postgres psql (15.6 (Debian 15.6-0+deb12u1), server 15.5) Type "help" for help. postgres=#
Putuskan sambungan dari AlloyDB Omni:
exit
Output konsol yang diharapkan:
postgres=# exit gleb@omni01:~$
5. Menyiapkan Database Pengujian
Untuk menguji Columnar Engine, kita perlu membuat database dan mengisinya dengan beberapa data pengujian.
Buat Database
Menghubungkan ke VM AlloyDB Omni dan membuat database
Dalam sesi Cloud Shell, jalankan:
gcloud config set project $(gcloud config get-value project)
Hubungkan ke VM AlloyDB Omni:
ZONE=us-central1-a
gcloud compute ssh omni01 --zone $ZONE
Output konsol yang diharapkan:
student@cloudshell:~ (gleb-test-short-001-416213)$ gcloud config set project $(gcloud config get-value project) Updated property [core/project]. student@cloudshell:~ (gleb-test-short-001-416213)$ ZONE=us-central1-a gcloud compute ssh omni01 --zone $ZONE Linux omni01.us-central1-a.c.gleb-test-short-003-421517.internal 6.1.0-20-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.85-1 (2024-04-11) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Mar 4 18:17:55 2024 from 35.237.87.44 student@omni01:~$
Dalam sesi SSH yang dibuat, jalankan:
export PGPASSWORD=<your password>
psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db"
Output konsol yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db" CREATE DATABASE student@omni01:~$
Membuat tabel dengan data sampel
Untuk pengujian, kita akan menggunakan data publik tentang Produsen Asuransi yang Berlisensi di Iowa. Anda dapat menemukan set data ini di situs pemerintah Iowa - https://data.iowa.gov/Regulation/Insurance-Producers-Licensed-in-Iowa/n4cc-vqyk/about_data .
Pertama, kita perlu membuat tabel.
Di VM GCE, jalankan:
psql -h localhost -U postgres -d quickstart_db -c "DROP TABLE if exists insurance_producers_licensed_in_iowa;
CREATE TABLE insurance_producers_licensed_in_iowa (
npn int8,
last_name text,
first_name text,
address_line_1 text,
address_line_2 text,
address_line_3 text,
city text,
state text,
zip int4,
firstactivedate timestamp,
expirydate timestamp,
business_phone text,
email text,
physical_location text,
iowaresident text,
loa_has_crop text,
loa_has_surety text,
loa_has_ah text,
loa_has_life text,
loa_has_variable text,
loa_has_personal_lines text,
loa_has_credit text,
loa_has_excess text,
loa_has_property text,
loa_has_casualty text,
loa_has_reciprocal text
);"
Output konsol yang diharapkan:
otochkin@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "DROP TABLE if exists insurance_producers_licensed_in_iowa; CREATE TABLE insurance_producers_licensed_in_iowa ( npn int8, last_name text, first_name text, address_line_1 text, address_line_2 text, address_line_3 text, city text, state text, zip int4, firstactivedate timestamp, expirydate timestamp, business_phone text, email text, physical_location text, iowaresident text, loa_has_crop text, loa_has_surety text, loa_has_ah text, loa_has_life text, loa_has_variable text, loa_has_personal_lines text, loa_has_credit text, loa_has_excess text, loa_has_property text, loa_has_casualty text, loa_has_reciprocal text );" NOTICE: table "insurance_producers_licensed_in_iowa" does not exist, skipping DROP TABLE CREATE TABLE otochkin@omni01:~$
Muat data ke tabel.
Di VM GCE, jalankan:
curl https://data.iowa.gov/api/views/n4cc-vqyk/rows.csv | psql -h localhost -U postgres -d quickstart_db -c "\copy insurance_producers_licensed_in_iowa from stdin csv header"
Output konsol yang diharapkan:
otochkin@omni01:~$ curl https://data.iowa.gov/api/views/n4cc-vqyk/rows.csv | psql -h localhost -U postgres -d quickstart_db -c "\copy insurance_producers_licensed_in_iowa from stdin csv header" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 39.3M 0 39.3M 0 0 1004k 0 --:--:-- 0:00:40 --:--:-- 1028k COPY 210898 otochkin@omni01:~$
Kami telah memuat 210898 data tentang produsen asuransi ke database dan dapat melakukan beberapa pengujian.
Menjalankan Kueri Pengujian
Hubungkan ke quickstart_db menggunakan psql dan aktifkan pengaturan waktu untuk mengukur waktu eksekusi kueri kita.
Di VM GCE, jalankan:
psql -h localhost -U postgres -d quickstart_db
Output konsol yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db psql (13.14 (Debian 13.14-0+deb11u1), server 15.5 WARNING: psql major version 13, server major version 15. Some psql features might not work. Type "help" for help. quickstart_db=#
Dalam sesi PSQL, jalankan:
\timing
Output konsol yang diharapkan:
quickstart_db=# \timing Timing is on. quickstart_db=#
Mari kita temukan 5 kota teratas berdasarkan jumlah produsen asuransi yang menjual asuransi Kecelakaan dan Kesehatan serta lisensinya berlaku setidaknya selama 6 bulan ke depan.
Dalam sesi PSQL, jalankan:
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Output konsol yang diharapkan:
quickstart_db=# SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; city | count -------------+------- TAMPA | 1885 OMAHA | 1656 KANSAS CITY | 1279 AUSTIN | 1254 MIAMI | 1003 (5 rows) Time: 94.965 ms
Jalankan kueri pengujian beberapa kali untuk mendapatkan waktu eksekusi yang andal.Kita dapat melihat bahwa waktu rata-rata untuk menampilkan hasil adalah sekitar 94 md. Pada langkah-langkah berikut, kita akan mengaktifkan AlloyDB Columnar Engine dan melihat apakah dapat meningkatkan performa.
Keluar dari sesi psql:
exit
6. Mengaktifkan Mesin Kolom
Sekarang kita perlu mengaktifkan Mesin Berbasis Kolom di AlloyDB Omni.
Memperbarui Parameter AlloyDB Omni
Kita perlu mengalihkan parameter instance "google_columnar_engine.enabled" ke "on" untuk AlloyDB Omni dan memerlukan mulai ulang.
Perbarui postgresql.conf di direktori /var/alloydb/config dan mulai ulang instance.
Di VM GCE, jalankan:
sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.enabled=true >>/var/lib/postgresql/data/postgresql.conf"
sudo docker exec my-omni /bin/bash -c "echo shared_preload_libraries=\'google_columnar_engine,google_job_scheduler,google_db_advisor,google_storage\' >>/var/lib/postgresql/data/postgresql.conf"
sudo docker stop my-omni
sudo docker start my-omni
Output konsol yang diharapkan:
student@omni01:~$ sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.enabled=true >>/var/lib/postgresql/data/postgresql.conf" sudo docker exec my-omni /bin/bash -c "echo shared_preload_libraries=\'google_columnar_engine,google_job_scheduler,google_db_advisor,google_storage\' >>/var/lib/postgresql/data/postgresql.conf" sudo docker stop my-omni sudo docker start my-omni my-omni my-omni student@omni01:~$
Memverifikasi Columnar Engine
Hubungkan ke database menggunakan psql dan verifikasi mesin kolom.
Menghubungkan ke database AlloyDB Omni
Dalam sesi SSH VM, hubungkan ke database:
psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled"
Perintah akan menampilkan mesin kolom yang diaktifkan.
Output konsol yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled" google_columnar_engine.enabled -------------------------------- on (1 row)
7. Perbandingan Performa
Sekarang kita dapat mengisi penyimpanan mesin kolom dan memverifikasi performanya.
Penambahan Toko Kolom Otomatis
Secara default, tugas yang mengisi toko berjalan setiap jam. Kita akan mengurangi waktu ini menjadi 10 menit untuk menghindari menunggu.
Di VM GCE, jalankan:
sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.auto_columnarization_schedule=\'EVERY 10 MINUTES\' >>/var/lib/postgresql/data/postgresql.conf"
sudo docker stop my-omni
sudo docker start my-omni
Berikut adalah output yang diharapkan:
student@omni01:~$ sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.auto_columnarization_schedule=\'EVERY 5 MINUTES\' >>/var/lib/postgresql/data/postgresql.conf" sudo docker stop my-omni sudo docker start my-omni my-omni my-omni student@omni01:~$
Memverifikasi setelan
Di VM GCE, jalankan:
psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;"
Output yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;" google_columnar_engine.auto_columnarization_schedule ------------------------------------------------------ EVERY 10 MINUTES (1 row) student@omni01:~$
Periksa objek di Columnar Store. Seharusnya kode tersebut kosong.
Di VM GCE, jalankan:
psql -h localhost -U postgres -d quickstart_db -c "SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;"
Output yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;" database_name | schema_name | relation_name | column_name ---------------+-------------+---------------+------------- (0 rows) student@omni01:~$
Hubungkan ke database dan jalankan kueri yang sama yang telah kita jalankan sebelumnya beberapa kali.
Di VM GCE, jalankan:
psql -h localhost -U postgres -d quickstart_db
Dalam sesi PSQL.
Mengaktifkan pengaturan waktu
\timing
Jalankan kueri beberapa kali:
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Output yang diharapkan:
quickstart_db=# SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; city | count -------------+------- TAMPA | 1885 OMAHA | 1656 KANSAS CITY | 1279 AUSTIN | 1254 MIAMI | 1003 (5 rows) Time: 94.289 ms quickstart_db=# SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; city | count -------------+------- TAMPA | 1885 OMAHA | 1656 KANSAS CITY | 1279 AUSTIN | 1254 MIAMI | 1003 (5 rows) Time: 94.608 ms quickstart_db=#
Tunggu 10 menit, lalu periksa apakah kolom tabel insurance_producers_licensed_in_iowa telah diisi ke dalam penyimpanan kolom.
SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
Output yang diharapkan:
quickstart_db=# SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns; database_name | schema_name | relation_name | column_name ---------------+-------------+--------------------------------------+------------- quickstart_db | public | insurance_producers_licensed_in_iowa | city quickstart_db | public | insurance_producers_licensed_in_iowa | expirydate quickstart_db | public | insurance_producers_licensed_in_iowa | loa_has_ah (3 rows) Time: 0.643 ms
Sekarang kita dapat menjalankan kueri untuk tabel insurance_producers_licensed_in_iowa lagi dan melihat apakah performanya meningkat.
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Output yang diharapkan:
quickstart_db=# SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; city | count -------------+------- TAMPA | 1885 OMAHA | 1656 KANSAS CITY | 1279 AUSTIN | 1254 MIAMI | 1003 (5 rows) Time: 14.380 ms quickstart_db=# SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; city | count -------------+------- TAMPA | 1885 OMAHA | 1656 KANSAS CITY | 1279 AUSTIN | 1254 MIAMI | 1003 (5 rows) Time: 13.279 ms
Waktu eksekusi telah turun dari 94 md menjadi 14 md. Jika tidak melihat peningkatan apa pun, Anda dapat memeriksa apakah kolom telah berhasil diisi ke penyimpanan kolom dengan memeriksa tampilan g_columnar_columns.
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Output yang diharapkan:
quickstart_db=# select relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns; relation_name | column_name | column_type | status | size_in_bytes --------------------------------------+-------------+-------------+--------+--------------- insurance_producers_licensed_in_iowa | city | text | Usable | 664231 insurance_producers_licensed_in_iowa | expirydate | timestamp | Usable | 212434 insurance_producers_licensed_in_iowa | loa_has_ah | text | Usable | 211734 (3 rows)
Sekarang kita dapat memverifikasi apakah rencana eksekusi kueri menggunakan Mesin Berbasis Kolom.
Dalam sesi PSQL, jalankan:
EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Output yang diharapkan:
quickstart_db=# EXPLAIN (ANALYZE,SETTINGS,BUFFERS) SELECT city, count(*) FROM insurance_producers_licensed_in_iowa WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH' GROUP BY city ORDER BY count(*) desc limit 5; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=2279.72..2279.73 rows=5 width=17) (actual time=12.248..12.252 rows=5 loops=1) -> Sort (cost=2279.72..2292.91 rows=5277 width=17) (actual time=12.246..12.248 rows=5 loops=1) Sort Key: (count(*)) DESC Sort Method: top-N heapsort Memory: 25kB -> HashAggregate (cost=2139.30..2192.07 rows=5277 width=17) (actual time=10.235..11.250 rows=7555 loops=1) Group Key: city Batches: 1 Memory Usage: 1169kB -> Append (cost=20.00..1669.24 rows=94012 width=9) (actual time=10.231..10.233 rows=94286 loops=1) -> Custom Scan (columnar scan) on insurance_producers_licensed_in_iowa (cost=20.00..1665.22 rows=94011 width=9) (actual time=10.229..10.231 rows=94286 loops=1) Filter: ((loa_has_ah = 'Yes'::text) AND (expirydate > (now() + '6 mons'::interval))) Rows Removed by Columnar Filter: 116612 Rows Aggregated by Columnar Scan: 94286 Columnar cache search mode: native -> Seq Scan on insurance_producers_licensed_in_iowa (cost=0.00..4.02 rows=1 width=9) (never executed) Filter: ((loa_has_ah = 'Yes'::text) AND (expirydate > (now() + '6 mons'::interval))) Planning Time: 0.216 ms Execution Time: 12.353 ms
Dan kita dapat melihat bahwa operasi "Seq Scan" pada segmen tabel business_licenses tidak pernah dieksekusi dan "Custom Scan (columnar scan)" digunakan sebagai gantinya. Hal ini membantu kami meningkatkan waktu respons dari 94 menjadi 12 md.
Jika ingin menghapus konten yang diisi otomatis dari mesin kolom, kita dapat melakukannya menggunakan fungsi SQL google_columnar_engine_reset_recommendation.
Dalam sesi PSQL, jalankan:
SELECT google_columnar_engine_reset_recommendation(drop_columns => true);
Tindakan ini akan menghapus kolom yang terisi dan Anda dapat memverifikasinya di tampilan g_columnar_columns dan g_columnar_recommended_columns seperti yang ditunjukkan sebelumnya.
SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Output yang diharapkan:
quickstart_db=# SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns; database_name | schema_name | relation_name | column_name ---------------+-------------+---------------+------------- (0 rows) Time: 0.447 ms quickstart_db=# select relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns; relation_name | column_name | column_type | status | size_in_bytes ---------------+-------------+-------------+--------+--------------- (0 rows) Time: 0.556 ms quickstart_db=#
Penambahan Data ke Penyimpanan Berformat Kolom secara Manual
Kita dapat menambahkan kolom ke Columnar Engine Store secara manual menggunakan fungsi SQL atau menentukan entitas yang diperlukan dalam flag instance untuk memuat kolom secara otomatis saat instance dimulai.
Mari kita tambahkan kolom yang sama seperti sebelumnya menggunakan fungsi SQL google_columnar_engine_add.
Dalam sesi PSQL, jalankan:
SELECT google_columnar_engine_add(relation => 'insurance_producers_licensed_in_iowa', columns => 'city,expirydate,loa_has_ah');
Dan kita dapat memverifikasi hasilnya menggunakan tampilan g_columnar_columns yang sama:
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Output yang diharapkan:
quickstart_db=# SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns; relation_name | column_name | column_type | status | size_in_bytes --------------------------------------+-------------+-------------+--------+--------------- insurance_producers_licensed_in_iowa | city | text | Usable | 664231 insurance_producers_licensed_in_iowa | expirydate | timestamp | Usable | 212434 insurance_producers_licensed_in_iowa | loa_has_ah | text | Usable | 211734 (3 rows) Time: 0.692 ms quickstart_db=#
Anda dapat memverifikasi bahwa penyimpanan kolom digunakan dengan menjalankan kueri yang sama seperti sebelumnya dan memeriksa rencana eksekusi:
EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Keluar dari sesi psql:
exit
Jika memulai ulang penampung AlloyDB Omni, kita dapat melihat bahwa semua informasi kolom hilang.
Dalam sesi shell, jalankan:
sudo docker stop my-omni
sudo docker start my-omni
Tunggu 5-10 detik, lalu jalankan:
psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
Output yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns" relation_name | column_name | column_type | status | size_in_bytes ---------------+-------------+-------------+--------+--------------- (0 rows)
Untuk mengisi ulang kolom secara otomatis selama mulai ulang, kita dapat menambahkannya sebagai flag database ke parameter AlloyDB Omni. Kami menambahkan tanda google_columnar_engine.relations=‘quickstart_db.public.insurance_producers_licensed_in_iowa(city,expirydate,loa_has_ah)' dan memulai ulang penampung.
Dalam sesi shell, jalankan:
sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.relations=\'quickstart_db.public.insurance_producers_licensed_in_iowa\(city,expirydate,loa_has_ah\)\' >>/var/lib/postgresql/data/postgresql.conf"
sudo docker stop my-omni
sudo docker start my-omni
Setelah itu, kita dapat melihat bahwa kolom telah ditambahkan ke Columnar Store secara otomatis setelah dimulai.
Tunggu 5-10 detik, lalu jalankan:
psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
Output yang diharapkan:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns" relation_name | column_name | column_type | status | size_in_bytes --------------------------------------+-------------+-------------+--------+--------------- insurance_producers_licensed_in_iowa | city | text | Usable | 664231 insurance_producers_licensed_in_iowa | expirydate | timestamp | Usable | 212434 insurance_producers_licensed_in_iowa | loa_has_ah | text | Usable | 211734 (3 rows)
8. Membersihkan lingkungan
Sekarang kita dapat menghancurkan VM AlloyDB Omni
Hapus VM GCE
Di Cloud Shell, jalankan:
export GCEVM=omni01
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=omni01 export ZONE=us-central1-a gcloud compute instances delete $GCEVM \ --zone=$ZONE \ --quiet Deleted
9. Selamat
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Cara men-deploy AlloyDB Omni di VM GCE di Google Cloud
- Cara terhubung ke AlloyDB Omni
- Cara memuat data ke AlloyDB Omni
- Cara mengaktifkan Mesin Berbasis Kolom
- Cara memeriksa Mesin Kolom dalam mode Otomatis
- Cara mengisi Columnar Store secara manual
Anda dapat membaca selengkapnya tentang cara menggunakan Mesin Kolom di dokumentasi.
10. Survei
Output: