1. Giriş
Bu codelab'de, AlloyDB Omni'yi dağıtmayı ve sorguların performansını artırmak için Columnar Engine'i kullanmayı öğreneceksiniz.

Ön koşullar
- Google Cloud Console hakkında temel bilgiler
- Komut satırı arayüzü ve Google Shell'de temel beceriler
Neler öğreneceksiniz?
- AlloyDB Omni'yi Google Cloud'daki GCE VM'ye dağıtma
- AlloyDB Omni'ye bağlanma
- AlloyDB Omni'ye veri yükleme
- Columnar Engine nasıl etkinleştirilir?
- Otomatik modda Columnar Engine'i kontrol etme
- Sütunlu Depo'yu manuel olarak doldurma
Gerekenler
- Google Cloud hesabı ve Google Cloud projesi
- Chrome gibi bir web tarayıcısı
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlantı kurulması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarıyla birlikte gelir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
3. Başlamadan önce
API'yi etkinleştirme
Çıkış:
Cloud Shell'de proje kimliğinizin ayarlandığından emin olun:
PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
Beklenen çıktı
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) our active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$
Cloud Shell yapılandırmasında tanımlanmamışsa aşağıdaki komutları kullanarak ayarlayın.
export PROJECT_ID=<your project>
gcloud config set project $PROJECT_ID
Gerekli tüm hizmetleri etkinleştirin:
gcloud services enable compute.googleapis.com
Beklenen çıktı
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. GCE'de AlloyDB Omni'yi dağıtma
AlloyDB Omni'yi GCE'ye dağıtmak için uyumlu yapılandırma ve yazılıma sahip bir sanal makine hazırlamamız gerekir. AlloyDB Omni'yi Debian tabanlı bir VM'ye dağıtma örneğini burada bulabilirsiniz.
GCE sanal makinesi oluşturma
CPU, bellek ve depolama alanı için kabul edilebilir yapılandırmaya sahip bir sanal makine dağıtmamız gerekiyor. AlloyDB Omni veritabanı dosyalarını barındırmak için sistem diski boyutu 20 GB'a çıkarılmış varsayılan Debian görüntüsünü kullanacağız.
Başlatılan Cloud Shell'i veya Cloud SDK'nın yüklü olduğu bir terminali kullanabiliriz.
Tüm adımlar, AlloyDB Omni hızlı başlangıç kılavuzunda da açıklanmaktadır.
Dağıtımınız için ortam değişkenlerini ayarlayın.
export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01
Ardından, GCE VM'yi oluşturmak için gcloud'u kullanırız.
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
Beklenen konsol çıkışı:
student@cloudshell:~ (test-project-001-402417)$ export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01
student@cloudshell:~ (test-project-001-402417)$ 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/test-project-001-402417/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
student@cloudshell:~ (test-project-001-402417)$
AlloyDB Omni'yi yükleme
Oluşturulan sanal makineye bağlanın:
gcloud compute ssh omni01 --zone $ZONE
Beklenen konsol çıkışı:
student@cloudshell:~ (test-project-001-402417)$ 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. student@omni01:~$
Bağlı terminalinizde aşağıdaki komutu çalıştırın.
Sanal makineye Docker'ı yükleyin:
sudo apt update
sudo apt-get -y install docker.io
Beklenen konsol çıkışı(redaksiyonlu):
student@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) ... student@omni01:~$
Postgres kullanıcısı için şifre tanımlayın:
export PGPASSWORD=<your password>
AlloyDB Omni verileri için bir dizin oluşturun. Bu, isteğe bağlı ancak önerilen bir yaklaşımdır. Veriler varsayılan olarak Docker geçici dosya sistemi katmanı kullanılarak oluşturulur ve Docker kapsayıcısı silindiğinde her şey yok edilir. Ayrı tutmak, container'ları verilerinizden bağımsız olarak yönetmenize ve isteğe bağlı olarak daha iyi G/Ç özelliklerine sahip bir depolama alanına yerleştirmenize olanak tanır.
Kullanıcının ana dizininde, tüm verilerin yerleştirileceği bir dizin oluşturan komut aşağıda verilmiştir:
mkdir -p $HOME/alloydb-data
AlloyDB Omni container'ını dağıtın:
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
Beklenen konsol çıkışı(redaksiyonlu):
student@omni01:~$ export PGPASSWORD=StrongPassword student@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 student@omni01:~$
PostgreSQL istemci yazılımını sanal makineye yükleyin (isteğe bağlıdır, zaten yüklü olması beklenir):
sudo apt install -y postgresql-client
Beklenen konsol çıkışı:
student@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.
AlloyDB Omni'ye bağlanın:
psql -h localhost -U postgres
Beklenen konsol çıkışı:
student@omni01:~$ psql -h localhost -U postgres
WARNING: psql major version 15, server major version 17.
Some psql features might not work.
Type "help" for help.
postgres=#
AlloyDB Omni bağlantısını kesme:
exit
Beklenen konsol çıkışı:
postgres=# exit student@omni01:~$
5. Test veritabanı hazırlama
Sütun Motoru'nu test etmek için bir veritabanı oluşturup bu veritabanını bazı test verileriyle doldurmamız gerekir.
Veritabanı oluşturma
AlloyDB Omni VM'ye bağlanma ve veritabanı oluşturma
Cloud Shell oturumunda şunu çalıştırın:
AlloyDB Omni VM'ye bağlanın:
ZONE=us-central1-a
gcloud compute ssh omni01 --zone $ZONE
Beklenen konsol çıkışı:
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:~$
Oluşturulan SSH oturumunda şunu çalıştırın:
export PGPASSWORD=<your password>
psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db"
Beklenen konsol çıkışı:
student@omni01:~$ psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db" CREATE DATABASE student@omni01:~$
Örnek verilerle tablo oluşturma
Testlerimizde Iowa'da lisanslı sigorta üreticileriyle ilgili herkese açık verileri kullanacağız. Bu veri kümesini Iowa eyaletinin resmi web sitesinde (https://data.iowa.gov/catalog/dataset/669) bulabilirsiniz .
Öncelikle bir tablo oluşturmamız gerekir.
GCE sanal makinesinde şunu çalıştırın:
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,
city text,
state text,
zip_code int4,
first_active_date timestamp,
expiry_date timestamp,
business_phone text,
email text,
iowa_resident 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,
latitude text,
longitude text,
physical_location text,
address_line_2 text,
address_line_3 text
);"
Beklenen konsol çıkışı:
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:~$
Tabloya veri yükleyin.
GCE sanal makinesinde şunu çalıştırın:
curl -L https://idh-be.iowa.gov/api/v1/datasets/669/rows.csv | sed '$d' | psql -h localhost -U postgres -d quickstart_db -c "\copy insurance_producers_licensed_in_iowa from stdin csv header"
Beklenen konsol çıkışı:
otochkin@omni01:~$ curl -L https://idh-be.iowa.gov/api/v1/datasets/669/rows.csv | sed '$d' | 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 48.0M 0 48.0M 0 0 33.9M 0 --:--:-- 0:00:01 --:--:-- 33.9M
COPY 226772
otochkin@omni01:~$
Sigorta üreticileriyle ilgili 226.772 kaydı veritabanımıza yükledik ve bazı testler yapabiliriz. Veri kümesi günlük olarak güncellendiğinden satır sayısı sizde farklı olabilir.
Test Sorguları Çalıştırma
psql kullanarak quickstart_db'ye bağlanın ve sorgularımızın yürütme süresini ölçmek için zamanlamayı etkinleştirin.
GCE sanal makinesinde şunu çalıştırın:
psql -h localhost -U postgres -d quickstart_db
Beklenen konsol çıkışı:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db
psql (15.18 (Debian 15.18-0+deb12u1), server 17.7)
WARNING: psql major version 15, server major version 17.
Some psql features might not work.
Type "help" for help.
quickstart_db=#
PSQL oturumunda şunu çalıştırın:
\timing
Beklenen konsol çıkışı:
quickstart_db=# \timing Timing is on. quickstart_db=#
Kaza ve sağlık sigortası satan ve lisansı en az önümüzdeki 6 ay boyunca geçerli olan sigorta üreticilerinin sayısına göre ilk 5 şehri bulalım.
PSQL oturumunda şunu çalıştırın:
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Beklenen konsol çıkışı:
quickstart_db=# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
city | count
-------------+-------
TAMPA | 2159
OMAHA | 1527
MIAMI | 1293
KANSAS CITY | 1091
DALLAS | 1000
(5 rows)
Time: 90.492 ms
Güvenilir yürütme süresi elde etmek için tercihen birden fazla kez test sorgusu çalıştırın. Sonucu döndürme süresinin ortalama 94 ms olduğunu görüyoruz. Aşağıdaki adımlarda AlloyDB Columnar Engine'i etkinleştirip performansı iyileştirip iyileştiremeyeceğini göreceğiz.
psql oturumundan çıkın:
exit
6. Columnar Engine'i etkinleştirme
Şimdi AlloyDB Omni'mizde Sütun Yapılı Motor'u etkinleştirmemiz gerekiyor.
AlloyDB Omni parametrelerini güncelleme
AlloyDB Omni'miz için "google_columnar_engine.enabled" örnek parametresini "on" (açık) olarak değiştirmemiz gerekiyor ve bu işlem için yeniden başlatma yapılması gerekiyor.
/var/alloydb/config dizinindeki postgresql.conf dosyasını güncelleyin ve örneği yeniden başlatın.
GCE sanal makinesinde şunu çalıştırın:
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 restart my-omni
Beklenen konsol çıkışı:
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 restart my-omni my-omni student@omni01:~$
Sütun Motoru'nu doğrulama
psql kullanarak veritabanına bağlanın ve sütun motorunu doğrulayın.
AlloyDB Omni veritabanına bağlanma
Sanal makine SSH oturumunda veritabanına bağlanın:
psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled"
Komut, etkin sütun motorunu göstermelidir.
Beklenen konsol çıkışı:
student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled" google_columnar_engine.enabled -------------------------------- on (1 row)
7. Performans karşılaştırması
Artık sütunlu motor deposunu doldurabilir ve performansı doğrulayabiliriz.
Otomatik Sütunlu Depo Doldurma
Mağazayı dolduran iş varsayılan olarak saatte bir çalışır. Beklemeyi önlemek için bu süreyi 10 dakikaya düşüreceğiz.
GCE sanal makinesinde şunu çalıştırın:
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 restart my-omni
Beklenen çıktı:
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 restart my-omni my-omni
Ayarları doğrulama
GCE sanal makinesinde şunu çalıştırın:
psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;"
Beklenen çıktı:
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:~$
Sütun deposundaki nesneleri kontrol edin. Boş olmalıdır.
GCE sanal makinesinde şunu çalıştırın:
psql -h localhost -U postgres -d quickstart_db -c "SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;"
Beklenen çıktı:
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:~$
Veritabanına bağlanın ve daha önce çalıştırdığımız sorguyu birkaç kez çalıştırın.
GCE sanal makinesinde şunu çalıştırın:
psql -h localhost -U postgres -d quickstart_db
PSQL oturumunda.
Zamanlamayı etkinleştirme
\timing
Sorguyu birkaç kez çalıştırın:
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Beklenen çıktı:
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: 81.428 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: 82.608 ms
quickstart_db=#
10 dakika bekleyin ve insurance_producers_licensed_in_iowa tablosunun sütunlarının sütunlu depoya doldurulup doldurulmadığını kontrol edin.
SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
Beklenen çıktı:
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 | expiry_date quickstart_db | public | insurance_producers_licensed_in_iowa | loa_has_ah (3 rows) Time: 0.643 ms
Artık insurance_producers_licensed_in_iowa tablosu için sorguyu tekrar çalıştırabilir ve performansın iyileşip iyileşmediğini görebiliriz.
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Beklenen çıktı:
quickstart_db=# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
city | count
-------------+-------
TAMPA | 2159
OMAHA | 1527
MIAMI | 1293
KANSAS CITY | 1091
DALLAS | 1000
(5 rows)
Time: 11.757 ms
quickstart_db=# SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
city | count
-------------+-------
TAMPA | 2159
OMAHA | 1527
MIAMI | 1293
KANSAS CITY | 1091
DALLAS | 1000
(5 rows)
Time: 10.839 ms
Yürütme süresi 82 ms'den 11 ms'ye düştü. Herhangi bir iyileşme görmüyorsanız g_columnar_columns görünümünü kontrol ederek sütunların sütunlu depoya başarıyla doldurulup doldurulmadığını kontrol edebilirsiniz.
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Beklenen çıktı:
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 | 637312
insurance_producers_licensed_in_iowa | expiry_date | timestamp | Usable | 228356
insurance_producers_licensed_in_iowa | loa_has_ah | text | Usable | 227608
(3 rows)
Artık sorgu yürütme planının Columnar Engine'i kullanıp kullanmadığını doğrulayabiliriz.
PSQL oturumunda şunu çalıştırın:
EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Beklenen çıktı:
quickstart_db=# EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
quickstart_db-# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=2398.48..2398.49 rows=5 width=17) (actual time=10.018..10.021 rows=5 loops=1)
-> Sort (cost=2398.48..2411.61 rows=5252 width=17) (actual time=10.017..10.019 rows=5 loops=1)
Sort Key: (count(*)) DESC
Sort Method: top-N heapsort Memory: 25kB
-> HashAggregate (cost=2258.73..2311.25 rows=5252 width=17) (actual time=8.320..9.212 rows=7695 loops=1)
Group Key: city
Batches: 1 Memory Usage: 913kB
-> Append (cost=20.00..1762.13 rows=99320 width=9) (actual time=8.314..8.315 rows=8595 loops=1)
-> Custom Scan (columnar scan) on insurance_producers_licensed_in_iowa (cost=20.00..1758.11 rows=99319 width=9) (actual time=8.311..8.312 rows=8595 loops=1)
Filter: ((loa_has_ah = 'Yes'::text) AND (expiry_date > (now() + '6 mons'::interval)))
Rows Removed by Columnar Filter: 127723
Rows Aggregated by Columnar Scan: 99049
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 (expiry_date > (now() + '6 mons'::interval)))
Planning Time: 0.221 ms
Execution Time: 10.127 ms
(17 rows)
Time: 11.171 ms
Ayrıca, business_licenses tablosu segmentindeki "Seq Scan" işleminin hiçbir zaman yürütülmediğini ve bunun yerine "Custom Scan (columnar scan)" işleminin kullanıldığını görebiliyoruz. Bu sayede yanıt süresini 82 ms'den 11 ms'ye düşürdük.
Otomatik doldurulan içeriği sütunlu motordan temizlemek istiyorsak bunu google_columnar_engine_reset_recommendation SQL işlevini kullanarak yapabiliriz.
PSQL oturumunda şunu çalıştırın:
SELECT google_columnar_engine_reset_recommendation(drop_columns => true);
Bu işlem, doldurulmuş sütunları temizler. Bunu, daha önce gösterildiği gibi g_columnar_columns ve g_columnar_recommended_columns görünümlerinde doğrulayabilirsiniz.
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;
Beklenen çıktı:
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=#
Manuel Sütunlu Mağaza Doldurma
Sütunlu motor deposuna SQL işlevlerini kullanarak manuel olarak sütun ekleyebilir veya örnek başladığında otomatik olarak yüklemek için gerekli varlıkları örnek işaretlerinde belirtebiliriz.
google_columnar_engine_add SQL işlevini kullanarak daha önce eklediğimiz sütunları tekrar ekleyelim.
PSQL oturumunda şunu çalıştırın:
SELECT google_columnar_engine_add(relation => 'insurance_producers_licensed_in_iowa', columns => 'city,expiry_date,loa_has_ah');
Aynı g_columnar_columns görünümünü kullanarak sonucu doğrulayabiliriz:
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Beklenen çıktı:
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=#
Sütunlu mağazanın kullanıldığını doğrulamak için daha önce kullandığınız sorguyu çalıştırıp yürütme planını inceleyebilirsiniz:
EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
psql oturumundan çıkın:
exit
AlloyDB Omni kapsayıcısını yeniden başlattığımızda tüm sütun bilgileri kaybolur.
Kabuk oturumunda şunu çalıştırın:
sudo docker restart my-omni
5-10 saniye bekleyin ve şu komutu çalıştırın:
psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
Beklenen çıktı:
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)
Yeniden başlatma sırasında sütunların otomatik olarak yeniden doldurulması için bunları AlloyDB Omni parametrelerimize veritabanı işaretleri olarak ekleyebiliriz. google_columnar_engine.relations=‘quickstart_db.public.insurance_producers_licensed_in_iowa(city,expirydate,loa_has_ah)' işaretini ekliyor ve kapsayıcıyı yeniden başlatıyoruz.
Kabuk oturumunda şunu çalıştırın:
sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.relations=\'quickstart_db.public.insurance_producers_licensed_in_iowa\(city,expiry_date,loa_has_ah\)\' >>/var/lib/postgresql/data/postgresql.conf" && \
sudo docker restart my-omni
Ardından, başlatma işleminden sonra sütunların otomatik olarak Sütun Deposu'na eklendiğini görebiliriz.
5-10 saniye bekleyin ve şu komutu çalıştırın:
psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
Beklenen çıktı:
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 | 637312
insurance_producers_licensed_in_iowa | expiry_date | timestamp | Usable | 228356
insurance_producers_licensed_in_iowa | loa_has_ah | text | Usable | 227608
(3 rows)
8. Ortamı temizleme
Artık AlloyDB Omni VM'mizi yok edebiliriz.
GCE sanal makinesini silme
Cloud Shell'de şunu çalıştırın:
export GCEVM=omni01
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Beklenen konsol çıkışı:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=omni01
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Deleted
9. Tebrikler
Codelab'i tamamladığınız için tebrik ederiz.
İşlediğimiz konular
- AlloyDB Omni'yi Google Cloud'daki GCE VM'ye dağıtma
- AlloyDB Omni'ye bağlanma
- AlloyDB Omni'ye veri yükleme
- Columnar Engine nasıl etkinleştirilir?
- Otomatik modda Columnar Engine'i kontrol etme
- Sütunlu Depo'yu manuel olarak doldurma
Sütun Motoru ile çalışma hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
10. Anket
Çıkış: