Meningkatkan performa kueri menggunakan insight kueri

Untuk mendeteksi dan menganalisis bottleneck performa kueri, memeriksa rencana kueri, dan melacak permintaan latensi tinggi di seluruh instance AlloyDB untuk PostgreSQL, Anda dapat menggunakan dasbor Query Insights. Untuk ringkasan fitur ini, lihat Ringkasan Query Insights.

Anda dapat menggunakan Gemini Cloud Assist untuk membantu memantau dan memecahkan masalah resource AlloyDB. Untuk mengetahui informasi selengkapnya, lihat Memantau dan memecahkan masalah dengan bantuan Gemini.

Sebelum memulai

Jika Anda atau pengguna lain perlu melihat rencana kueri atau melakukan pelacakan menyeluruh, Anda memerlukan izin Identity and Access Management (IAM) tertentu untuk melakukannya. Anda dapat membuat peran khusus dan menambahkan izin IAM yang diperlukan ke peran tersebut. Kemudian, Anda dapat menambahkan peran ini ke setiap akun pengguna yang menggunakan Query Insights untuk memecahkan masalah. Lihat Membuat peran khusus.

Peran khusus harus memiliki izin IAM berikut: cloudtrace.traces.get.

Membuka dasbor Query Insights

Untuk membuka dasbor Query Insights, lakukan langkah-langkah berikut:

  1. Dari daftar cluster dan instance, klik salah satu instance.
  2. Klik Buka Query Insight untuk info lebih mendalam tentang kueri dan performa di bawah grafik metrik di halaman Ringkasan cluster atau pilih tab Query Insight di panel navigasi sebelah kiri.

Di halaman berikutnya, Anda dapat menggunakan opsi berikut untuk memfilter hasil:

  1. Pemilih instance. Memungkinkan Anda memilih instance utama atau instance kumpulan baca di cluster. Secara default, instance utama dipilih. Detail yang ditampilkan digabungkan untuk semua instance kumpulan baca yang terhubung dan node-nya.
  2. Database. Memfilter pemuatan kueri di database tertentu atau semua database.
  3. Pengguna. Memfilter pemuatan kueri dari akun pengguna tertentu.
  4. Alamat klien. Memfilter pemuatan kueri dari alamat IP tertentu.
  5. Rentang waktu. Memfilter pemuatan kueri berdasarkan rentang waktu, seperti jam, hari, minggu, atau rentang kustom.
Dasbor Query Insights menyediakan pemilih instance dan menu drop-down untuk database, pengguna, dan alamat. Di sebelah kanan
            menu drop-down, terdapat filter untuk menyetel rentang waktu.

Mengedit konfigurasi Query Insights

Query Insights diaktifkan secara default di instance AlloyDB. Anda dapat mengedit konfigurasi Query Insights default.

Untuk mengedit konfigurasi Query Insights untuk instance AlloyDB, ikuti langkah-langkah berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Clusters.

    Buka Cluster

  2. Klik cluster di kolom Resource Name.

  3. Klik Query Insights di panel navigasi kiri.

  4. Pilih Primary atau Read pool dari daftar Query insights, lalu klik Edit.

  5. Edit kolom Query insights:

    1. Untuk mengubah batas default 1024 byte pada panjang kueri yang akan dianalisis AlloyDB, di kolom Query lengths, masukkan angka dari 256 hingga 4500.

      Instance akan dimulai ulang setelah Anda mengedit kolom ini.

      Catatan: Batas panjang kueri yang lebih tinggi memerlukan lebih banyak memori.

    2. Untuk menyesuaikan set fitur insight kueri, sesuaikan opsi berikut:

      • Pengambilan sampel rencana kueri: Centang kotak ini untuk memvisualisasikan operasi yang digunakan untuk menyelesaikan sampel rencana kueri. Frekuensi sampling menentukan jumlah maksimum kueri yang dapat diambil sampelnya oleh AlloyDB per menit untuk instance per node.

        Di kolom Frekuensi sampling maksimum, masukkan angka dari satu hingga 20. Secara default, frekuensi sampling ditetapkan ke 5. Untuk menonaktifkan pengambilan sampel, hapus centang pada kotak Pengambilan sampel rencana kueri.

      • Simpan alamat IP klien: Centang kotak ini untuk mengetahui dari mana kueri Anda berasal, dan untuk mengelompokkan informasi tersebut guna menjalankan metrik.

      • Simpan tag aplikasi: Centang kotak ini untuk mengetahui aplikasi yang diberi tag mana yang membuat permintaan, dan untuk mengelompokkan informasi tersebut guna menjalankan metrik. Untuk mengetahui informasi selengkapnya tentang tag aplikasi, lihat spesifikasi.

  6. Klik Update instance.

gcloud

Untuk mengaktifkan Query Insights untuk instance AlloyDB menggunakan perintah Google Cloud CLI, lakukan hal berikut:

  1. Instal Google Cloud CLI.
  2. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
    gcloud init
    
  3. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login
    

    Anda tidak perlu melakukannya jika menggunakan Cloud Shell.

    Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Berikut contohnya:

gcloud alloydb instances update INSTANCE \
--cluster=CLUSTER \
--project=PROJECT \
--region=REGION \
--insights-config-query-string-length=QUERY_LENGTH \
--insights-config-query-plans-per-minute=QUERY_PLANS \
--insights-config-record-application-tags \
--insights-config-record-client-address

Ganti kode berikut:

  • INSTANCE: ID instance yang akan diupdate
  • CLUSTER: ID cluster instance
  • PROJECT: ID project cluster
  • REGION: region cluster—misalnya, us-central1
  • QUERY_LENGTH: panjang kueri yang berkisar antara 256 hingga 4.500
  • QUERY_PLANS: jumlah rencana kueri yang akan dikonfigurasi per menit.

Selain itu, gunakan satu atau beberapa flag opsional berikut:

  • --insights-config-query-string-length: Menyetel batas panjang kueri default ke nilai yang ditentukan dari 256 hingga 4500 byte. Panjang kueri default adalah 1024 byte. Panjang kueri yang lebih tinggi lebih berguna untuk kueri analitis, tetapi juga memerlukan lebih banyak memori. Jika panjang kueri diubah, Anda harus memulai ulang instance. Anda masih dapat menambahkan tag ke kueri yang melebihi batas panjang.
  • --insights-config-query-plans-per-minute: Secara default, maksimum lima sampel rencana kueri yang dijalankan diambil per menit di semua database pada instance. Ubah nilai ini menjadi angka dari 1 hingga 20. Untuk menonaktifkan pengambilan sampel, masukkan 0. Meningkatkan frekuensi sampling kemungkinan akan memberi Anda lebih banyak titik data, tetapi dapat menambah overhead performa.
  • --insights-config-record-client-address: Menyimpan alamat IP klien tempat kueri berasal dan membantu Anda mengelompokkan data tersebut untuk menjalankan metrik pada kueri tersebut. Kueri berasal dari lebih dari satu host. Meninjau grafik kueri dari alamat IP klien dapat membantu mengidentifikasi sumber masalah. Jika Anda tidak ingin menyimpan alamat IP klien, gunakan --no-insights-config-record-client-address.
  • --insights-config-record-application-tags: Menyimpan tag aplikasi yang membantu Anda menentukan API dan rute pengontrol tampilan model (MVC) yang membuat permintaan dan mengelompokkan data untuk menjalankan metrik pada tag tersebut. Opsi ini mengharuskan Anda mengomentari kueri dengan sekumpulan tag tertentu. Jika Anda tidak ingin menyimpan tag aplikasi, gunakan --no-insights-config-record-application-tags.

Terraform

Untuk menggunakan Terraform guna mengonfigurasi Query Insights, gunakan resource google_alloydb_instance.

Berikut contohnya:

  query_insights_config {
    query_string_length = QUERY_STRING_LENGTH_VALUE
    record_application_tags = RECORD_APPLICATION_TAG_VALUE
    record_client_address = RECORD_CLIENT_ADDRESS_VALUE
    query_plans_per_minute = QUERY_PLANS_PER_MINUTE_VALUE5
  }
  

Ganti kode berikut:

  • QUERY_STRING_LENGTH_VALUE: panjang string kueri. Nilai defaultnya adalah 1024. Semua bilangan bulat antara 256 dan 4.500 valid.
  • RECORD_APPLICATION_TAG_VALUE: mencatat tag aplikasi untuk instance. Nilai defaultnya adalah true.
  • RECORD_CLIENT_ADDRESS_VALUE: mencatat alamat klien untuk instance. Nilai defaultnya adalah true.
  • QUERY_PLANS_PER_MINUTE_VALUE: jumlah paket eksekusi kueri yang diambil oleh Insights per menit untuk semua kueri yang digabungkan. Nilai defaultnya adalah 5. Bilangan bulat antara 0 dan 20 valid.

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    Contoh konfigurasi instance dengan konfigurasi query insights yang ditambahkan akan muncul sebagai berikut:

    resource "google_alloydb_instance" "instance_name" {
    provider = "google-beta"
    cluster       = google_alloydb_cluster.default.name
    instance_id   = "instance_id"
    instance_type = "PRIMARY"
    
    machine_config {
     cpu_count = 8
    }
    
    query_insights_config {
    query_string_length = 1024
    record_application_tags = false
    record_client_address = false
    query_plans_per_minute = 5
    }
    
    depends_on = [google_alloydb_instance.default]
    }
    

REST v1

Contoh ini mengonfigurasi setelan kemampuan observasi di instance AlloyDB Anda. Untuk mengetahui daftar lengkap parameter panggilan ini, lihat Metode: projects.locations.clusters.instances.patch.

Untuk mengonfigurasi setelan Query Insights, ubah kolom opsional sesuai kebutuhan. Untuk mengetahui daftar lengkap kolom untuk panggilan ini, lihat QueryInsightsInstanceConfig.

Sebelum menggunakan data permintaan apa pun, lakukan penggantian berikut:

  • CLUSTER_ID: ID cluster yang Anda buat. Nama harus diawali dengan huruf kecil dan dapat berisi huruf kecil, angka, dan tanda hubung.
  • PROJECT_ID: ID project tempat Anda ingin menempatkan cluster.
  • LOCATION_ID: ID region cluster.
  • INSTANCE_ID: nama instance utama yang ingin Anda buat.

Untuk mengubah konfigurasi instance, gunakan permintaan PATCH berikut:

PATCH https://alloydb.googleapis.com/v1beta/{instance.name=projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID?updateMask=observabilityConfig.enabled}

Isi JSON permintaan yang mengonfigurasi semua kolom kemampuan observasi terlihat seperti berikut:

{
  "queryStringLength": integer,
  "recordApplicationTags": boolean,
  "recordClientAddress": boolean,
  "queryPlansPerMinute": integer
}

Meningkatkan performa kueri

Query Insights memecahkan masalah kueri AlloyDB untuk mencari masalah performa. Dasbor Query Insight menampilkan pemuatan kueri berdasarkan faktor yang Anda pilih. Pemuatan kueri adalah pengukuran total pekerjaan untuk semua kueri dalam instance dalam rentang waktu yang dipilih.

Query Insights membantu Anda mendeteksi dan menganalisis masalah performa kueri. Untuk memecahkan masalah kueri dengan Query Insights, ikuti langkah-langkah berikut:

Melihat muatan database untuk semua kueri

Dasbor Query Insights tingkat atas menampilkan grafik Pemuatan database — semua kueri teratas menggunakan data yang difilter. Pemuatan kueri database adalah ukuran pekerjaan (dalam detik CPU) yang dilakukan oleh kueri yang dieksekusi di database yang dipilih dari waktu ke waktu. Setiap kueri yang berjalan menggunakan atau menunggu resource CPU, resource IO, atau resource kunci. Pemuatan kueri database adalah rasio jumlah waktu yang dibutuhkan oleh semua kueri yang diselesaikan dalam jangka waktu tertentu dibandingkan dengan waktu aktual.

Menampilkan grafik muatan database dengan muatan untuk kapasitas CPU, waktu tunggu CPU dan
         CPU, Waktu tunggu IO, dan Waktu tunggu Kunci.

Garis berwarna dalam grafik menunjukkan pemuatan kueri, yang dibagi menjadi empat kategori:

  • Kapasitas CPU: Jumlah CPU yang tersedia pada instance.
  • Waktu Tunggu CPU dan CPU: Rasio waktu yang dibutuhkan oleh kueri dalam status aktif terhadap waktu aktual. Waktu tunggu IO dan Kunci tidak memblokir kueri yang dalam status aktif. Metrik ini dapat berarti bahwa kueri menggunakan CPU atau menunggu penjadwal Linux untuk menjadwalkan proses server yang menjalankan kueri saat proses lain sedang menggunakan CPU.

    Catatan: Muatan CPU memperhitungkan runtime dan waktu menunggu penjadwal Linux menjadwalkan proses server yang sedang berjalan. Akibatnya, muatan CPU dapat melampaui garis inti maksimum.

  • Waktu Tunggu IO: Rasio waktu yang dibutuhkan oleh kueri yang menunggu IO dibandingkan waktu aktual. Waktu Tunggu IO mencakup Waktu Tunggu IO Baca dan Waktu Tunggu IO Tulis. Lihat tabel peristiwa PostgreSQL. Jika Anda ingin perincian informasi untuk waktu tunggu IO, Anda dapat melihatnya di Cloud Monitoring. Untuk mengetahui informasi selengkapnya, lihat diagram metrik.

  • Waktu Tunggu Kunci: Rasio waktu yang dibutuhkan oleh kueri yang menunggu kunci dibandingkan waktu aktual. Waktu Tunggu ini mencakup Waktu tunggu Kunci, LwLock, dan Buffer Pin Lock. Jika Anda ingin perincian informasi untuk waktu tunggu kunci, Anda dapat melihatnya di Cloud Monitoring. Untuk mengetahui informasi selengkapnya, lihat diagram metrik.

Selanjutnya, tinjau grafik tersebut dan gunakan opsi pemfilteran untuk menjawab pertanyaan berikut:

  1. Apakah pemuatan kuerinya tinggi? Apakah grafiknya melonjak atau meningkat seiring waktu? Jika Anda tidak melihat muatan yang tinggi, berarti masalahnya tidak ada pada kueri.
  2. Berapa lama muatannya telah tinggi? Apakah sekarang hanya tingginya? Atau sudah tinggi sejak lama? Gunakan pilihan rentang untuk memilih berbagai jangka waktu guna mengetahui berapa lama masalah telah terjadi. Atau, Anda dapat memperbesar untuk melihat periode waktu saat lonjakan muatan kueri diamati. Anda dapat memperkecil untuk melihat rentang waktu hingga satu minggu.
  3. Apa yang menyebabkan muatannya tinggi? Anda dapat memilih opsi untuk melihat kapasitas CPU, waktu tunggu CPU dan CPU, waktu tunggu kunci, atau waktu tunggu IO. Grafik untuk setiap opsi ini memiliki warna yang berbeda, sehingga Anda dapat melihat grafik yang memiliki muatan tertinggi. Garis biru tua pada grafik menunjukkan kapasitas CPU maksimum sistem. Hal ini memungkinkan Anda membandingkan muatan kueri dengan kapasitas sistem CPU maksimum. Perbandingan ini membantu Anda mengetahui apakah instance kehabisan resource CPU.
  4. Database mana yang mengalami pemuatan? Pilih berbagai database dari menu drop-down Databases untuk menemukan database yang memiliki muatan tertinggi.
  5. Apakah pengguna atau alamat IP tertentu menyebabkan pemuatan yang lebih tinggi? Pilih pengguna dan alamat yang berbeda dari menu drop-down untuk membandingkan mana yang menyebabkan pemuatan yang lebih tinggi.

Memfilter muatan database

Bagian Queries and tags memungkinkan Anda memfilter atau mengurutkan pemuatan kueri untuk kueri yang dipilih atau tag kueri SQL.

Memfilter berdasarkan kueri

Tabel QUERIES memberikan ringkasan kueri yang menyebabkan pemuatan kueri terbanyak. Tabel ini menampilkan semua kueri yang dinormalkan untuk jangka waktu dan opsi yang dipilih di dasbor Query Insights.

Secara default, tabel mengurutkan kueri berdasarkan total waktu eksekusi dalam periode waktu yang Anda pilih.

Menampilkan grafik muatan database dengan muatan untuk kueri, dengan
         filter yang dipilih untuk kapasitas CPU, waktu tunggu CPU dan
         CPU, Waktu Tunggu IO, dan Waktu Tunggu Kunci.

Untuk memfilter tabel, pilih properti dari Filter kueri. Untuk mengurutkan tabel, pilih judul kolom. Tabel menampilkan properti berikut:

  • String kueri. String kueri yang dinormalisasi. Query Insights hanya menampilkan 1024 karakter dalam string kueri secara default.

    Kueri berlabel UTILITY COMMAND biasanya menyertakan perintah BEGIN, COMMIT, dan EXPLAIN atau perintah wrapper.

  • Database. Database tempat kueri dijalankan.

  • Load by total time/Load by CPU/Load by IO wait/Load by lock wait. Opsi ini memungkinkan Anda memfilter kueri tertentu untuk menemukan beban terbesar untuk setiap opsi.

  • Waktu eksekusi rata-rata (md). Total waktu yang diperlukan semua subtugas di semua worker paralel untuk menyelesaikan kueri. Untuk mengetahui informasi selengkapnya, lihat Waktu dan durasi eksekusi rata-rata.

  • Waktu panggilan. Berapa kali kueri dipanggil oleh aplikasi.

  • Rata-rata baris yang diambil. Jumlah rata-rata baris yang diambil untuk kueri.

Query Insights menampilkan kueri yang dinormalkan, yaitu, $1, $2, dan seterusnya menggantikan nilai konstanta literal. Contoh:

UPDATE
  "demo_customer"
SET
  "customer_id" = $1::uuid,
  "name" = $2,
  "address" = $3,
  "rating" = $4,
  "balance" = $5,
  "current_city" = $6,
  "current_location" = $7
WHERE
  "demo_customer"."id" = $8

Nilai konstanta diabaikan sehingga Query Insights dapat menggabungkan kueri yang serupa dan menghapus informasi PII apa pun yang mungkin ditampilkan konstanta tersebut.

Memfilter berdasarkan tag kueri

Untuk memecahkan masalah aplikasi, Anda harus menambahkan tag ke kueri SQL terlebih dahulu.

Query Insights menyediakan pemantauan yang berfokus pada aplikasi untuk mendiagnosis masalah performa untuk aplikasi yang di-build menggunakan ORM.

Jika Anda bertanggung jawab atas seluruh stack aplikasi, Query Insight menyediakan pemantauan kueri dari tampilan aplikasi. Pemberian tag kueri membantu Anda menemukan masalah pada konstruksi tingkat yang lebih tinggi, seperti menggunakan logika bisnis, microservice, atau konstruksi lainnya. Anda dapat memberi tag pada kueri berdasarkan logika bisnis, misalnya, menggunakan tag pembayaran, inventaris, analisis bisnis, atau pengiriman. Kemudian, Anda dapat menemukan pemuatan kueri yang dibuat oleh berbagai jenis logika bisnis. Misalnya, Anda mungkin menemukan peristiwa tak terduga, seperti lonjakan tag analisis bisnis pada pukul 13.00. Atau, Anda mungkin melihat pertumbuhan yang tidak terduga untuk tren layanan pembayaran selama seminggu sebelumnya.

Tag pemuatan kueri memberikan rincian pemuatan kueri untuk tag yang dipilih dari waktu ke waktu.

Untuk menghitung Database Load for Tag, Query Insights menggunakan jumlah waktu yang dibutuhkan oleh setiap kueri yang menggunakan tag yang Anda pilih. Query Insights menghitung waktu penyelesaian pada batas menit menggunakan waktu dinding.

Di dasbor Query Insights, pilih TAGS untuk melihat tabel tag. Tabel TAGS mengurutkan tag berdasarkan total pemuatannya berdasarkan total waktu.

Gambar 5 menunjukkan dasbor Query Insights, dengan pemuatan tag.
         Di bawah grafik, terdapat daftar tag.

Anda dapat mengurutkan tabel dengan memilih properti dari Filter kueri, atau dengan mengklik judul kolom. Tabel menampilkan properti berikut:

  • Action, Controller, Framework, Route, Application, DB Driver. Setiap properti yang Anda tambahkan ke kueri akan ditampilkan sebagai kolom. Setidaknya salah satu dari properti ini harus ditambahkan jika Anda ingin memfilter menurut tag.
  • Load by total time/Load by CPU/Load by IO wait/Load by lock wait. Opsi ini memungkinkan Anda memfilter kueri tertentu untuk menemukan beban terbesar untuk setiap opsi.
  • Waktu eksekusi rata-rata (md). Total waktu yang diperlukan semua subtugas di semua worker paralel untuk menyelesaikan kueri. Untuk mengetahui informasi selengkapnya, lihat Waktu dan durasi eksekusi rata-rata.
  • Waktu panggilan. Berapa kali kueri dipanggil oleh aplikasi.
  • Rata-rata baris yang diambil. Jumlah rata-rata baris yang diambil untuk kueri.
  • Database. Database tempat kueri dijalankan.

Memeriksa kueri atau tag tertentu

Untuk menentukan apakah kueri atau tag adalah akar penyebab masalah, lakukan hal berikut dari tab Queries atau tab Tags:

  1. Klik header Load by total time untuk mengurutkan daftar dalam urutan menurun.
  2. Klik kueri atau tag yang tampaknya memiliki beban tertinggi dan memerlukan waktu lebih lama daripada yang lain.

Dasbor akan terbuka dan menampilkan detail kueri atau tag yang dipilih.

Jika Anda memilih kueri, ringkasan kueri yang dipilih akan ditampilkan:

Menampilkan versi kueri yang dipilih yang dipotong.

Jika Anda memilih tag, ringkasan tag yang dipilih akan ditampilkan.

Memeriksa beban untuk kueri atau tag tertentu

Grafik Database load — specific query menunjukkan ukuran pekerjaan (dalam detik CPU) yang telah dilakukan kueri yang dinormalkan dalam kueri yang dipilih dari waktu ke waktu. Untuk menghitung muatan, metode ini menggunakan jumlah waktu yang dibutuhkan oleh kueri yang dinormalisasi dan diselesaikan pada batas menit hingga waktu dinding. Di bagian atas tabel, 1024 karakter pertama dari kueri yang dinormalisasi (dengan literal yang dihapus karena alasan agregasi dan PII) akan ditampilkan. Seperti grafik kueri total, Anda dapat memfilter muatan untuk kueri tertentu berdasarkan Database, User, dan Client Address. Muatan kueri dibagi menjadi kapasitas CPU, Waktu tunggu CPU dan CPU, Waktu tunggu IO, dan Waktu tunggu Kunci.

Menampilkan grafik muatan dan latensi database untuk
         kueri tertentu.

Grafik Pemuatan database — tag spesifik menunjukkan ukuran kerja (dalam detik CPU) yang dilakukan kueri yang cocok dengan tag yang dipilih di database yang Anda pilih dari waktu ke waktu. Seperti grafik kueri total, Anda dapat memfilter pemuatan untuk tag tertentu menurut Database, User, dan Client Address.

Menampilkan grafik muatan dan latensi database untuk
         kueri tertentu.

Memeriksa latensi

Anda menggunakan grafik Latensi untuk memeriksa latensi pada kueri atau tag. Latensi adalah waktu yang dibutuhkan oleh kueri yang dinormalkan untuk menyelesaikan proses dalam waktu aktual. Dasbor latensi menampilkan latensi persentil ke-50, ke-95, dan ke-99 untuk menemukan perilaku pencilan.

Menampilkan grafik latensi kueri untuk kueri tertentu
         dengan filter yang dipilih untuk kapasitas CPU, Waktu tunggu CPU dan CPU,
         Waktu tunggu IO, dan Waktu tunggu Kunci.

Latensi Kueri Paralel diukur dalam waktu aktual meskipun muatan kueri bisa lebih tinggi untuk kueri tersebut karena beberapa inti digunakan untuk menjalankan bagian dari kueri.

Coba sederhanakan masalahnya dengan melihat hal-hal berikut:

  1. Apa yang menyebabkan muatannya tinggi? Pilih opsi untuk melihat kapasitas CPU, waktu tunggu CPU dan CPU, waktu tunggu kunci, atau waktu tunggu IO.
  2. Berapa lama muatannya telah tinggi? Apakah sekarang hanya tingginya? Atau sudah tinggi sejak lama? Ubah rentang waktu untuk menemukan tanggal dan waktu saat muatannya mulai berperforma buruk.
  3. Apakah ada lonjakan latensi? Anda dapat mengubah periode waktu guna mempelajari latensi historis untuk kueri yang dinormalisasi.

