1. Giriş
Bu codelab'de, sorguların performansını artırmak için AlloyDB Omni'yi nasıl dağıtacağınızı ve sütun motorunu nasıl kullanacağınızı öğreneceksiniz.
Ön koşullar
- Google Cloud Console hakkında temel düzeyde bilgi
- Komut satırı arayüzü ve Google Shell'de temel beceriler
Neler öğreneceksiniz?
- AlloyDB Omni'yi Google Cloud'daki GCE sanal makinesine dağıtma
- AlloyDB Omni'ye bağlanma
- AlloyDB Omni'ye veri yükleme
- Sütun Motoru'nu etkinleştirme
- Otomatik modda sütun motorunu kontrol etme
- Sütunlu depoyu manuel olarak doldurma
Gerekenler
- Google Cloud hesabı ve Google Cloud projesi
- Chrome gibi bir web tarayıcısı
2. Kurulum ve Gereksinimler
Kendine ait tempoda ortam oluşturma
- 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ının görünen adıdı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 değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir olsa da bu kod laboratuvarında bulutta ç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 sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:
Bu sanal makinede ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Hiç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
Cloud Shell yapılandırmasında tanımlanmadıysa 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 çıkış
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. AlloyDB Omni'yi GCE'ye dağıtma
AlloyDB Omni'yi GCE'de dağıtmak için uyumlu yapılandırma ve yazılıma sahip bir sanal makine hazırlamamız gerekir. AlloyDB Omni'nin Debian tabanlı bir sanal makineye nasıl dağıtılacağına dair bir örnek aşağıda verilmiştir.
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 disk boyutu 20 GB'a yükseltilmiş varsayılan Debian görüntüsünü kullanacağız.
Başlatılmış Cloud Shell'i veya Cloud SDK yüklü bir terminali kullanabiliriz.
Tüm adımlar AlloyDB Omni'nin hızlı başlangıç bölümünde de 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 sanal makinesini 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ışı:
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)$
AlloyDB Omni'yi yükleme
Oluşturulan sanal makineye bağlanın:
gcloud compute ssh omni01 --zone $ZONE
Beklenen konsol çıkışı:
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:~$
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ışı(düzenlendi):
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:~$
postgres kullanıcısı için şifreyi 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. Varsayılan olarak veriler, docker geçici dosya sistemi katmanı kullanılarak oluşturulur ve docker kapsayıcısı silindiğinde her şey yok edilir. Ayrı tutmak, kapsayıcı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.
Aşağıda, kullanıcının ana dizininde tüm verilerin yerleştirileceği bir dizin oluşturan bir komut verilmiştir:
mkdir -p $HOME/alloydb-data
AlloyDB Omni kapsayıcısı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ışı(düzenlendi):
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:~$
PostgreSQL istemci yazılımını sanal makineye yükleyin (isteğe bağlı, zaten yüklü olması beklenir):
sudo apt install -y postgresql-client
Beklenen konsol çıkışı:
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.
AlloyDB Omni'ye bağlanın:
psql -h localhost -U postgres
Beklenen konsol çıkışı:
gleb@omni01:~$ psql -h localhost -U postgres psql (15.6 (Debian 15.6-0+deb12u1), server 15.5) Type "help" for help. postgres=#
AlloyDB Omni bağlantısını kesme:
exit
Beklenen konsol çıkışı:
postgres=# exit gleb@omni01:~$
5. Test Veritabanı Hazırlama
Sütun Motoru'nu test etmek için bir veritabanı oluşturup bazı test verileriyle doldurmamız gerekir.
Veritabanı Oluşturma
AlloyDB Omni sanal makinesine bağlanma ve veritabanı oluşturma
Cloud Shell oturumunda şunları yürütün:
gcloud config set project $(gcloud config get-value project)
AlloyDB Omni sanal makinesine bağlanın:
ZONE=us-central1-a
gcloud compute ssh omni01 --zone $ZONE
Beklenen konsol çıkışı:
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:~$
Oluşturulan SSH oturumunda şunları yürütü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 veriler içeren bir tablo oluşturma
Testlerimizde Iowa'da Lisanslı Sigorta Üreticileriyle ilgili herkese açık verileri kullanacağız. Bu veri kümesini Iowa devlet kurumu web sitesinde bulabilirsiniz: https://data.iowa.gov/Regulation/Insurance-Producers-Licensed-in-Iowa/n4cc-vqyk/about_data .
Öncelikle bir tablo oluşturmamız gerekiyor.
GCE sanal makinesinde şunları yapı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,
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
);"
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 şunları yapın:
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"
Beklenen konsol çıkışı:
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:~$
Sigorta prodüktörleriyle ilgili 210898 kaydı veritabanımıza yükledik ve bazı testler yapabiliriz.
Test sorguları çalıştırma
psql kullanarak quickstart_db veritabanına bağlanın ve sorgularımızın yürütme süresini ölçmek için zamanlamayı etkinleştirin.
GCE sanal makinesinde şunları yapın:
psql -h localhost -U postgres -d quickstart_db
Beklenen konsol çıkışı:
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=#
PSQL oturumunda şunları yürütü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 prodüktörlerinin sayısına göre en iyi 5 şehri bulalım.
PSQL oturumunda şunları yürütün:
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;
Beklenen konsol çıkışı:
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
Güvenilir bir yürütme süresi elde etmek için tercihen birden fazla kez test sorgusu çalıştırın.Sonucu döndürmenin ortalama süresinin yaklaşık 94 ms olduğunu görebiliriz. Aşağıdaki adımlarda AlloyDB sütun motorunu etkinleştirecek ve performansı iyileştirip iyileştiremeyeceğine bakacağız.
psql oturumundan çıkın:
exit
6. Sütun Motoru'nu etkinleştirme
Şimdi AlloyDB Omni'mizde sütun motorunu etkinleştirmemiz gerekiyor.
AlloyDB Omni parametrelerini güncelleme
AlloyDB Omni için "google_columnar_engine.enabled" örnek parametresini "on" olarak değiştirmemiz ve yeniden başlatmamız gerekiyor.
/var/alloydb/config dizinindeki postgresql.conf dosyasını güncelleyin ve örneği yeniden başlatın.
GCE sanal makinesinde şunları yapı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 stop my-omni
sudo docker start 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 stop my-omni sudo docker start my-omni my-omni my-omni student@omni01:~$
Sütun Motoru'nu doğrulama
psql kullanarak veritabanına bağlanın ve sütunlu motoru 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ütunlu motoru gösterir.
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ırma
Artık sütunlu motor mağazasını doldurabilir ve performansı doğrulayabiliriz.
Otomatik Sütunlu Mağaza Doldurma
Mağazayı dolduran iş varsayılan olarak her saat çalışır. Bekleme süresini önlemek için bu süreyi 10 dakikaya indireceğiz.
GCE sanal makinesinde şunları yapı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 stop my-omni
sudo docker start my-omni
Beklenen çıktı şu şekildedir:
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:~$
Ayarları doğrulama
GCE sanal makinesinde şunları yapın:
psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;"
Beklenen çıkış:
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ütunlu Depo'daki nesneleri kontrol edin. Boş olmalıdır.
GCE sanal makinesinde şunları yapı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 çıkış:
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 şunları yapın:
psql -h localhost -U postgres -d quickstart_db
PSQL oturumunda.
Zamanlamayı etkinleştirin
\timing
Sorguyu birkaç kez çalıştırın:
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;
Beklenen çıkış:
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=#
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 çıkış:
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
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 expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
Beklenen çıkış:
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
Yürütme süresi 94 ms'den 14 ms'ye düştü. Herhangi bir iyileştirme 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 çıkış:
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)
Sorgu yürütme planının sütun motorunu kullanıp kullanmadığını doğrulayabiliriz.
PSQL oturumunda şunları yürütün:
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;
Beklenen çıkış:
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
Ayrıca, business_licenses tablo segmentinde "Seq Scan" işleminin hiçbir zaman yürütülmediğini ve bunun yerine "Özel Tarama (sütun taraması)"nın kullanıldığını görebiliriz. Bu sayede yanıt süresini 94 ms'den 12 ms'ye düşürdük.
Otomatik olarak doldurulan içeriği sütunlu motordan temizlemek isterseniz bunu google_columnar_engine_reset_recommendation SQL işlevini kullanarak yapabilirsiniz.
PSQL oturumunda şunları yürütün:
SELECT google_columnar_engine_reset_recommendation(drop_columns => true);
Bu işlem, doldurulan sütunları temizler. Daha önce gösterildiği gibi g_columnar_columns ve g_columnar_recommended_columns görünümlerinde bu işlemi 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 çıkış:
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 Depo Doldurma
SQL işlevlerini kullanarak sütunlu motor deposuna manuel olarak sütun ekleyebilir veya örnek başladığında otomatik olarak yüklenmeleri için örnek işaretlerinde gerekli öğeleri belirtebiliriz.
google_columnar_engine_add SQL işlevini kullanarak daha önce eklediğimiz sütunları ekleyelim.
PSQL oturumunda şunları yürütün:
SELECT google_columnar_engine_add(relation => 'insurance_producers_licensed_in_iowa', columns => 'city,expirydate,loa_has_ah');
Sonuçları aynı g_columnar_columns görünümünü kullanarak doğrulayabiliriz:
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
Beklenen çıkış:
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=#
Öncekiyle aynı sorguyu çalıştırıp yürütme planını inceleyerek sütun tabanlı depolamanın kullanıldığını doğrulayabilirsiniz:
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;
psql oturumundan çıkın:
exit
AlloyDB Omni kapsayıcısını yeniden başlatırsak tüm sütun bilgilerinin kaybolduğunu görebiliriz.
Kabuk oturumunda şunları yürütün:
sudo docker stop my-omni
sudo docker start my-omni
5-10 saniye bekleyip ş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 çıkış:
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ı otomatik olarak yeniden doldurmak için 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 şunları yürütün:
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
Ardından, sütunların başlatma işleminden sonra sütun deposuna otomatik olarak eklendiğini görebiliriz.
5-10 saniye bekleyip ş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 çıkış:
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. Ortamı temizleme
Artık AlloyDB Omni sanal makinemizi kaldırabiliriz.
GCE sanal makinesini silme
Cloud Shell'de şunları ç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 tebrikler.
Ele aldığımız konular
- AlloyDB Omni'yi Google Cloud'daki GCE sanal makinesine dağıtma
- AlloyDB Omni'ye bağlanma
- AlloyDB Omni'ye veri yükleme
- Sütun Motoru'nu etkinleştirme
- Otomatik modda sütun motorunu kontrol etme
- Sütunlu depolamayı manuel olarak doldurma
Sütun Motoru ile çalışma hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
10. Anket
Çıkış: