Visualizer paket kueri memungkinkan Anda memahami struktur paket kueri yang dipilih oleh Spanner untuk mengevaluasi kueri dengan cepat. Panduan ini menjelaskan cara menggunakan paket kueri untuk membantu Anda memahami eksekusi kueri.
Sebelum memulai
Untuk memahami bagian antarmuka pengguna konsol yang disebutkan dalam panduan ini, baca hal berikut: Google Cloud
Menjalankan kueri di Google Cloud konsol
- Buka halaman Instances Spanner di Google Cloud konsol.
-
Pilih nama instance yang berisi database yang ingin Anda kueri.
Google Cloud Konsol menampilkan halaman Overview instance.
-
Pilih nama database yang ingin Anda kueri.
Google Cloud Konsol menampilkan halaman Overview database.
-
Di menu samping, klik Spanner Studio.
Google Cloud Konsol menampilkan halaman Spanner Studio database.
- Masukkan kueri SQL di panel editor.
-
Klik Run.
Spanner menjalankan kueri.
- Klik tab Explanation untuk melihat visualisasi paket kueri.
Mengenal editor kueri
Halaman Spanner Studio menyediakan tab kueri yang memungkinkan Anda mengetik atau menempel kueri SQL dan pernyataan DML, menjalankannya terhadap database Anda, serta melihat hasilnya dan paket eksekusi kueri. Komponen utama halaman Spanner Studio diberi nomor dalam screenshot berikut.
- Bilah tab menampilkan tab kueri yang telah Anda buka. Untuk membuat tab baru, klik New tab.
Anda juga dapat menggunakan Gemini Code Assist untuk mendapatkan bantuan yang didukung AI. Untuk mengetahui informasi selengkapnya, lihat Menulis SQL dengan bantuan Gemini.
- Bilah perintah editor menyediakan opsi berikut:
- Perintah Run menjalankan pernyataan yang dimasukkan di panel pengeditan, menghasilkan hasil kueri di tab Results dan paket eksekusi kueri di tab Explanation. Ubah perilaku default menggunakan drop-down untuk menghasilkan Results only atau Explanation only.
Menyoroti sesuatu di editor akan mengubah perintah Run menjadi Run selected, sehingga Anda dapat menjalankan apa yang telah Anda pilih.
- Perintah Save memungkinkan Anda membuat, menyimpan, dan mengelola skrip SQL sebagai kueri tersimpan. Untuk mengetahui informasi selengkapnya, lihat Ringkasan kueri tersimpan.
- Perintah Format memformat pernyataan di editor sehingga lebih mudah dibaca.
- Perintah Clear menghapus semua teks di editor dan menghapus subtab Results dan Explanation.
- Link Documentation membuka tab browser ke Spanner documentation tentang sintaksis kueri SQL.
Kueri divalidasi secara otomatis setiap kali diperbarui di editor. Jika pernyataan valid, bilah perintah editor menampilkan tanda centang konfirmasi dan pesan Valid. Jika ada masalah, pesan error dengan detail akan ditampilkan.
- Perintah Run menjalankan pernyataan yang dimasukkan di panel pengeditan, menghasilkan hasil kueri di tab Results dan paket eksekusi kueri di tab Explanation. Ubah perilaku default menggunakan drop-down untuk menghasilkan Results only atau Explanation only.
- Editor adalah tempat Anda memasukkan kueri SQL dan pernyataan DML.
Input diberi kode warna dan nomor baris ditambahkan secara otomatis untuk
pernyataan multi-baris.
Jika Anda memasukkan lebih dari satu pernyataan di editor, Anda harus menggunakan a penghentian titik koma setelah setiap pernyataan kecuali yang terakhir.
- Panel bawah tab kueri menyediakan subtab berikut:
- Subtab Results menampilkan hasil saat Anda menjalankan
pernyataan di editor. Untuk kueri, subtab ini menampilkan tabel hasil, dan
untuk pernyataan DML seperti
INSERTdanUPDATEsubtab ini menampilkan pesan tentang jumlah baris yang terpengaruh.Secara opsional, klik Export untuk mengekspor hasil kueri. Opsi berikut tersedia:
- Download CSV
- Download JSON
- Ekspor ke Google Spreadsheet
- Salin ke papan klip (CSV)
- Salin ke papan klip (TSV)
- Salin ke papan klip (JSON)
- Subtab Explanation menampilkan grafik visual paket kueri yang dibuat saat Anda menjalankan pernyataan di editor.
- Subtab Results menampilkan hasil saat Anda menjalankan
pernyataan di editor. Untuk kueri, subtab ini menampilkan tabel hasil, dan
untuk pernyataan DML seperti
Melihat contoh paket kueri
- Buka halaman Instances Spanner di Google Cloud konsol.
-
Klik nama instance dengan kueri yang ingin Anda selidiki.
Google Cloud Konsol menampilkan halaman Overview instance.
-
Di menu Navigation dan di bagian Observability, klik Query insights.
Google Cloud Konsol menampilkan halaman Query insights Instance.
-
Di menu Database drop-down, pilih database dengan kueri yang ingin Anda selidiki.
Google Cloud Konsol menampilkan informasi pemuatan kueri untuk database. Tabel TopN queries and tags menampilkan daftar kueri dan tag permintaan teratas yang diurutkan berdasarkan penggunaan CPU.
-
Temukan kueri dengan penggunaan CPU tinggi yang contoh paket kuerinya ingin Anda lihat Klik nilai FPRINT kueri tersebut.
Halaman Query details menampilkan grafik Query plans samples untuk kueri Anda dari waktu ke waktu. Anda dapat memperkecil tampilan hingga maksimal tujuh hari sebelum waktu saat ini. Catatan: Paket kueri tidak didukung untuk kueri dengan partitionTokens yang diperoleh dari PartitionQuery API dan kueri DML yang Dipartisi.
-
Klik salah satu titik di grafik untuk melihat paket kueri yang lebih lama dan memvisualisasikan langkah-langkah yang diambil selama eksekusi kueri. Anda juga dapat mengklik operator mana pun untuk melihat informasi yang diperluas tentang operator tersebut.
Gambar 8. Grafik contoh paket kueri.
Dalam beberapa kasus, Anda mungkin ingin melihat contoh paket kueri dan membandingkan performa kueri dari waktu ke waktu. Untuk kueri yang menggunakan CPU lebih tinggi, Spanner menyimpan contoh paket kueri selama 30 hari di halaman Query insights konsol. Google Cloud Untuk melihat contoh paket kueri:
Mengenal visualizer paket kueri
Komponen utama visualizer diberi anotasi dalam screenshot berikut dan dijelaskan secara lebih mendetail. Setelah menjalankan kueri di tab kueri, pilih tab EXPLANATION di bawah editor kueri untuk membuka visualizer paket eksekusi kueri.
Alur data dalam diagram berikut adalah bottom-up, yaitu semua tabel dan indeks berada di bagian bawah diagram dan output akhir berada di bagian atas.
- Visualisasi paket Anda dapat berukuran besar, bergantung pada kueri yang Anda jalankan. Untuk menyembunyikan dan menampilkan detail, aktifkan/nonaktifkan pemilih tampilan EXPANDED/COMPACT. Anda dapat menyesuaikan jumlah paket yang Anda lihat kapan saja menggunakan kontrol zoom.
- Aljabar yang menjelaskan cara Spanner menjalankan kueri
digambar sebagai grafik asiklik, dengan setiap node sesuai dengan
iterator yang menggunakan baris dari inputnya dan menghasilkan baris ke
induknya. Contoh paket ditampilkan di Gambar 9. Klik diagram
untuk melihat tampilan yang diperluas dari beberapa detail paket.
Gambar 9. Contoh paket visual (Klik untuk memperbesar).
Setiap node, atau kartu, pada grafik mewakili iterator dan berisi informasi berikut:
- Nama iterator. Iterator menggunakan baris dari inputnya dan menghasilkan baris.
- Statistik runtime yang memberi tahu Anda jumlah baris yang ditampilkan, latensi, dan jumlah CPU yang digunakan.
- Kami menyediakan petunjuk visual berikut untuk membantu Anda mengidentifikasi potensi masalah dalam paket eksekusi kueri.
- Bilah merah di node adalah indikator visual persentase latensi atau waktu CPU untuk iterator ini dibandingkan dengan total untuk kueri.
- Ketebalan garis yang menghubungkan setiap node mewakili jumlah baris. Makin tebal garisnya, makin besar jumlah baris diteruskan ke node berikutnya. Jumlah baris sebenarnya ditampilkan di setiap kartu dan saat Anda mengarahkan pointer ke konektor.
- Segitiga peringatan ditampilkan di node tempat pemindaian tabel penuh dilakukan. Detail selengkapnya di panel informasi mencakup rekomendasi seperti menambahkan indeks, atau merevisi kueri atau skema dengan cara lain jika memungkinkan untuk menghindari pemindaian penuh.
- Pilih kartu dalam paket untuk melihat detail di panel informasi di sebelah kanan (5).
- Peta mini paket eksekusi menampilkan tampilan yang diperkecil dari paket lengkap dan berguna untuk menentukan bentuk keseluruhan paket eksekusi dan untuk membuka berbagai bagian paket dengan cepat. Tarik langsung di peta mini atau klik tempat yang ingin Anda fokuskan, untuk membuka bagian lain dari paket visual.
Pilih DOWNLOAD JSON untuk mendownload versi JSON dari paket eksekusi, yang berguna untuk pemecahan masalah. Anda juga dapat membagikannya saat menghubungi tim Spanner untuk mendapatkan dukungan. Menyimpan JSON tidak menyimpan hasil kueri.
Untuk mendownload dan menyimpan versi JSON dari paket eksekusi untuk divisualisasikan nanti:
- Di Spanner Studio, jalankan kueri.
- Pilih tab Explanation.
- Klik DOWNLOAD JSON untuk mendownload versi JSON dari paket eksekusi.
- Simpan dan salin konten file JSON.
- Buka tab editor kueri baru.
- Di tab editor, masukkan:
PROTO: CONTENT_OF_JSON
- Klik Run.
- Pilih tab Explanation di bawah editor kueri untuk melihat representasi visual dari paket eksekusi yang didownload.
- Panel informasi menampilkan informasi kontekstual mendetail tentang
node yang dipilih dalam diagram paket kueri. Informasi ini
diatur ke dalam kategori berikut.
- Informasi iterator memberikan detail, serta statistik runtime, untuk kartu iterator yang Anda pilih dalam grafik.
- Ringkasan kueri memberikan detail tentang jumlah baris yang ditampilkan dan waktu yang diperlukan untuk menjalankan kueri. Operator yang menonjol adalah operator yang menunjukkan latensi signifikan, menggunakan CPU signifikan dibandingkan dengan operator lain, dan menampilkan jumlah baris data yang signifikan.
- Query execution timeline adalah grafik berbasis waktu yang menunjukkan durasi setiap grup mesin menjalankan bagian kuerinya. Grup mesin mungkin tidak harus berjalan selama seluruh durasi waktu berjalan kueri. Ada juga kemungkinan grup mesin berjalan beberapa kali selama menjalankan kueri, tetapi linimasa di sini hanya mewakili awal pertama kali berjalan dan akhir terakhir kali berjalan.
Menyesuaikan kueri yang menunjukkan performa buruk
Bayangkan perusahaan Anda menjalankan database film online yang berisi informasi tentang film seperti pemeran, perusahaan produksi, detail film, dan lainnya. Layanan ini berjalan di Spanner, tetapi mengalami beberapa masalah performa akhir-akhir ini.
Sebagai developer utama untuk layanan ini, Anda diminta untuk menyelidiki masalah performa ini karena menyebabkan rating buruk untuk layanan tersebut. Anda membuka Google Cloud konsol, membuka instance database, lalu membuka editor kueri. Anda memasukkan kueri berikut ke dalam editor dan menjalankannya.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Hasil menjalankan kueri ini ditampilkan dalam screenshot berikut. Kami memformat kueri di editor dengan memilih FORMAT QUERY. Ada juga catatan di kanan atas layar yang memberi tahu bahwa kueri tersebut valid.
Tab RESULTS di bawah editor kueri menunjukkan bahwa kueri selesai dalam waktu lebih dari dua menit. Anda memutuskan untuk melihat lebih dekat kueri tersebut untuk melihat apakah kueri tersebut efisien.
Menganalisis kueri lambat dengan visualizer paket kueri
Pada tahap ini, kita tahu bahwa kueri pada langkah sebelumnya memerlukan waktu lebih dari dua menit, tetapi kita tidak tahu apakah kueri tersebut seefisien mungkin dan, oleh karena itu, apakah durasi ini diharapkan.
Anda memilih tab EXPLANATION tepat di bawah editor kueri untuk melihat representasi visual dari paket eksekusi yang dibuat Spanner untuk menjalankan kueri dan menampilkan hasil.
Paket yang ditampilkan dalam screenshot berikut relatif besar, tetapi bahkan pada tingkat zoom ini, Anda dapat membuat pengamatan berikut.
Berdasarkan Query summary di panel informasi di sebelah kanan, kita mengetahui bahwa hampir 3 juta baris dipindai dan kurang dari 64 ribu baris akhirnya ditampilkan.
Kita juga dapat melihat dari panel Query execution timeline bahwa 4 grup mesin terlibat dalam kueri. Grup mesin bertanggung jawab untuk menjalankan sebagian kueri. Operator dapat mengeksekusi satu atau beberapa mesin. Memilih grup mesin di linimasa akan menandai bagian kueri yang dijalankan di grup tersebut pada paket visual.
Meningkatkan kueri
Untuk meningkatkan performa kueri, Anda menggunakan petunjuk gabungan untuk mengubah metode gabungan menjadi gabungan hash. Implementasi gabungan ini menjalankan pemrosesan berbasis set.
Berikut kueri yang diperbarui:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Screenshot berikut mengilustrasikan kueri yang diperbarui. Seperti yang ditunjukkan dalam screenshot, kueri selesai dalam waktu kurang dari 5 detik, peningkatan signifikan dibandingkan dengan runtime 120 detik sebelum perubahan ini.
Periksa paket visual baru, yang ditampilkan dalam diagram berikut, untuk melihat apa yang dapat kita ketahui tentang peningkatan ini.
Anda akan langsung melihat beberapa perbedaan:
Hanya satu grup mesin yang terlibat dalam eksekusi kueri ini.
Jumlah agregasi telah berkurang secara drastis.
Kesimpulan
Dalam skenario ini, kita menjalankan kueri lambat dan melihat paket visualnya untuk mencari inefisiensi. Berikut adalah ringkasan kueri dan paket sebelum dan setelah perubahan dilakukan. Setiap tab menampilkan kueri yang dijalankan dan tampilan ringkas dari visualisasi paket eksekusi kueri lengkap.
Sebelum
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Setelah
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Indikator bahwa ada sesuatu yang dapat ditingkatkan dalam skenario ini adalah bahwa sebagian besar
baris dari tabel title memenuhi syarat filter LIKE
'% the %'. Mencari ke tabel lain dengan begitu banyak baris kemungkinan akan mahal. Mengubah implementasi gabungan menjadi gabungan hash meningkatkan performa secara signifikan.
Langkah berikutnya
Untuk referensi paket kueri lengkap, lihat Paket eksekusi kueri.
Untuk referensi operator lengkap, lihat Operator eksekusi kueri.