Menganalisis performa kueri

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

Ringkasan insight kueri

Insight kueri membantu Anda mendeteksi dan mendiagnosis masalah performa kueri dan pernyataan DML (INSERT, UPDATE, dan DELETE) untuk database Spanner. Layanan ini mendukung pemantauan intuitif dan memberikan informasi diagnostik yang membantu Anda melakukan lebih dari sekadar deteksi untuk mengidentifikasi penyebab utama masalah performa.

Insight kueri membantu Anda meningkatkan performa kueri Spanner dengan memandu Anda melalui langkah-langkah berikut:

  1. Tentukan apakah kueri yang tidak efisien menyebabkan pemakaian CPU yang tinggi.
  2. Identifikasi kueri atau tag yang berpotensi bermasalah.
  3. Analisis kueri atau tag permintaan untuk mengidentifikasi masalah.

Insight kueri tersedia dalam konfigurasi satu region dan multi-region.

Harga

Tidak ada biaya tambahan untuk Query Insight.

Retensi data

Insight kueri menyimpan data selama maksimum 30 hari. Untuk grafik Total Penggunaan CPU (per tag Kueri atau Permintaan), Spanner mengambil data dari tabel SPANNER_SYS.QUERY_STATS_TOP_*. Tabel ini memiliki retensi maksimum 30 hari. Lihat Retensi data untuk mempelajari lebih lanjut.

Peran yang diperlukan

Anda memerlukan peran dan izin IAM yang berbeda, bergantung pada apakah Anda adalah pengguna IAM atau pengguna kontrol akses terperinci.

Pengguna Identity and Access Management (IAM)

Untuk mendapatkan izin yang diperlukan untuk melihat halaman Insight kueri, minta administrator untuk memberi Anda peran IAM berikut pada instance:

Izin berikut dalam peran Cloud Spanner Database Reader(roles/spanner.databaseReader) diperlukan untuk melihat halaman Insight kueri:

  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.select
  • spanner.sessions.create

Pengguna kontrol akses yang sangat terperinci

Jika Anda adalah pengguna kontrol akses terperinci, pastikan Anda:

  • Memiliki peran Cloud Spanner Viewer(roles/spanner.viewer)
  • Memiliki hak istimewa kontrol akses terperinci dan diberi peran sistem spanner_sys_reader atau salah satu peran anggotanya.
  • Pilih spanner_sys_reader atau peran anggota sebagai peran sistem Anda saat ini di halaman ringkasan database.

Untuk mengetahui informasi selengkapnya, lihat Tentang kontrol akses terperinci dan Peran sistem kontrol akses terperinci.

Dasbor Query Insight

Dasbor Query Insight menampilkan pemuatan kueri berdasarkan database dan rentang waktu yang Anda pilih. Pemuatan kueri adalah pengukuran total pemakaian CPU untuk semua kueri dalam instance dalam rentang waktu yang dipilih. Dasbor ini menyediakan serangkaian filter yang membantu Anda melihat beban kueri.

Untuk melihat dasbor Query Insight untuk database, lakukan tindakan berikut:

  1. Pilih Analisis kueri di panel navigasi kiri. Dasbor Query Insight akan terbuka.
  2. Pilih database dari daftar Database. Dasbor menampilkan informasi beban kueri untuk database.

Area dasbor meliputi:

  1. Daftar database: Memfilter pemuatan kueri di database tertentu atau semua database.
  2. Filter rentang waktu: Memfilter pemuatan kueri berdasarkan rentang waktu, seperti jam, hari, atau rentang kustom.
  3. Grafik Total Penggunaan CPU (Semua kueri): Menampilkan beban gabungan semua kueri.
  4. Grafik Total Pemakaian CPU (per tag Kueri atau Permintaan): Menampilkan pemakaian CPU menurut setiap tag kueri atau permintaan.
  5. Tabel kueri dan tag TopN: Menampilkan daftar kueri teratas dan tag permintaan yang diurutkan berdasarkan pemakaian CPU. Lihat Mengidentifikasi kueri atau tag yang berpotensi bermasalah.

Dasbor Query Insight

Performa dasbor

