Menganalisis performa kueri

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

Ringkasan insight kueri

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

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

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

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

Harga

Tidak ada biaya tambahan untuk Insight kueri.

Retensi data

Retensi data maksimum untuk Insight kueri adalah 30 hari. Untuk grafik Total Penggunaan CPU (per Kueri atau tag Permintaan), data diambil dari tabel SPANNER_SYS.QUERY_STATS_TOP_*, yang memiliki retensi maksimum selama 30 hari. Baca artikel Retensi data untuk mempelajari lebih lanjut.

Peran yang diperlukan

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

Pengguna Identity and Access Management (IAM)

Untuk mendapatkan izin yang diperlukan guna melihat halaman Insight kueri, minta administrator Anda 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 mendetail

Jika Anda adalah pengguna kontrol akses yang mendetail, pastikan bahwa Anda:

  • Memiliki Cloud Spanner Viewer(roles/spanner.viewer)
  • Memiliki hak istimewa kontrol akses yang 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 insight kueri

Dasbor Query Insights menampilkan beban kueri berdasarkan database dan rentang waktu yang Anda pilih. Beban kueri adalah pengukuran total penggunaan CPU untuk semua kueri di instance dalam rentang waktu yang dipilih. Dasbor menyediakan serangkaian filter yang membantu Anda melihat pemuatan kueri.

Untuk menampilkan dasbor Insight kueri untuk database, lakukan hal berikut:

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

Area dasbor meliputi:

  1. Databases list: Memfilter pemuatan kueri pada database tertentu atau semua database.
  2. Filter rentang waktu: Memfilter pemuatan kueri menurut 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 Kueri atau tag Permintaan): Menampilkan pemakaian CPU oleh setiap tag permintaan atau kueri.
  5. TopN queries and tags table: Menampilkan daftar kueri teratas dan tag permintaan yang diurutkan berdasarkan pemakaian CPU. Lihat Mengidentifikasi kueri atau tag yang berpotensi bermasalah.

Dasbor insight kueri

Performa dasbor

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

Konfirmasi apakah kueri yang tidak efisien menyebabkan penggunaan CPU yang tinggi

Total Penggunaan CPU adalah ukuran pekerjaan (dalam detik CPU) yang dijalankan kueri yang dijalankan dalam database yang Anda pilih dari waktu ke waktu.

Total pemakaian CPU untuk semua kueri

Tinjau grafik tersebut untuk mempelajari pertanyaan-pertanyaan berikut:

  • Database mana yang mengalami pemuatan? Pilih database yang berbeda dari daftar Database untuk menemukan database dengan beban tertinggi. Untuk mengetahui database mana yang memiliki beban tertinggi, Anda juga dapat meninjau diagram pemakaian CPU - total untuk database di Konsol Google Cloud.

    Muatan database

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

  • Sudah berapa lama pemakaian CPU tinggi? Apakah baru-baru ini melonjak atau secara konsisten 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 beban kueri terlihat. Perkecil untuk melihat rentang waktu hingga satu minggu.

Jika Anda melihat lonjakan atau elevasi dalam grafik yang berkaitan dengan penggunaan CPU instance secara keseluruhan, kemungkinan besar ini terjadi karena adanya satu atau beberapa kueri yang lebih mahal. Selanjutnya, Anda dapat mempelajari lebih dalam perjalanan proses debug dengan mengidentifikasi kueri atau tag permintaan yang berpotensi menimbulkan masalah.

Identifikasi 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 FPRINT 6815864236081503267 memiliki penggunaan CPU yang tinggi dan dapat menimbulkan masalah.

Tabel TopN queries memberikan ringkasan kueri yang menggunakan CPU paling banyak selama jangka waktu yang dipilih, yang diurutkan dari yang tertinggi ke terendah. Jumlah kueri TopN dibatasi hingga 100.

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

Sebagai praktik terbaik yang direkomendasikan, Anda dapat menambahkan tag ke kueri SQL. Pemberian tag kueri membantu Anda menemukan masalah pada konstruksi tingkat lebih tinggi, seperti dengan logika bisnis atau microservice.

