Menganalisis performa kueri

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

Ringkasan Query Insight

Query Insight 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 Insight 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. Mengidentifikasi kueri atau tag yang berpotensi bermasalah.
  3. Menganalisis kueri atau tag permintaan untuk mengidentifikasi masalah.

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

Harga

Tidak ada biaya tambahan untuk Query Insight.

Retensi data

Query Insight 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 diperlukan guna melihat halaman Query Insight, minta administrator untuk memberi Anda peran IAM berikut di instance:

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

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

Pengguna kontrol akses terperinci

Jika Anda adalah pengguna kontrol akses terperinci, pastikan Anda:

  • Memiliki Cloud Spanner Viewer(roles/spanner.viewer)
  • Memiliki hak istimewa kontrol akses terperinci dan diberi peran sistem spanner_sys_reader atau salah satu peran anggotanya.
  • Memilih spanner_sys_reader atau peran anggota sebagai peran sistem 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 pemuatan kueri.

Untuk melihat dasbor Query Insight 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 akan menampilkan informasi pemuatan 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 CPU Utilization (All queries): Menampilkan pemuatan gabungan semua kueri.
  4. Grafik Total CPU Utilization (per Query or Request tag): Menampilkan pemakaian CPU berdasarkan setiap kueri atau tag permintaan.
  5. Tabel TopN queries and tags: Menampilkan daftar kueri dan tag permintaan teratas 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 Query Insight. Jika Anda tidak membuat parameter atau memberi tag pada kueri, terlalu banyak hasil yang mungkin ditampilkan, yang dapat menyebabkan tabel TopN queries and tags tidak dimuat dengan benar.

Mengonfirmasi apakah kueri yang tidak efisien bertanggung jawab atas pemakaian CPU yang tinggi

Total CPU Utilization adalah ukuran pekerjaan (dalam detik CPU) 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 muatan tertinggi, Anda juga dapat meninjau diagram CPU utilization - total untuk database di Google Cloud konsol.

    Muatan database

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

  • Berapa lama pemakaian CPU tinggi? Apakah pemakaian CPU melonjak baru-baru ini atau terus-menerus tinggi 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 dalam 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 TopN queries:

Kueri TopN

Di sini kita melihat bahwa kueri dengan sidik jari 3216067328234137024 memiliki pemakaian CPU yang tinggi dan dapat bermasalah.

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

Untuk grafik, kami mengambil data dari tabel statistik kueri TopN, yang memiliki tiga granularitas 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 dengan logika bisnis atau microservice.

Tabel kueri TopN

Tabel menampilkan properti berikut:

  • Fingerprint: Hash tag permintaan, atau jika tag tidak ada, a 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 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 yang berurutan akan di-duplikat sebelum dipangkas.

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

  • Pemanfaatan 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 yang memiliki rentang 0 hingga 100.

  • Rekomendasi: Spanner menganalisis kueri Anda untuk menentukan apakah kueri tersebut dapat memperoleh manfaat dari indeks yang ditingkatkan. Jika ya, Spanner akan 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 kueri: Jumlah kueri yang dilihat Spanner selama interval.

  • Avg latency (ms): Durasi rata-rata, dalam mikrodetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak mencakup waktu encoding dan transmisi untuk kumpulan hasil serta overhead.

  • Avg rows scanned: Jumlah rata-rata baris yang dipindai kueri, tidak termasuk nilai yang dihapus.

  • Avg rows returned: Jumlah rata-rata baris yang ditampilkan kueri.

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

Kemungkinan varian antara grafik

Anda mungkin melihat beberapa varian 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 CPU Utilization (all queries), biasanya lebih akurat karena dikirim setiap menit dan memiliki periode retensi 45 hari. Di sisi lain, data tabel sistem, yang mengisi grafik Total CPU Utilization (per Query or Request tag) mungkin dirata-ratakan selama 10 menit (atau 1 jam). Dalam hal ini, kita mungkin kehilangan data granularitas 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 diagregasi selama 10 menit dan akan ada dalam tabel sistem yang sesuai dengan stempel waktu 10.10.

Screenshot berikut menunjukkan contoh varian 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 terlihat memiliki muatan tertinggi atau membutuhkan waktu lebih lama dari 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 pemakaian CPU-nya (dalam detik).