Saat Anda menemukan area dan waktu untuk beban tertinggi, Anda dapat melihat perincian lebih lanjut.

Memeriksa latensi di seluruh cluster

Anda menggunakan grafik P99 latency on the same query across the cluster untuk memeriksa latensi P99 pada kueri atau tag di seluruh instance dalam cluster.

Menampilkan grafik latensi kueri untuk kueri tertentu
         dengan filter yang dipilih untuk kapasitas CPU, Waktu tunggu CPU dan CPU,
         Waktu tunggu IO, dan Waktu tunggu Kunci.

Memeriksa operasi dalam contoh rencana kueri

Rencana kueri mengambil sampel kueri Anda dan menguraikannya menjadi operasi individual. Argumen ini menjelaskan dan menganalisis setiap operasi dalam kueri. Grafik Contoh paket kueri menampilkan semua paket kueri yang berjalan pada waktu tertentu dan jumlah waktu yang diperlukan untuk menjalankan setiap rencana.

Menampilkan grafik untuk contoh rencana kueri, dengan waktu saat paket
         dijalankan di bagian bawah grafik (sumbu x), dan jumlah detik
         yang dijalankan di sebelah kanan (sumbu y).

Untuk melihat detail contoh rencana kueri, klik titik pada grafik Sample query plans. Ada tampilan contoh rencana kueri yang dijalankan untuk sebagian besar, tetapi tidak semua, kueri. Perhatikan bahwa AlloyDB untuk PostgreSQL mengambil sampel kueri secara otomatis. Makin sering kueri dijalankan, makin besar kemungkinan kueri tersebut dijadikan sampel. Jika Anda perlu melihat lebih banyak contoh rencana kueri, ikuti petunjuk di mengedit konfigurasi Query Insights untuk meningkatkan Frekuensi sampling maksimum.

Saat melihat detail yang diperluas dari rencana kueri, Anda akan melihat model dari semua operasi dalam rencana tersebut. Setiap operasi menunjukkan latensi, baris yang ditampilkan, dan biaya untuk operasi tersebut. Saat memilih operasi, Anda dapat melihat detail lebih lanjut, seperti blok hit bersama, jenis skema, loop aktual, baris rencana, dan lainnya.

Paket kueri menunjukkan latensi dan biaya untuk setiap operasi yang
         dijalankan untuk kueri tersebut.

Coba sederhanakan masalahnya dengan melihat pertanyaan-pertanyaan berikut:

  1. Berapa konsumsi resource?
  2. Bagaimana kaitannya dengan kueri lain?
  3. Apakah konsumsi berubah dari waktu ke waktu?

Memeriksa trace yang dihasilkan oleh kueri contoh

Selain melihat contoh rencana kueri, Anda dapat menggunakan Query Insights untuk melihat rekaman aktivitas aplikasi menyeluruh dalam konteks untuk contoh kueri. Trace ini dapat membantu Anda mengidentifikasi sumber kueri yang bermasalah dengan menampilkan aktivitas database untuk permintaan tertentu. Selain itu, entri log yang dikirim aplikasi ke Cloud Logging selama permintaan ditautkan ke trace, yang membantu Anda dalam penyelidikan.

Untuk melihat trace dalam konteks, lakukan hal berikut:

  1. Di panel Sample Query, klik tab End-to-end Trace. Tab ini menampilkan diagram Gantt yang menjelaskan span, yang merupakan kumpulan data operasi individual, untuk trace yang dihasilkan oleh kueri.

  2. Untuk melihat detail selengkapnya tentang setiap span, seperti atribut dan metadata, klik span.

Anda juga dapat melihat trace di halaman Trace Explorer. Untuk melakukannya, klik View in Cloud Trace. Untuk mengetahui detail tentang cara menggunakan halaman Trace Explorer untuk menjelajahi data trace, lihat Menemukan dan menjelajahi trace.

Menambahkan tag ke kueri SQL

Pemberian tag pada kueri SQL menyederhanakan pemecahan masalah aplikasi. Anda dapat menggunakan sqlcommenter untuk menambahkan tag ke kueri SQL secara otomatis menggunakan Pemetaan relasional objek (ORM) atau secara manual.

Menggunakan sqlcommenter dengan ORM