Tabel kueri TopN

Tabel menampilkan properti berikut:

  • FPRINT: 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 terpotong hingga sekitar 64 KB, akan ditampilkan. Untuk DML batch, pernyataan SQL disatukan menjadi satu baris dan digabungkan, menggunakan pembatas titik koma. Teks SQL yang identik 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 dilambangkan dengan jenis kueri QUERY.

  • Pemakaian 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 yang memiliki rentang 0 sampai 100.

  • 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: Berapa kali Spanner melihat kueri selama interval.

  • Latensi rata-rata (md): Durasi rata-rata, dalam mikrodetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini tidak mencakup waktu encoding dan transmisi untuk hasil yang ditetapkan 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 antar-grafik

Anda mungkin melihat beberapa variasi antara grafik Total Pemakaian CPU (semua kueri) dan grafik Total Penggunaan CPU (per Kueri atau tag Permintaan). Ada dua hal yang dapat menyebabkan skenario ini:

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

  • Jendela agregasi yang berbeda: Kedua grafik memiliki jendela agregasi yang berbeda. Misalnya, saat memeriksa peristiwa yang lebih lama dari 6 jam, kita akan mengkueri 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 varians tersebut.

Varian antar-grafik

Menganalisis tag permintaan atau kueri tertentu

Untuk menentukan apakah tag kueri atau permintaan merupakan akar masalah, klik tag kueri atau permintaan yang sepertinya memiliki pemuatan 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 sepanjang linimasa guna mengetahui pemakaian CPU (dalam hitungan detik).

Coba persempit masalahnya dengan melihat hal berikut:

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

Untuk mengonfirmasi bahwa kueri yang dipilih berkontribusi terhadap 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 Query Details

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

Halaman detail kueri

Halaman Detail Kueri akan menampilkan informasi berikut:

  1. Teks detail kueri: Teks kueri SQL, terpotong 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 dalam kolom ini. Untuk DML batch, kumpulan pernyataan SQL disatukan menjadi satu baris, digabungkan menggunakan pembatas titik koma. Teks SQL identik yang berurutan dihapus duplikatnya sebelum dipotong.
  2. Nilai kolom berikut:
    • Jumlah eksekusi: Berapa kali Spanner melihat kueri selama interval.
    • CPU Rata-rata (md): Rata-rata konsumsi resource CPU, 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 kumpulan 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.
    • Byte rata-rata: Jumlah byte data yang ditampilkan kueri, tidak termasuk overhead encoding transmisi.
  3. Grafik sampel paket kueri: Setiap titik pada grafik mewakili sampel paket kueri pada waktu tertentu dan latensi kueri khususnya. Klik salah satu titik dalam grafik untuk melihat paket kueri dan memvisualisasikan langkah-langkah yang diambil selama eksekusi kueri. Catatan: Paket kueri tidak didukung untuk kueri dengan partitionTokens yang diperoleh dari kueri PartitionQuery API dan DML Terpartisi.
  4. Query plan visualizer: Menampilkan sampel paket 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 diperluas.
  5. Grafik latensi kueri: Menampilkan nilai latensi kueri untuk kueri yang dipilih selama jangka waktu tertentu. Laporan ini juga menunjukkan latensi rata-rata.
  6. CPU Utilization graph: Menampilkan pemakaian CPU berdasarkan kueri, dalam persentase, selama jangka waktu tertentu. Ini juga menunjukkan pemakaian CPU rata-rata.
  7. Grafik jumlah eksekusi/grafik gagal: Menampilkan jumlah eksekusi kueri selama jangka waktu tertentu dan berapa kali eksekusi kueri gagal.
  8. Grafik baris yang dipindai: Menampilkan jumlah baris yang dipindai oleh kueri selama jangka waktu tertentu.
  9. Baris yang menampilkan grafik: Menampilkan jumlah baris yang ditampilkan oleh kueri selama jangka waktu tertentu.
  10. Filter rentang waktu: Memfilter detail kueri menurut rentang waktu, seperti jam, hari, atau rentang kustom.

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