Menganalisis performa kueri

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

Ringkasan Query Insights

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 menyediakan informasi diagnostik yang membantu Anda melakukan lebih dari sekadar deteksi untuk mengidentifikasi akar penyebab masalah performa.

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

  1. Menentukan 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.

Query Insights tersedia dalam konfigurasi satu region dan multi-region.

Harga

Tidak ada biaya tambahan untuk Query Insight.

Retensi data

Query Insights menyimpan data selama maksimum 30 hari. Untuk grafik Total CPU Utilization (per Query or Request tag), 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 Anda perlukan untuk melihat halaman Query Insights, 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 Query Insights:

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

Pengguna kontrol akses terperinci

Jika Anda adalah pengguna kontrol akses terperinci, pastikan Anda:

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

Dasbor Query Insights menampilkan beban 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 pemuatan kueri.

Untuk melihat dasbor Query Insights untuk database, lakukan hal berikut:

  1. Pilih Query Insights di panel navigasi kiri. Dasbor Query Insight akan terbuka.
  2. Pilih database dari daftar Databases. Dasbor menampilkan informasi pemuatan kueri untuk database.

Area dasbor meliputi:

  1. Databases list: 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 CPU Utilization (All queries): Menampilkan tingkat rata-rata gabungan penggunaan CPU (dalam detik CPU per menit) dari semua kueri.
  4. Grafik Total CPU Utilization (per Query or Request tag): Menampilkan tingkat rata-rata penggunaan CPU (dalam detik CPU per menit) oleh setiap tag kueri atau permintaan.
  5. Tabel kueri dan tag TopN: Menampilkan daftar kueri dan tag permintaan teratas yang diurutkan berdasarkan pemakaian CPU. Lihat Mengidentifikasi kueri atau tag yang berpotensi bermasalah.

Dasbor Query Insights

Performa dasbor

Gunakan parameter kueri atau beri tag pada kueri Anda untuk mengoptimalkan performa Query Insights. 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 tingkat rata-rata penggunaan CPU (dalam detik CPU per menit) yang dilakukan oleh kueri yang dieksekusi di database yang dipilih dari waktu ke waktu.

Total pemakaian CPU untuk semua kueri

Tinjau grafik tersebut untuk mempelajari pertanyaan-pertanyaan ini:

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

    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 telah 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 rentang 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 debug dengan mengidentifikasi kueri atau tag permintaan 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 pemakaian CPU yang tinggi dan dapat menimbulkan masalah.

Tabel Kueri TopN memberikan ringkasan kueri yang paling banyak menggunakan CPU selama rentang 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 tingkat 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 Anda menambahkan tag ke kueri SQL. Pemberian tag kueri membantu Anda menemukan masalah pada konstruksi tingkat yang lebih tinggi, seperti dengan logika bisnis atau microservice.

Tabel kueri TopN

Tabel menampilkan properti berikut:

  • Sidik jari: Hash tag permintaan, atau jika tag tidak ada, hash teks kueri.
  • Tag Kueri atau Permintaan: Jika kueri memiliki tag yang terkait, 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 dipotong menjadi sekitar 64 KB, akan ditampilkan. Untuk DML batch, pernyataan SQL diratakan menjadi satu baris dan digabungkan, menggunakan pemisah titik koma. Teks SQL identik yang berurutan akan dihapus duplikatnya sebelum dipotong.

  • 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 ditunjukkan oleh 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 batang horizontal dengan rentang 0 hingga 100.

  • Rekomendasi: Spanner menganalisis kueri Anda untuk menentukan apakah kueri tersebut dapat memperoleh manfaat dari indeks yang ditingkatkan. Jika demikian, fitur ini akan merekomendasikan indeks baru atau yang diubah yang dapat meningkatkan performa kueri. Untuk mengetahui informasi selengkapnya, lihat Menggunakan index advisor 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: Rasio rata-rata eksekusi kueri, dalam eksekusi per menit, yang dilihat Spanner selama interval.

  • Latensi rata-rata (mdtk): Durasi waktu 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 varians 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 dimasukkan ke grafik Total CPU Utilization (all queries), biasanya lebih akurat karena dikirim setiap menit dan memiliki periode retensi 45 hari. Di sisi lain, data tabel sistem, yang menjadi sumber grafik Total CPU Utilization (per Query atau Request tag) mungkin dirata-rata selama 10 menit (atau 1 jam). Dalam hal ini, kita mungkin kehilangan data dengan tingkat perincian tinggi yang kita lihat di grafik Total CPU Utilization (all queries).

  • Periode agregasi yang berbeda: Kedua grafik memiliki periode agregasi yang berbeda. Misalnya, saat memeriksa peristiwa yang lebih lama dari 6 jam, kita akan membuat kueri 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 menampilkan contoh varians 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 memerlukan waktu lebih lama daripada yang lain. Anda dapat memilih beberapa kueri dan meminta tag sekaligus.