Saat ORM digunakan, bukan menulis kueri SQL secara langsung, Anda mungkin tidak menemukan kode aplikasi yang menyebabkan tantangan performa. Anda mungkin juga mengalami kesulitan dalam menganalisis pengaruh kode aplikasi terhadap performa kueri. Untuk mengatasi poin masalah tersebut, Query Insights menyediakan library open source yang disebut sqlcommenter, yaitu library instrumentasi ORM. Library ini berguna bagi developer yang menggunakan ORM dan administrator untuk mendeteksi kode aplikasi yang menyebabkan masalah performa.

Jika Anda menggunakan ORM dan sqlcommenter secara bersamaan, tag akan dibuat secara otomatis tanpa mengharuskan Anda mengubah atau menambahkan kode kustom ke aplikasi.

Anda dapat menginstal sqlcommenter di server aplikasi. Dengan library instrumentasi, informasi aplikasi yang terkait dengan framework MVC Anda dapat disebarkan ke database bersama dengan kueri sebagai komentar SQL. Database akan mengambil tag ini dan mulai mencatat serta menggabungkan statistik berdasarkan tag, yang bersifat ortogonal terhadap statistik yang digabungkan oleh kueri yang dinormalisasi. Query Insight menampilkan tag agar Anda mengetahui aplikasi mana yang menyebabkan pemuatan kueri. Informasi ini membantu Anda menemukan kode aplikasi yang menyebabkan masalah performa.

Ketika Anda memeriksa hasil dalam log database SQL, hasil tersebut akan muncul sebagai berikut:

SELECT * from USERS /*action='run+this',
controller='foo%3',
traceparent='00-01',
tracestate='rojo%2'*/

Tag yang didukung mencakup nama, rute, framework, dan tindakan pengontrol.

Kumpulan ORM di sqlcommenter didukung untuk berbagai bahasa pemrograman:

Python
  • Django
  • psycopg2
  • Sqlalchemy
  • Flask
Java
  • Hibernasi
  • Musim semi
Ruby
  • Rails
Node.js
  • Knex.js
  • Sequelize.js
  • Express.js

Untuk mengetahui informasi selengkapnya tentang sqlcommenter dan cara menggunakannya dalam framework ORM, lihat dokumentasi sqlcommenter di GitHub.

Menggunakan sqlcommenter untuk menambahkan tag secara manual

Jika tidak menggunakan ORM, Anda harus menambahkan tag sqlcommenter secara manual ke kueri SQL. Dalam kueri, Anda harus meningkatkan setiap pernyataan SQL dengan komentar yang berisi pasangan nilai kunci serial. Gunakan minimal salah satu kunci berikut:

  • action=''
  • controller=''
  • framework=''
  • route=''
  • application=''
  • db driver=''

Query Insight akan menghapus semua kunci lainnya. Lihat dokumentasi sqlcommenter untuk mengetahui format komentar SQL yang benar.

Waktu dan durasi eksekusi

Query Insights memberikan metrik Avg execution time (ms), yang melaporkan total waktu yang diperlukan semua sub-tugas di semua worker paralel untuk menyelesaikan kueri. Metrik ini dapat membantu Anda mengoptimalkan pemanfaatan resource gabungan database dengan menemukan dan mengoptimalkan kueri yang membuat overhead CPU tertinggi.

Untuk melihat waktu yang berlalu, Anda dapat mengukur durasi kueri dengan menjalankan perintah \timing di klien psql. Metrik ini mengukur waktu yang berlalu antara penerimaan kueri dan pengiriman respons oleh server PostgreSQL. Metrik ini dapat membantu Anda menganalisis alasan kueri tertentu memerlukan waktu terlalu lama, dan memutuskan apakah akan mengoptimalkannya agar berjalan lebih cepat.

Jika kueri diselesaikan dengan thread tunggal oleh satu tugas, durasi dan waktu eksekusi rata-rata akan tetap sama.

Mengaktifkan fitur insight kueri lanjutan untuk AlloyDB

Fitur insight kueri lanjutan untuk dasbor AlloyDB terintegrasi dalam dasbor Query Insights standar. Untuk mengetahui informasi selengkapnya tentang cara mengaktifkan fitur insight kueri lanjutan, lihat Meningkatkan performa kueri menggunakan fitur insight kueri lanjutan.

Langkah berikutnya