Gunakan parameter kueri atau beri tag pada kueri Anda untuk mengoptimalkan performa Insight kueri. Jika Anda tidak membuat parameter atau memberi tag pada kueri, terlalu banyak hasil yang mungkin ditampilkan, yang dapat menyebabkan tabel kueri dan tag TopN tidak dimuat dengan benar.

Mengonfirmasi apakah kueri yang tidak efisien menyebabkan pemakaian CPU yang tinggi

Total Penggunaan CPU adalah ukuran pekerjaan (dalam detik CPU) yang dilakukan kueri yang dieksekusi di database yang dipilih dari waktu ke waktu.

Total pemakaian CPU untuk semua kueri

Tinjau grafik untuk mempelajari pertanyaan-pertanyaan ini:

  • Database mana yang mengalami pemuatan? Pilih berbagai database dari daftar Database untuk menemukan database dengan muatan tertinggi. Untuk mengetahui database mana yang memiliki beban tertinggi, Anda juga dapat meninjau diagram Penggunaan CPU - total untuk database di konsolGoogle Cloud .

    Muatan database

  • Apakah pemakaian CPU tinggi? Apakah grafiknya melonjak atau meningkat seiring waktu? Jika Anda tidak melihat pemakaian CPU yang tinggi, berarti masalahnya bukan pada kueri Anda.

  • Berapa lama pemakaian CPU tinggi? Apakah baru-baru ini melonjak atau sudah tinggi secara konsisten selama beberapa waktu? 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.

Jika Anda melihat lonjakan atau peningkatan pada grafik yang sesuai dengan penggunaan CPU instance secara keseluruhan, kemungkinan besar hal ini disebabkan oleh satu atau beberapa kueri yang mahal. Selanjutnya, Anda dapat mempelajari lebih dalam proses penelusuran kesalahan dengan mengidentifikasi tag permintaan atau kueri yang berpotensi bermasalah.

Mengidentifikasi kueri atau tag permintaan yang berpotensi bermasalah

Untuk mengidentifikasi kueri atau tag permintaan yang berpotensi bermasalah, amati bagian kueri TopN:

Kueri TopN

Di sini kita melihat bahwa kueri dengan sidik jari 3216067328234137024 memiliki pemanfaatan CPU yang tinggi dan dapat menimbulkan masalah.

Tabel Kueri TopN memberikan ringkasan kueri yang menggunakan CPU terbanyak selama jangka waktu yang dipilih, diurutkan dari yang tertinggi hingga terendah. Jumlah kueri TopN dibatasi hingga 100.

Untuk grafik, kami mengambil data dari tabel statistik kueri TopN, yang memiliki tiga perincian yang berbeda: 1 menit, 10 menit, dan 1 jam. Nilai untuk setiap titik data dalam grafik mewakili nilai rata-rata selama interval satu menit.

Sebaiknya tambahkan tag ke kueri SQL Anda. Pemberian tag kueri membantu Anda menemukan masalah pada konstruksi tingkat yang lebih tinggi, seperti pada logika bisnis atau microservice.

Tabel kueri TopN