Anda dapat menahan kursor mouse pada grafik untuk kueri di seluruh linimasa guna mengetahui pemakaian 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 rentang 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 tertentu (atau tag permintaan) 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, dipotong menjadi 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 dari 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 duplikatnya sebelum pemotongan.
  2. Nilai kolom berikut:
    • Jumlah eksekusi: Rasio rata-rata eksekusi kueri, dalam eksekusi per menit, yang dilihat Spanner selama interval.
    • CPU Rata-rata (md): Konsumsi resource CPU rata-rata, dalam milidetik, oleh kueri resource CPU instance dalam interval waktu.
    • Latensi Rata-Rata (mdtk): Durasi waktu rata-rata, dalam milidetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak termasuk 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.
    • Avg. bytes: Jumlah byte data yang ditampilkan kueri, tidak termasuk overhead encoding transmisi.
  3. Grafik contoh rencana kueri: Setiap titik pada grafik mewakili rencana kueri yang dijadikan sampel pada waktu tertentu dan latensi kueri spesifiknya. Klik salah satu titik dalam grafik untuk melihat rencana kueri dan memvisualisasikan langkah-langkah yang diambil selama eksekusi kueri. Catatan: Rencana kueri tidak didukung untuk kueri dengan partitionToken yang diperoleh dari PartitionQuery API dan kueri DML yang Dipartisi.
  4. Visualizer rencana kueri: Menampilkan contoh rencana kueri yang dipilih. Spanner menyediakan opsi tata letak berikut:

    • Tampilan Hierarki: Tampilan hierarki memvisualisasikan rencana kueri sebagai grafik tempat setiap node atau kartu mewakili iterator yang menggunakan baris dari inputnya dan menghasilkan baris ke induknya. Anda dapat mengklik setiap iterator untuk mendapatkan informasi yang diperluas.
    • Tampilan Berurutan: Tampilan berurutan memvisualisasikan rencana kueri dalam tabel hierarkis dengan setiap baris mewakili operator. Anda dapat mengklik setiap baris untuk melihat informasi yang diperluas.

      Tampilan berurutan dari rencana kueri

      Tabel ini menampilkan kolom berikut:

      • Name: Nama operator.
      • Grup mesin: Grup mesin tempat operator ini dijalankan.
      • Latensi: Jumlah waktu yang berlalu selama eksekusi operasi saat ini. Waktu ini mungkin lebih lama daripada waktu CPU (misalnya, jika operator menunggu panggilan jarak jauh atau penundaan sistem file).
      • Latensi kumulatif: Jumlah waktu yang berlalu selama eksekusi seluruh subtree yang di-root pada operator ini. Hal ini tidak termasuk waktu pembuatan rencana dan overhead lainnya, sehingga latensi kumulatif mungkin lebih singkat daripada total durasi kueri.
      • Waktu CPU: Total jumlah waktu CPU yang digunakan untuk menjalankan kueri. Tidak termasuk latensi jaringan. Beberapa bagian eksekusi kueri mungkin berjalan secara paralel, sehingga waktu CPU mungkin lebih lama daripada total waktu yang berlalu. Misalnya, jika kueri menjalankan sepuluh operasi paralel dalam 1 milidetik (md), waktu berlalu adalah 1 md, tetapi waktu CPU adalah 10 md.
      • Baris yang ditampilkan: Jumlah baris yang ditampilkan oleh operator.
  5. Grafik latensi kueri: Menampilkan nilai latensi kueri untuk kueri yang dipilih selama jangka waktu tertentu. Diagram ini juga menampilkan latensi rata-rata.

  6. Grafik CPU Utilization: Menampilkan pemakaian CPU oleh kueri, dalam persentase, selama jangka waktu tertentu. Grafik ini juga menampilkan pemakaian CPU rata-rata.

  7. Grafik jumlah eksekusi/gagal: Menampilkan tingkat rata-rata eksekusi kueri (dalam eksekusi per menit) selama jangka waktu tertentu dan tingkat rata-rata eksekusi kueri yang gagal (dalam eksekusi gagal per menit).

  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 tingkat 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 membuat kueri dan melihat log. Gunakan metode ini untuk mengidentifikasi pengguna yang memulai kueri.

Langkah berikutnya