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:
- Lihat pemuatan database untuk kueri teratas.
- Identifikasi kueri atau tag yang berpotensi bermasalah.
- Periksa kueri atau tag untuk mengidentifikasi masalah.
- 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:
- Dari konsol Google Cloud, buka APIs and Services:
- Klik Aktifkan API dan Layanan.
- Di kotak penelusuran, masukkan
Trace API
. - 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
-
Di Konsol Google Cloud, buka halaman Instance Cloud SQL.
- Untuk membuka halaman Overview instance, klik nama instance.
- Di kartu Configuration, klik Edit configuration.
- Di bagian Opsi konfigurasi, luaskan Query Insight.
- Centang kotak Aktifkan Query Insight.
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.
- Klik Save.
-
Di Konsol Google Cloud, buka halaman Instance Cloud SQL.
- Klik menu Tindakan Lainnya di baris mana pun.
- Pilih Aktifkan Query Insight.
- Di kotak dialog, centang kotak Aktifkan Query Insight untuk beberapa instance .
- Klik Enable.
- Di kotak dialog berikutnya, pilih instance yang Query Insight-nya ingin Anda aktifkan.
- 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
. 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
- Luncurkan Cloud Shell.
-
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).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
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
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- 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:
- Untuk membuka halaman Overview instance, klik nama instance.
- 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:
- 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.
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:
- Apakah pemuatan kuerinya tinggi? Apakah grafiknya melonjak atau meningkat seiring waktu? Jika Anda tidak melihat muatan yang tinggi, berarti masalahnya tidak ada pada kueri.
- 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.
- 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.
- Database mana yang mengalami pemuatan? Pilih berbagai database dari menu drop-down Databases untuk menemukan database yang memiliki muatan tertinggi.
- 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.
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 perintahBEGIN
,COMMIT
, danEXPLAIN
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.
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:
- Untuk mengurutkan daftar dalam urutan menurun, klik header Muat menurut total waktu.
- 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:
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.
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
.
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.
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.
Coba sederhanakan masalahnya dengan melihat pertanyaan-pertanyaan berikut:
- Berapa konsumsi resource?
- Bagaimana kaitannya dengan kueri lain?
- 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.
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:
- Apa yang menyebabkan muatannya tinggi? Pilih opsi untuk melihat kapasitas CPU, waktu tunggu CPU dan CPU, waktu tunggu I/O, atau waktu tunggu kunci.
- 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.
- 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.
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.
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.
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 |
|
Java |
|
Ruby |
|
Node.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:
-
Di Konsol Google Cloud, buka halaman Instance Cloud SQL.
- Untuk membuka halaman Overview instance, klik nama instance.
- Di kartu Configuration, klik Edit configuration.
- Di bagian Opsi konfigurasi, luaskan Query Insight.
- Hapus centang pada kotak Aktifkan Query Insight.
- 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
.
- Blog: Tingkatkan keterampilan pemecahan masalah performa kueri Anda dengan Insight Cloud SQL
- Video: Memperkenalkan Cloud SQL Insight
- Podcast: Cloud SQL Insight
- Codelab Insight
- Blog: Memperkenalkan Sqlcommenter: Library instrumentasi otomatis ORM open source
- Blog: Mengaktifkan pemberian tag kueri dengan Sqlcommenter