Tabel menampilkan properti berikut:

  • Sidik Jari: Hash tag permintaan, jika ada; jika tidak, hash kueri.
  • Tag Kueri atau Permintaan: Jika kueri memiliki tag yang terkait dengannya, tag Permintaan akan ditampilkan. Statistik untuk beberapa kueri yang memiliki string tag yang sama dikelompokkan dalam satu baris dengan nilai REQUEST_TAG yang cocok dengan string tag. Untuk mempelajari lebih lanjut cara menggunakan tag permintaan, lihat Memecahkan masalah dengan tag permintaan dan tag transaksi.

    Jika kueri tidak memiliki tag terkait, kueri SQL, yang dipangkas hingga sekitar 64 KB, akan ditampilkan. Untuk DML batch, pernyataan SQL diratakan menjadi satu baris dan digabungkan, menggunakan pembatas titik koma. Teks SQL identik berurutan akan dihilangkan duplikasinya sebelum dipangkas.

  • Jenis kueri: Menunjukkan apakah kueri adalah PARTITIONED_QUERY atau QUERY. PARTITIONED_QUERY adalah kueri dengan partitionToken yang diperoleh dari PartitionQuery API. Semua kueri dan pernyataan DML lainnya ditandai dengan jenis kueri QUERY.

  • Penggunaan CPU: Konsumsi resource CPU oleh kueri, sebagai persentase dari total resource CPU yang digunakan oleh semua kueri yang berjalan di database dalam interval waktu tersebut, yang ditampilkan pada diagram batang horizontal dengan rentang 0 hingga 100.

  • Rekomendasi: Spanner menganalisis kueri Anda untuk menentukan apakah kueri tersebut dapat memperoleh manfaat dari indeks yang lebih baik. Jika demikian, alat ini merekomendasikan indeks baru atau yang diubah yang dapat meningkatkan performa kueri. Untuk mengetahui informasi selengkapnya, lihat Menggunakan penasihat indeks Spanner.

  • CPU (%): Konsumsi resource CPU oleh kueri, sebagai persentase dari total resource CPU yang digunakan oleh semua kueri yang berjalan di database dalam interval waktu tersebut.

  • Jumlah eksekusi: Jumlah kueri yang dilihat Spanner selama interval.

  • Latensi rata-rata (md): Durasi rata-rata, dalam mikrodetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak termasuk waktu encoding dan transmisi untuk set hasil serta overhead.

  • Rata-rata baris yang dipindai: Jumlah rata-rata baris yang dipindai kueri, tidak termasuk nilai yang dihapus.

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

  • Byte yang ditampilkan: Jumlah byte data yang ditampilkan kueri, tidak termasuk overhead encoding transmisi.

Kemungkinan perbedaan antara grafik

Anda mungkin melihat beberapa perbedaan antara grafik Total CPU Utilization (all queries) dan grafik Total CPU Utilization (per Query or Request tag). Ada dua hal yang dapat menyebabkan skenario ini:

  • Sumber data yang berbeda: Data Cloud Monitoring, yang mengisi grafik Total Penggunaan CPU (semua kueri), biasanya lebih akurat karena data tersebut dikirim setiap menit dan memiliki periode retensi 45 hari. Di sisi lain, data tabel sistem, yang mengisi grafik Total Penggunaan CPU (per tag Kueri atau Permintaan) mungkin dirata-ratakan selama 10 menit (atau 1 jam). Dalam hal ini, kita mungkin kehilangan data perincian tinggi yang kita lihat dalam grafik Total Penggunaan CPU (semua kueri).

  • Periode agregasi yang berbeda: Kedua grafik memiliki periode agregasi yang berbeda. Misalnya, saat memeriksa peristiwa yang lebih lama dari 6 jam, kita akan mengirimkan kueri ke tabel SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. Dalam hal ini, peristiwa yang terjadi pada pukul 10.01 akan digabungkan selama 10 menit dan akan ada dalam tabel sistem yang sesuai dengan stempel waktu 10.10.

Screenshot berikut menunjukkan contoh variasi tersebut.

Varians antar-grafik

Menganalisis kueri atau tag permintaan tertentu

Untuk menentukan apakah kueri atau tag permintaan adalah akar penyebab masalah, klik kueri atau tag permintaan yang tampaknya memiliki beban tertinggi atau membutuhkan waktu lebih lama daripada yang lain. Anda dapat memilih beberapa kueri dan tag permintaan sekaligus.

Anda dapat menahan pointer mouse pada grafik untuk kueri di seluruh linimasa untuk mengetahui penggunaan CPU-nya (dalam detik).

Coba sederhanakan masalahnya dengan melihat hal-hal berikut:

  • Berapa lama muatannya telah tinggi? Apakah sekarang hanya tingginya? Atau sudah tinggi sejak lama? Ubah rentang waktu untuk menemukan tanggal dan waktu saat kueri mulai berperforma buruk.
  • Apakah ada lonjakan pemakaian CPU? Anda dapat mengubah periode waktu untuk mempelajari pemakaian CPU historis untuk kueri.
  • Berapa konsumsi resource? Bagaimana kaitannya dengan kueri lain? Lihat tabel dan bandingkan data kueri lain dengan kueri yang dipilih. Apakah ada perbedaan besar?

Untuk mengonfirmasi bahwa kueri yang dipilih berkontribusi pada Penggunaan CPU yang tinggi, Anda dapat melihat perincian detail bentuk kueri (atau tag permintaan) tertentu dan menganalisisnya lebih lanjut di halaman Detail Kueri.

Melihat halaman Detail Kueri

