Menggunakan Query Insights untuk meningkatkan performa kueri

Halaman ini menjelaskan cara menggunakan dasbor Query Insight untuk mendeteksi dan menganalisis masalah performa.

Pengantar

Query Insight membantu Anda mendeteksi, mendiagnosis, dan mencegah masalah performa kueri untuk database Cloud SQL. Layanan ini mendukung pemantauan intuitif dan menyediakan informasi diagnostik yang membantu Anda melakukan lebih dari sekadar deteksi untuk mengidentifikasi akar penyebab masalah performa.

Dengan Query Insight, Anda dapat memantau performa di tingkat aplikasi dan melacak sumber kueri yang bermasalah di seluruh stack aplikasi berdasarkan model, tampilan, pengontrol, rute, pengguna, dan host. Alat Query Insight dapat diintegrasikan dengan alat pemantauan aplikasi (APM) dan layanan Google Cloud yang sudah ada dengan menggunakan API dan standar terbuka. Dengan cara ini, Anda dapat memantau dan memecahkan masalah kueri dengan menggunakan alat favorit Anda.

Query Insight membantu Anda meningkatkan performa kueri Cloud SQL dengan memandu Anda melalui langkah-langkah berikut:

  1. Lihat pemuatan database untuk kueri teratas.
  2. Identifikasi kueri atau tag yang berpotensi bermasalah.
  3. Periksa kueri atau tag untuk mengidentifikasi masalah.
  4. Lacak sumber masalahnya.

Query Insights didukung di semua jenis mesin Cloud SQL dan tersedia di semua region Google Cloud.

Harga

Tidak ada biaya tambahan untuk Query Insight. Anda dapat mengakses data selama satu minggu di dasbor Query Insight.

Query Insight tidak menempati ruang penyimpanan apa pun di ruang penyimpanan instance Cloud SQL Anda. Metrik disimpan di Cloud Monitoring. Untuk permintaan API, lihat Harga Cloud Monitoring. Cloud Monitoring memiliki paket yang dapat Anda gunakan tanpa biaya tambahan.

Sebelum memulai

Untuk melihat rencana kueri atau melakukan pelacakan menyeluruh, Anda memerlukan izin IAM tertentu. Buat peran khusus dan tambahkan izin IAM cloudtrace.traces.get ke peran tersebut. Kemudian, tambahkan peran ini ke setiap akun pengguna yang perlu menggunakan Query Insight.

Untuk melihat paket kueri dan tampilan menyeluruhnya, project Google Cloud Anda harus mengaktifkan Trace API. Setelan ini memungkinkan project Google Cloud Anda menerima data trace dari sumber yang diautentikasi tanpa biaya tambahan. Data ini dapat membantu Anda mendeteksi dan mendiagnosis masalah performa pada instance.

Untuk memastikan bahwa Trace API telah diaktifkan, ikuti langkah-langkah berikut:

  1. Dari konsol Google Cloud, buka APIs and Services:

    Buka API dan Layanan

  2. Klik Aktifkan API dan Layanan.
  3. Di kotak penelusuran, masukkan Trace API.
  4. Jika API diaktifkan ditampilkan, berarti API ini aktif dan Anda tidak perlu melakukan apa pun. Jika tidak, klik Enable.

Aktifkan Insight kueri

Metrik Query Insight dienkripsi saat dalam penyimpanan. Pengguna yang memiliki akses ke dasbor Cloud SQL dapat mengakses metrik Query Insight di dasbor Query Insight. Jika memiliki izin untuk memperbarui instance, Anda dapat mengonfigurasi Query Insight. Untuk daftar izin yang diperlukan untuk instance Cloud SQL, lihat Kontrol akses project Cloud SQL. Jika Anda tidak memiliki izin ini dan ingin mengaktifkan Query Insight di instance, hubungi administrator Anda.

Konsol

