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
akar penyebab masalah performa.
Insight kueri membantu Anda meningkatkan performa kueri Spanner dengan memandu Anda melalui langkah-langkah berikut:
- Konfirmasi apakah kueri yang tidak efisien menyebabkan penggunaan CPU yang tinggi.
- Identifikasi kueri atau tag yang berpotensi bermasalah.
- Analisis kueri atau tag permintaan 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 Analisis kueri adalah 30 hari.
Untuk grafik Total CPU Utilization (per Query or Request tag), data diambil dari tabel SPANNER_SYS.QUERY_STATS_TOP_*
, yang 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 Insight kueri, minta administrator untuk memberi Anda peran IAM berikut pada instance:
-
Cloud Spanner Viewer (
roles/spanner.viewer
) -
Cloud Spanner Database Reader (
roles/spanner.databaseReader
)
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 Cloud Spanner Viewer(
roles/spanner.viewer
) - Memiliki hak istimewa kontrol akses yang sangat 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 Insight kueri menampilkan pemuatan kueri berdasarkan database dan rentang waktu yang Anda pilih. Pemuatan kueri adalah pengukuran total penggunaan 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 Insight kueri untuk database, lakukan tindakan berikut:
- Pilih Analisis kueri di panel navigasi kiri. Dasbor Insight kueri akan terbuka.
- Pilih database dari daftar Database. Dasbor menampilkan informasi pemuatan kueri untuk database.
Area dasbor meliputi:
- Daftar database: Memfilter pemuatan kueri di database tertentu atau semua database.
- Filter rentang waktu: Memfilter pemuatan kueri berdasarkan rentang waktu, seperti jam, hari, atau rentang kustom.
- Grafik Total CPU Utilization (Semua kueri): Menampilkan beban gabungan semua kueri.
- Grafik Total CPU Utilization (per tag Kueri atau Permintaan): Menampilkan penggunaan CPU oleh setiap tag kueri atau permintaan.
- Tabel kueri dan tag TopN: Menampilkan daftar kueri teratas dan tag permintaan yang diurutkan berdasarkan penggunaan CPU. Lihat Mengidentifikasi kueri atau tag yang berpotensi bermasalah.
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 tag dan kueri TopN tidak dimuat dengan benar.
Mengonfirmasi apakah kueri yang tidak efisien menyebabkan penggunaan CPU yang tinggi
Total Pemakaian CPU adalah ukuran pekerjaan (dalam detik CPU) yang dilakukan oleh kueri yang dieksekusi di database yang dipilih dari waktu ke waktu.
Tinjau grafik untuk mempelajari pertanyaan-pertanyaan berikut:
Database mana yang mengalami pemuatan? Pilih berbagai database dari daftar Databases untuk menemukan database yang memiliki beban tertinggi. Untuk mengetahui database mana yang memiliki beban tertinggi, Anda juga dapat meninjau diagram CPU utilization - total untuk database di Konsol Google Cloud.
Apakah penggunaan 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 baru-baru ini terjadi lonjakan atau tetap 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 perjalanan proses debug lebih dalam 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:
Di sini kita melihat bahwa kueri dengan FPRINT 6815864236081503267
memiliki penggunaan CPU
yang tinggi dan dapat bermasalah.
Tabel Kueri TopN memberikan ringkasan kueri yang menggunakan CPU terbanyak selama periode 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 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.
Sebagai praktik terbaik yang direkomendasikan, Anda dapat 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 menampilkan properti berikut:
- FPRINT: Hash tag permintaan, jika ada; jika tidak, hash 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 terpotong menjadi sekitar 64 KB, akan ditampilkan. Untuk DML batch, pernyataan SQL diratakan menjadi satu baris dan digabungkan, menggunakan pembatas titik koma. Teks SQL yang identik secara berturut-turut akan dihapus duplikatnya sebelum dipotong.
Jenis kueri: Menunjukkan apakah kueri adalah
PARTITIONED_QUERY
atauQUERY
.PARTITIONED_QUERY
adalah kueri denganpartitionToken
yang diperoleh dari PartitionQuery API. Semua kueri dan pernyataan DML lainnya ditunjukkan oleh jenis kueriQUERY
.Pemakaian CPU: Penggunaan 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.
CPU (%): Penggunaan 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: Frekuensi Spanner melihat kueri selama interval.
Rata-rata latensi (md): Durasi rata-rata, dalam mikrodetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini mengecualikan 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 oleh kueri.
Byte yang ditampilkan: Jumlah byte data yang ditampilkan kueri, tidak termasuk overhead encoding transmisi.
Kemungkinan varians 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 (semua kueri), 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 tag Kueri atau Permintaan) mungkin dirata-ratakan 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 (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 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 di tabel sistem yang sesuai dengan stempel waktu 10.10.
Screenshot berikut menunjukkan contoh varian tersebut.
Menganalisis tag permintaan atau kueri tertentu
Untuk menentukan apakah kueri atau tag permintaan adalah akar masalah, klik kueri atau tag permintaan yang terlihat 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 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 penggunaan CPU? Anda dapat mengubah periode waktu untuk mempelajari penggunaan 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 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 grafik, klik FPRINT yang terkait dengan tag kueri atau permintaan. Halaman Detail Kueri akan terbuka.
Halaman Detail Kueri menampilkan informasi berikut:
- Teks detail kueri: Teks kueri SQL, yang 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 salah satu kueri tersebut yang ditampilkan di kolom ini. Untuk DML batch, kumpulan pernyataan SQL diratakan menjadi satu baris, yang digabungkan menggunakan pemisah titik koma. Teks SQL identik berturut-turut akan dihapus duplikatnya sebelum dipangkas.
- Nilai kolom berikut:
- Jumlah eksekusi: Frekuensi Spanner melihat kueri selama interval.
- Rata-rata CPU (ms): Konsumsi resource CPU rata-rata, dalam milidetik, berdasarkan kueri resource CPU instance dalam interval waktu.
- Rata-rata Latensi (md): Durasi rata-rata, dalam milidetik, untuk setiap eksekusi kueri dalam database. Rata-rata ini mengecualikan waktu encoding dan transmisi untuk set hasil dan overhead.
- Rata-rata baris yang ditampilkan: Jumlah rata-rata baris yang ditampilkan oleh 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.
- Grafik contoh paket kueri: Setiap titik pada grafik mewakili paket kueri contoh pada waktu tertentu dan latensi kueri tertentu. 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 partitionTokens yang diperoleh dari PartitionQuery API dan kueri DML yang Dipartisi.
- Visualisator rencana kueri: 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 mengembangkan informasi.
- Grafik latensi kueri: Menampilkan nilai latensi kueri untuk kueri yang dipilih selama jangka waktu tertentu. Laporan ini juga menampilkan latensi rata-rata.
- Grafik Penggunaan CPU: Menampilkan penggunaan CPU berdasarkan kueri, dalam persentase, selama jangka waktu tertentu. Bagian ini juga menampilkan penggunaan CPU rata-rata.
- Jumlah eksekusi/grafik gagal: Menampilkan jumlah eksekusi kueri selama jangka waktu tertentu dan frekuensi kegagalan eksekusi kueri.
- Grafik baris yang dipindai: Menampilkan jumlah baris yang dipindai kueri selama jangka waktu tertentu.
- Diagram baris yang ditampilkan: Menampilkan jumlah baris yang ditampilkan kueri selama jangka waktu tertentu.
- Filter rentang waktu: Memfilter detail kueri berdasarkan rentang waktu, seperti jam, hari, atau rentang kustom.
Untuk grafik, kita 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 FPRINT
di tabel statistik kueri TopN. Untuk informasi selengkapnya, lihat Ringkasan log kueri dan tampilan. Gunakan metode ini untuk mengidentifikasi pengguna yang memulai kueri.