Untuk melihat detail bentuk kueri atau tag permintaan tertentu dalam bentuk grafis, klik sidik jari yang terkait dengan kueri atau tag permintaan. Halaman Detail Kueri akan terbuka.

Halaman detail kueri

Halaman Detail Kueri menampilkan informasi berikut:

  1. Teks detail kueri: Teks kueri SQL, dipangkas hingga sekitar 64 KB. Statistik untuk beberapa kueri yang memiliki string tag yang sama dikelompokkan dalam satu baris dengan REQUEST_TAG yang cocok dengan string tag tersebut. Hanya teks salah satu kueri tersebut yang ditampilkan di kolom ini. Untuk DML batch, kumpulan pernyataan SQL diratakan menjadi satu baris, digabungkan menggunakan pemisah titik koma. Teks SQL identik yang berurutan akan dihapus duplikasinya sebelum dipangkas.
  2. Nilai kolom berikut:
    • Jumlah eksekusi: Jumlah kueri yang dilihat Spanner selama interval.
    • CPU Rata-Rata (ms): Konsumsi resource CPU rata-rata, dalam milidetik, oleh kueri resource CPU instance dalam interval waktu.
    • Latensi Rata-Rata (md): Durasi rata-rata, dalam milidetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak mencakup waktu encoding dan transmisi untuk set hasil dan overhead.
    • Rata-rata baris yang ditampilkan: Jumlah rata-rata baris yang ditampilkan kueri.
    • Rata-rata baris yang dipindai: Jumlah rata-rata baris yang dipindai kueri, tidak termasuk nilai yang dihapus.
    • Rata-rata byte: Jumlah byte data yang ditampilkan kueri, tidak termasuk overhead encoding transmisi.
  3. Grafik contoh paket kueri: Setiap titik pada grafik mewakili contoh paket kueri pada waktu tertentu dan latensi kueri tertentu. Klik salah satu titik dalam grafik untuk melihat paket kueri dan memvisualisasikan langkah-langkah yang dilakukan selama eksekusi kueri. Catatan: Rencana kueri tidak didukung untuk kueri dengan partitionTokens yang diperoleh dari PartitionQuery API dan kueri DML yang Dipartisi.
  4. Visualizer rencana kueri: Menampilkan contoh rencana kueri yang dipilih. Setiap node, atau kartu, pada grafik mewakili iterator yang menggunakan baris dari inputnya dan menghasilkan baris ke induknya. Anda dapat mengklik setiap iterator untuk melihat informasi yang lebih lengkap.
  5. Grafik latensi kueri: Menampilkan nilai latensi kueri untuk kueri yang dipilih selama jangka waktu tertentu. Bagian ini juga menampilkan latensi rata-rata.
  6. Grafik Penggunaan CPU: Menampilkan penggunaan CPU menurut kueri, dalam persentase, selama jangka waktu tertentu. Bagian ini juga menampilkan penggunaan CPU rata-rata.
  7. Grafik jumlah eksekusi/gagal: Menampilkan jumlah eksekusi kueri selama jangka waktu tertentu dan jumlah kegagalan eksekusi kueri.
  8. Grafik baris yang dipindai: Menampilkan jumlah baris yang dipindai kueri selama jangka waktu tertentu.
  9. Grafik baris yang ditampilkan: Menampilkan jumlah baris yang ditampilkan kueri selama jangka waktu tertentu.
  10. Filter rentang waktu: Memfilter detail kueri berdasarkan rentang waktu, seperti jam, hari, atau rentang kustom.

Untuk grafik, kami mengambil data dari tabel statistik kueri TopN, yang memiliki tiga perincian yang berbeda: 1 menit, 10 menit, dan 1 jam. Nilai untuk setiap titik data dalam grafik mewakili nilai rata-rata selama interval satu menit.

Menelusuri semua eksekusi kueri di log audit

Untuk menelusuri semua eksekusi sidik jari kueri tertentu di Cloud Audit Logs, buat kueri log audit dan telusuri query_fingerprint yang cocok dengan kolom Fingerprint di tabel statistik kueri TopN. Untuk mengetahui informasi selengkapnya, lihat Ringkasan kueri dan log. Gunakan metode ini untuk mengidentifikasi pengguna yang memulai kueri.

Langkah berikutnya