Mengaktifkan Query Insight untuk instance
  1. Di Konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Overview instance, klik nama instance.
  3. Di kartu Configuration, klik Edit configuration.
  4. Di bagian Opsi konfigurasi, luaskan Query Insight.
  5. Centang kotak Aktifkan Query Insight.
  6. Opsional: Pilih satu atau beberapa opsi Query Insight berikut:

    Simpan alamat IP klien

    Default: false

    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.

    Simpan tag aplikasi

    Default: false

    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 kumpulan tag tertentu menggunakan library instrumentasi otomatis pemetaan relasional objek (ORM) open source sqlcommenter. Informasi ini membantu Query Insight mengidentifikasi sumber masalah dan MVC tempat masalah tersebut berasal. Jalur aplikasi membantu Anda dalam pemantauan aplikasi.

    Sesuaikan panjang kueri

    Default: 1024

    Menyetel batas panjang kueri ke nilai yang ditentukan dari 256 byte hingga 4500 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.

    Menetapkan frekuensi sampling maksimum

    Default: 5

    Menetapkan frekuensi sampling maksimum. Frekuensi sampling adalah jumlah sampel paket kueri yang dijalankan yang diambil per menit di semua database pada instance. Ubah nilai ini menjadi angka dari 0 (untuk menonaktifkan pengambilan sampel) ke 20. Meningkatkan frekuensi sampling kemungkinan akan memberi Anda lebih banyak titik data, tetapi dapat meningkatkan overhead performa.

  7. Klik Save.
Mengaktifkan Query Insight untuk beberapa instance
  1. Di Konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Klik menu Tindakan Lainnya di baris mana pun.
  3. Pilih Aktifkan Query Insight.
  4. Di kotak dialog, centang kotak Aktifkan Query Insight untuk beberapa instance .
  5. Klik Enable.
  6. Di kotak dialog berikutnya, pilih instance yang Query Insight-nya ingin Anda aktifkan.
  7. Klik Aktifkan Query Insight.

gcloud

Untuk mengaktifkan Query Insight untuk instance Cloud SQL menggunakan gcloud, jalankan gcloud sql instances patch dengan --insights-config-query-insights-enabled sebagai berikut setelah mengganti INSTANCE_ID dengan ID instance.

gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled
  

Selain itu, gunakan satu atau beberapa flag opsional berikut:

  • --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.

  • --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. Anda dapat melakukannya dengan menggunakan library instrumentasi otomatis pemetaan relasional objek (ORM) open source sqlcommenter. Informasi ini membantu Query Insight mengidentifikasi sumber masalah dan MVC tempat masalah tersebut berasal. Jalur aplikasi membantu Anda dalam pemantauan aplikasi.

  • --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.

  • --query_plans_per_minute

    Secara default, maksimum 5 sampel paket kueri yang dijalankan diambil per menit di semua database pada instance. Ubah nilai ini menjadi angka dari 0 (untuk menonaktifkan pengambilan sampel) ke 20. Meningkatkan frekuensi sampling kemungkinan akan memberi Anda lebih banyak titik data, tetapi dapat menambah overhead performa.

Ganti kode berikut:

  • INSIGHTS_CONFIG_QUERY_STRING_LENGTH: Panjang string kueri yang akan disimpan dalam byte.
  • API_TIER_STRING: Konfigurasi instance kustom yang akan digunakan untuk instance.
  • REGION: Region untuk instance.
gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled \
--insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH \
--query_plans_per_minute=QUERY_PLANS_PER_MINUTE \
--insights-config-record-application-tags \
--insights-config-record-client-address \
--tier=API_TIER_STRING \
--region=REGION
  

REST v1

Guna mengaktifkan Query Insight untuk instance Cloud SQL dengan menggunakan REST API, panggil metode instances.patch dengan setelan insightsConfig.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: Project ID.
  • instance-id: ID instance.

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true } }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON yang mirip seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Terraform