Coba sederhanakan masalahnya dengan melihat 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 guna 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 Pemakaian CPU yang tinggi, Anda dapat melihat detail bentuk kueri tertentu (atau tag permintaan) dan menganalisisnya lebih lanjut di halaman Query Details.

Melihat halaman Query Details

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

Halaman detail kueri

Halaman Query Details 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 pembatas titik koma. Teks SQL identik yang berurutan akan di-duplikat sebelum dipangkas.
  2. Nilai kolom berikut:
    • Jumlah kueri: Jumlah kueri yang dilihat Spanner selama interval.
    • Rata-rata CPU (md): Konsumsi resource CPU rata-rata, dalam milidetik, oleh kueri resource CPU instance dalam interval waktu.
    • Avg. Latency (ms): Durasi rata-rata, dalam milidetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak mencakup waktu encoding dan transmisi untuk kumpulan hasil dan overhead.
    • Avg. rows returned: 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. Query plans samples graph: Setiap titik pada grafik mewakili paket kueri yang diambil sampelnya pada waktu tertentu dan latensi kueri tertentu. Klik salah satu titik di grafik untuk melihat paket kueri dan memvisualisasikan langkah-langkah yang diambil selama eksekusi kueri. Catatan: Paket kueri tidak didukung untuk kueri dengan partitionToken yang diperoleh dari PartitionQuery API dan kueri DML yang dipartisi.
  4. Query plan visualizer: Menampilkan paket kueri yang diambil sampelnya dan dipilih. Spanner menyediakan opsi tata letak berikut:

    • Tampilan Pohon: Tampilan pohon memvisualisasikan paket 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 melihat informasi yang diperluas.
    • Tampilan Berurutan: Tampilan berurutan memvisualisasikan paket kueri dalam tabel hierarkis tempat setiap baris mewakili operator. Anda dapat mengklik setiap baris untuk melihat informasi yang diperluas.

      Tampilan berurutan dari paket kueri

      Tabel menampilkan kolom berikut:

      • Nama: Nama operator.
      • Machine group: Grup mesin tempat operator ini dieksekusi.
      • Latensi: Jumlah waktu yang berlalu selama eksekusi operasi saat ini. Hal ini mungkin lebih dari waktu CPU (misalnya, jika operator menunggu panggilan jarak jauh atau penundaan sistem file).
      • Latensi kumulatif: Jumlah waktu yang berlalu selama eksekusi seluruh subpohon yang berakar pada operator ini. Hal ini tidak mencakup waktu pembuatan paket dan overhead lainnya, sehingga latensi kumulatif mungkin lebih singkat daripada durasi total kueri.
      • Waktu CPU: Total waktu yang dihabiskan CPU untuk mengeksekusi kueri. Tidak termasuk latensi jaringan. Beberapa bagian dari eksekusi kueri dapat diproses secara paralel, sehingga waktu CPU mungkin lebih lama dari total waktu yang berlalu. Misalnya, jika kueri mengeksekusi sepuluh operasi paralel dalam 1 milidetik (md), waktu yang berlalu adalah 1 md, tetapi waktu CPU adalah 10 md.
      • Rows returned: Jumlah baris yang ditampilkan oleh operator.
  5. Grafik latensi kueri: Menampilkan nilai latensi kueri untuk kueri yang dipilih selama periode waktu. Grafik ini juga menampilkan latensi rata-rata.

  6. Grafik Pemakaian CPU: Menampilkan pemakaian CPU oleh kueri, dalam persentase, selama periode waktu. Grafik ini juga menampilkan pemakaian CPU rata-rata.

  7. Execution count/failed graph: Menampilkan jumlah eksekusi kueri selama periode waktu dan jumlah eksekusi kueri yang gagal.

  8. Grafik baris yang dipindai: Menampilkan jumlah baris yang dipindai kueri selama periode waktu.

  9. Grafik baris yang ditampilkan: Menampilkan jumlah baris yang ditampilkan kueri selama periode waktu.

  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 granularitas 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 lihat log. Gunakan metode ini untuk mengidentifikasi pengguna yang memulai kueri.

Langkah berikutnya