Agar dapat menggunakan Terraform untuk mengaktifkan Query Insight untuk instance Cloud SQL, tetapkan flag query_insights_enabled ke true. Selain itu, Anda dapat menggunakan satu atau beberapa flag opsional berikut:

  • query_string_length: Defaultnya adalah 1024 dan Anda dapat mengonfigurasinya ke nilai antara 256 dan 4500 dalam byte.
  • record_application_tags: Tetapkan nilai ke true jika Anda ingin merekam tag aplikasi dari kueri.
  • record_client_address: Tetapkan nilai ke true jika Anda ingin mencatat alamat IP klien.
  • query_plans_per_minute: Defaultnya adalah 5 dan Anda dapat mengonfigurasinya ke nilai antara 5 dan 20.
  • Berikut contohnya:
    resource "google_sql_database_instance" "INSTANCE_NAME" {
     name                = "INSTANCE_NAME"
     database_version    = "POSTGRESQL_VERSION"
     region              = "REGION"
     root_password       = "PASSWORD"
     deletion_protection = false # set to true to prevent destruction of the resource
     settings {
       tier = "DB_TIER"
       insights_config {
         query_insights_enabled  = true
         query_string_length     = 2048 # Optional
         record_application_tags = true # Optional
         record_client_address   = true # Optional
         query_plans_per_minute  = 10 # Optional
       }
     }
    }
    

    Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan angkah-langkah di bagian berikut.

    Menyiapkan Cloud Shell

    1. Luncurkan Cloud Shell.
    2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

      Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

    Menyiapkan direktori

    Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

    1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

      Salin kode contoh ke dalam main.tf yang baru dibuat.

      Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

    3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
    4. Simpan perubahan Anda.
    5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
      terraform init

      Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

      terraform init -upgrade

    Menerapkan perubahan

    1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
      terraform plan

      Koreksi konfigurasi jika diperlukan.

    2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
      terraform apply

      Tunggu hingga Terraform menampilkan pesan "Apply complete!".

    3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

    Metrik diharapkan akan tersedia di Query Insight dalam hitungan menit setelah penyelesaian kueri. Tinjau kebijakan retensi data Cloud Monitoring. Trace Query Insight disimpan di Cloud Trace. Tinjau kebijakan retensi data Cloud Trace.

    Melihat dasbor Query Insight

    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. Dasbor ini menyediakan serangkaian filter yang membantu Anda melihat pemuatan kueri.

    Untuk membuka dasbor Query Insight, ikuti langkah-langkah berikut:

    1. Untuk membuka halaman Overview instance, klik nama instance.
    2. Pilih tab Analisis kueri di panel navigasi sebelah kiri atau klik link Buka Query Insight untuk info lebih mendalam tentang kueri dan performa.

    Dasbor Query Insight akan terbuka. Ini menunjukkan informasi berikut tentang instance Anda:

    Menampilkan dasbor Query Insight, dengan menu drop-down
         untuk database, pengguna, dan alamat. Di sebelah kanan menu drop-down,
         terdapat filter untuk menyetel rentang waktu. Selain itu,
         grafik menunjukkan muatan database untuk kueri teratas. Di bagian bawah
         grafik, terdapat kotak pilihan untuk kapasitas CPU, CPU dan waktu
         tunggu CPU, Waktu tunggu IO, dan Waktu tunggu Kunci, serta tab masing-masing untuk kueri dan tag.
    • Database: Memfilter pemuatan kueri di database tertentu atau semua database.
    • Pengguna: Memfilter pemuatan kueri dari akun pengguna tertentu.
    • Alamat klien: Memfilter pemuatan kueri dari alamat IP tertentu.
    • Rentang waktu: Memfilter pemuatan kueri berdasarkan rentang waktu, seperti jam, hari, minggu, bulan, atau rentang kustom.
    • Database load graph: Menampilkan grafik pemuatan kueri, berdasarkan data yang difilter.
    • Kapasitas CPU, Waktu tunggu CPU dan CPU, Waktu tunggu IO, dan Waktu tunggu kunci: Filter dimuat berdasarkan opsi yang Anda pilih. Baca artikel Melihat pemuatan database untuk kueri teratas guna mengetahui detail tentang setiap filter ini.
    • Kueri dan tag. Filter kueri yang dimuat oleh kueri yang dipilih atau tag kueri SQL yang dipilih. Lihat Memfilter muatan database.

    Melihat muatan database untuk semua kueri

    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.

    Dasbor Query Insights tingkat atas menampilkan Pemuatan database — semua grafik kueri tingkat atas. Menu drop-down di dasbor memungkinkan Anda memfilter grafik untuk database, pengguna, atau alamat klien tertentu.

    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 dinding. 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.

    • 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 pengelompokkan informasi untuk waktu tunggu IO, Anda dapat melihatnya di Cloud Monitoring. Lihat Metrik Cloud SQL untuk informasi selengkapnya.

    • 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. Untuk melihat perincian informasi terkait waktu tunggu kunci, gunakan Cloud Monitoring. Lihat Metrik Cloud SQL untuk informasi selengkapnya.

    Tinjau grafik tersebut dan gunakan opsi pemfilteran untuk mempelajari pertanyaan-pertanyaan ini:

    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 baru sekarang atau sudah tinggi sejak lama? Gunakan pemilih rentang untuk memilih berbagai jangka waktu guna mengetahui berapa lama masalah berlangsung. Perbesar untuk melihat periode waktu saat lonjakan muatan kueri diamati. Perkecil untuk melihat rentang waktu hingga satu minggu.
    3. Apa yang menyebabkan muatannya tinggi? Anda dapat memilih opsi untuk memeriksa kapasitas CPU, Waktu tunggu CPU dan CPU, Waktu tunggu Kunci, atau IO. Grafik untuk setiap opsi ini memiliki warna yang berbeda, sehingga Anda dapat dengan mudah menemukan 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 menentukan 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 mengidentifikasi manakah yang menyebabkan pemuatan yang lebih tinggi.

    Memfilter muatan database

    Anda dapat memfilter pemuatan database berdasarkan kueri atau tag.

    Memfilter berdasarkan kueri

    Tabel Kueri 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 Insight. Fungsi ini mengurutkan kueri berdasarkan total waktu eksekusi selama 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 mengurutkan tabel, pilih judul kolom atau properti dari Filter kueri. Tabel menampilkan properti berikut:

    • Query: String kueri yang dinormalisasi. Query Insight 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 yang dapat Anda gunakan untuk memfilter kueri tertentu untuk menemukan muatan terbesar.

    • Rata-rata waktu eksekusi (md): Waktu rata-rata kueri untuk dieksekusi.

    • Waktu panggilan: Berapa kali aplikasi memanggil kueri.

    • Rata-rata baris yang ditampilkan: Jumlah rata-rata baris yang ditampilkan untuk kueri.

    Query Insights menyimpan dan menampilkan hanya kueri yang dinormalkan. Secara default, Query Insight tidak mengumpulkan alamat IP atau informasi tag. Anda dapat mengaktifkan Query Insight untuk mengumpulkan informasi ini dan, jika diperlukan, nonaktifkan pengumpulan. Trace paket kueri tidak mengumpulkan atau menyimpan nilai konstanta apa pun dan menghapus informasi PII yang mungkin ditampilkan konstanta tersebut.

    Untuk PostgreSQL 9.6 dan 10, Query Insights menampilkan kueri yang dinormalkan, yaitu, ? menggantikan nilai konstanta literal. Pada contoh berikut, nama konstan dihapus dan ? menggantikannya.

    UPDATE
      "demo_customer"
    SET
      "customer_id" = ?::uuid,
      "name" = ?,
      "address" = ?,
      "rating" = ?,
      "balance" = ?,
      "current_city" = ?,
      "current_location" = ?
    WHERE
      "demo_customer"."id" = ?
    

    Untuk PostgreSQL versi 11 dan yang lebih baru, $1, $2, dan seterusnya, ganti nilai konstanta literal.

    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
    

    Memfilter berdasarkan tag kueri

    Untuk memecahkan masalah aplikasi, Anda harus menambahkan tag ke kueri SQL terlebih dahulu. Tag pemuatan kueri memberikan rincian pemuatan kueri untuk tag yang dipilih dari waktu ke waktu.

    Query Insight 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 dengan logika bisnis atau microservice.

    Anda dapat memberi tag pada kueri berdasarkan logika bisnis, misalnya, tag pembayaran, inventaris, analisis bisnis, atau pengiriman. Selanjutnya, Anda dapat menemukan pemuatan kueri yang dibuat oleh berbagai logika bisnis. Misalnya, Anda mungkin mengamati peristiwa tak terduga, seperti lonjakan tag analisis bisnis pada pukul 13.00 atau pertumbuhan yang tidak normal untuk tren layanan pembayaran selama seminggu sebelumnya.

    Untuk menghitung Pemuatan database untuk tag, Query Insight menggunakan jumlah waktu yang dibutuhkan oleh setiap kueri yang menggunakan tag yang Anda pilih. Alat ini menghitung waktu penyelesaian pada batas menit menggunakan waktu dinding.

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

    Menampilkan dasbor Query Insight, dengan pemuatan tag dan daftar tag.

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

    • Tindakan, Pengontrol, Framework, Rute, Aplikasi, Driver DB: Setiap properti yang Anda tambahkan ke kueri akan muncul 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 untuk memfilter kueri tertentu guna menemukan muatan terbesar untuk setiap opsi.
    • Waktu eksekusi rata-rata (md): Waktu rata-rata untuk menjalankan kueri.
    • Rata-rata baris yang ditampilkan: Jumlah rata-rata baris yang ditampilkan untuk kueri.
    • Waktu panggilan: Berapa kali aplikasi memanggil 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 Kueri atau tab Tag:

    1. Untuk mengurutkan daftar dalam urutan menurun, klik header Muat menurut total waktu.
    2. Klik kueri atau tag di bagian atas daftar. Server tersebut memiliki muatan tertinggi dan memerlukan waktu lebih lama daripada yang lain.

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

    Memeriksa pemuatan kueri tertentu

    Dasbor untuk kueri yang dipilih akan muncul sebagai berikut:

    Menampilkan grafik muatan dan latensi database untuk
         kueri tertentu.

    Grafik Pemuatan database — kueri spesifik 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.

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

    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.

    Memeriksa pemuatan kueri yang diberi tag tertentu

    Dasbor untuk tag yang dipilih akan muncul sebagai berikut. Misalnya, jika semua kueri dari pembayaran microservice diberi tag sebagai payment, Anda dapat melihat jumlah pemuatan kueri yang sedang trending dengan melihat tag payment.

    Menampilkan grafik latensi dan pemuatan database di halaman untuk
         tag 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, Pengguna, dan Alamat klien ini.

    Memeriksa operasi dalam contoh paket kueri

    Paket 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. Anda dapat mengubah frekuensi pengambilan sampel paket kueri per menit. Lihat Mengaktifkan Query Insight.

    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).

    Secara default, panel di sebelah kanan menampilkan detail contoh paket kueri yang memerlukan waktu paling lama, seperti yang terlihat pada grafik Contoh paket kueri. Untuk melihat detail contoh paket kueri lainnya, klik lingkaran yang relevan pada grafik. Detail yang diperluas menampilkan model dari semua operasi di paket kueri. Setiap operasi menunjukkan latensi, baris yang ditampilkan, dan biaya operasi. Saat memilih operasi, Anda dapat melihat detail lebih lanjut, seperti blok hit bersama, jenis skema, loop, dan baris rencana.

    Paket kueri menunjukkan latensi dan biaya untuk setiap operasi yang
         dijalankan untuk kueri tersebut. Proses ini dimulai dengan agregat, yang menampilkan 48 baris,
         dengan latensi 31,06 md dan biaya. dari 296,34. Operasi berikutnya adalah
         loop susun bertingkat, yang dibagi menjadi loop susun bertingkat lainnya dan terwujud.
         Loop bertingkat dibagi menjadi loop susun bertingkat lainnya dan pemindaian indeks. Hal yang terwujud itu
         akan mengarah ke pemindaian urutan.

    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 latensi

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

    Gambar berikut menampilkan grafik pemuatan database pada persentil ke-50 untuk kueri tertentu dengan filter yang dipilih untuk kapasitas CPU, waktu tunggu CPU dan CPU, waktu tunggu IO, dan waktu tunggu Kunci.

    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 muatannya bisa lebih tinggi untuk kueri tersebut karena beberapa inti digunakan untuk menjalankan bagian dari kueri.

    Coba sederhanakan masalahnya dengan melihat pertanyaan-pertanyaan berikut:

    1. Apa yang menyebabkan muatannya tinggi? Pilih opsi untuk melihat kapasitas CPU, waktu tunggu CPU dan CPU, waktu tunggu I/O, atau waktu tunggu kunci.
    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? Ubah periode waktu guna mempelajari latensi historis untuk kueri yang dinormalisasi.

    Melacak sumber masalah

    Saat Anda menemukan area dan waktu saat muatan tertinggi, identifikasi sumber masalah dengan menggunakan pelacakan untuk melihat perincian lebih lanjut.

    Untuk membantu Anda mengidentifikasi sumber masalah tertentu, seperti model, tampilan, pengontrol, rute, host, atau pengguna, Query Insight menyediakan tampilan rekaman aktivitas aplikasi menyeluruh yang sesuai konteks. Tampilan ini membantu Anda memahami apa yang terjadi di Lapisan Database untuk permintaan tertentu, dan menemukan sumber kueri yang bermasalah berdasarkan model, tampilan, pengontrol, dan rute.

    Jika Anda mengaktifkan OpenCensus atau OpenTelemetry, informasi opencensus span akan dikirim ke database bersama dengan informasi tag di dalam komentar SQL singkat ini. Setiap trace dari aplikasi ke Cloud Logging ditautkan dengan trace paket kueri database untuk membantu mengidentifikasi sumber masalah.

    Klik tab End to end di layar Sample Query untuk melihat rekaman aktivitas dalam konteks.

    Pilih tag End-to-end untuk melihat informasi spesifik
         tentang tag tersebut. Ringkasan menunjukkan RPC dan Total Durasi dalam md untuk
         setiap operasi untuk tag tersebut.

    Untuk mengetahui klien dan pengguna yang menyebabkan masalah, gunakan tabel Alamat klien teratas dan Pengguna teratas untuk menemukan pemuatan yang paling tinggi. Anda dapat menambahkan pengguna atau alamat IP ke filter untuk menganalisis alamat pengguna atau klien tertentu lebih lanjut. Detail dalam tabel mencakup persentase muatan kueri, rata-rata waktu eksekusi dalam milidetik, dan waktu yang dipanggil.

    Gambar ini menunjukkan bahwa untuk alamat klien teratas, muatannya
         100%, waktu eksekusi rata-ratanya adalah 19,568 detik, dan waktu
         yang dipanggil adalah 1,226. Untuk pengguna teratas, postgres pengguna memiliki muatan 100%,
         memiliki waktu eksekusi rata-rata 19,568 milidetik, dan dipanggil 1,226
         kali.

    Anda dapat menggunakan Cloud Trace untuk melihat pelacakan menyeluruh untuk setiap langkah dalam paket kueri. Di dasbor Query Insight, klik link View in trace untuk membuka alat Cloud Trace. Grafik trace menampilkan semua trace yang telah dijalankan selama periode yang dipilih.

    Grafik trace menampilkan semua trace yang telah dijalankan selama
         periode yang dipilih, dalam hal ini memerlukan waktu satu jam. Halaman
         ini juga memiliki tabel yang menampilkan latensi, metode HTTP, URL, dan
         waktu saat trace run.cd

    Untuk mengetahui detailnya, lihat Menemukan dan melihat 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 atau manual.

    Menggunakan sqlcommenter dengan ORM

    Saat menggunakan ORM, 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 masalah ini, Query Insights menyediakan library open source yang disebut sqlcommenter. Library ini berguna bagi developer dan administrator yang menggunakan alat ORM untuk mendeteksi kode aplikasi yang menyebabkan masalah performa.

    Jika Anda menggunakan ORM dan sqlcommenter secara bersamaan, tag akan dibuat secara otomatis. Anda tidak perlu menambahkan atau mengubah kode dalam 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 dan dapat 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 alat ORM di sqlcommenter didukung untuk bahasa pemrograman berikut:

    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.

    Menggunakan sqlcommenter untuk menambahkan tag

    Jika tidak menggunakan ORM, Anda harus menambahkan tag atau komentar sqlcommenter secara manual dalam format komentar SQL yang benar ke kueri SQL. Anda juga 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.

    Menonaktifkan Query Insight

    Konsol

    Guna menonaktifkan Query Insight untuk instance Cloud SQL dengan menggunakan Konsol Google Cloud, ikuti langkah-langkah berikut:

    1. Di Konsol Google Cloud, buka halaman Instance Cloud SQL.

      Buka Instance Cloud SQL

    2. Untuk membuka halaman Overview instance, klik nama instance.
    3. Di kartu Configuration, klik Edit configuration.
    4. Di bagian Opsi konfigurasi, luaskan Query Insight.
    5. Hapus centang pada kotak Aktifkan Query Insight.
    6. Klik Save.

    gcloud

    Untuk menonaktifkan Query Insight untuk instance Cloud SQL menggunakan gcloud, jalankan gcloud sql instances patch dengan flag --no-insights-config-query-insights-enabled sebagai berikut, setelah mengganti INSTANCE_ID dengan ID instance.

    gcloud sql instances patch INSTANCE_ID \
    --no-insights-config-query-insights-enabled
      

    REST

    Untuk menonaktifkan Query Insight untuk instance Cloud SQL dengan menggunakan REST API, panggil metode instances.patch dengan queryInsightsEnabled yang ditetapkan ke false seperti berikut.

    Sebelum menggunakan salah satu data permintaan, buat pengganti berikut:

    • project-id: Project ID.
    • instance-id: ID instance.

    Metode HTTP dan URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Meminta isi JSON:

    {
      "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON yang mirip dengan berikut ini:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2021-01-28T22:43:40.009Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

    Langkah selanjutnya

    • Lihat Metrik Cloud SQL. String jenis metrik Query Insights dimulai dengan database/postgresql/insights.