Visualisasi rencana kueri memungkinkan Anda memahami struktur rencana kueri yang dipilih oleh Spanner untuk mengevaluasi kueri dengan cepat. Panduan ini menjelaskan cara menggunakan rencana kueri untuk membantu Anda memahami eksekusi kueri.
Sebelum memulai
Untuk memahami bagian antarmuka pengguna konsol Google Cloud yang disebutkan dalam panduan ini, baca artikel berikut:
Menjalankan kueri di konsol Google Cloud
- Buka halaman Instances Spanner di konsol Google Cloud .
-
Pilih nama instance yang berisi database yang ingin Anda kueri.
KonsolGoogle Cloud menampilkan halaman Ringkasan instance.
-
Pilih nama database yang ingin Anda kueri.
Google Cloud console menampilkan halaman Overview database.
-
Di menu samping, klik Spanner Studio.
Google Cloud console menampilkan halaman Spanner Studio database.
- Masukkan kueri SQL di panel editor.
-
Klik Run.
Spanner menjalankan kueri.
- Klik tab Penjelasan untuk melihat visualisasi paket kueri.
Tur editor kueri
Halaman Spanner Studio menyediakan tab kueri yang memungkinkan Anda mengetik atau menempelkan kueri SQL dan pernyataan DML, menjalankannya terhadap database, dan melihat hasil serta rencana eksekusi kuerinya. Komponen utama halaman Spanner Studio diberi nomor dalam screenshot berikut.

- Tab bar menampilkan tab kueri yang telah Anda buka. Untuk membuat tab
baru, klik Tab baru.
Tab bar juga menyediakan daftar Template kueri yang dapat Anda gunakan untuk menempelkan kueri yang memberikan insight tentang kueri database, transaksi, pembacaan, dan lainnya, seperti yang dijelaskan dalam Ringkasan alat introspeksi.
- Panel perintah editor menyediakan opsi berikut:
- Perintah Run menjalankan pernyataan yang dimasukkan di
panel pengeditan, menghasilkan hasil kueri di tab Results dan
rencana eksekusi kueri di tab Explanation. Ubah
perilaku default menggunakan drop-down untuk menghasilkan Hanya hasil
atau Hanya penjelasan.
Menandai sesuatu di editor akan mengubah perintah Run menjadi Run selected, sehingga Anda dapat menjalankan hanya apa yang telah Anda pilih.
- Perintah Hapus kueri menghapus semua teks di editor dan menghapus subtab Hasil dan Penjelasan.
- Perintah Format kueri memformat pernyataan dalam editor sehingga lebih mudah dibaca.
- Perintah Pintasan menampilkan kumpulan pintasan keyboard yang dapat Anda gunakan di editor.
- Link Bantuan kueri SQL akan membuka tab browser ke dokumentasi tentang sintaksis kueri SQL.
Kueri divalidasi secara otomatis setiap kali diperbarui di editor. Jika pernyataan valid, perintah editor bar 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
rencana eksekusi kueri di tab Explanation. Ubah
perilaku default menggunakan drop-down untuk menghasilkan Hanya hasil
atau Hanya penjelasan.
- Editor adalah tempat Anda memasukkan kueri SQL dan pernyataan DML.
Kode tersebut 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 titik koma penghentian setelah setiap pernyataan kecuali yang terakhir.
- Panel bawah tab kueri menyediakan tiga subtab:
- Subtab Schema menampilkan tabel dalam database dan skemanya. Gunakan sebagai referensi cepat saat menyusun pernyataan di editor.
- Subtab Results menampilkan hasil saat Anda menjalankan
pernyataan di editor. Untuk kueri, tabel hasil ditampilkan, dan
untuk pernyataan DML seperti
INSERT
dan >UPDATE
pesan tentang jumlah baris yang terpengaruh akan ditampilkan. - Subtab Penjelasan menampilkan grafik visual dari paket kueri yang dibuat saat Anda menjalankan pernyataan di editor.
- Subtab Hasil dan Penjelasan menyediakan pemilih pernyataan yang Anda gunakan untuk memilih hasil pernyataan atau rencana kueri yang ingin Anda lihat.
Melihat contoh paket kueri
- Buka halaman Instances Spanner di konsol Google Cloud .
-
Klik nama instance dengan kueri yang ingin Anda selidiki.
KonsolGoogle Cloud menampilkan halaman Ringkasan instance.
-
Di menu Navigation dan di bagian Observability, klik Query insights.
KonsolGoogle Cloud menampilkan halaman Query insights Instance.
-
Di menu Database drop-down, pilih database dengan kueri yang ingin Anda selidiki.
KonsolGoogle Cloud menampilkan informasi beban kueri untuk database. Tabel kueri dan tag TopN menampilkan daftar kueri dan tag permintaan teratas yang diurutkan berdasarkan pemakaian CPU.
-
Temukan kueri dengan pemanfaatan CPU tinggi yang rencana kuerinya ingin Anda lihat yang disampel. Klik nilai FPRINT kueri tersebut.
Halaman Detail kueri menampilkan grafik Contoh paket kueri untuk kueri Anda dari waktu ke waktu. Anda dapat memperkecil tampilan hingga maksimum tujuh hari sebelum waktu saat ini. Catatan: Rencana kueri tidak didukung untuk kueri dengan partitionTokens yang diperoleh dari PartitionQuery API dan kueri DML Berpartisi.
-
Klik salah satu titik dalam grafik untuk melihat paket kueri yang lebih lama dan memvisualisasikan langkah-langkah yang dilakukan 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 paket kueri yang diambil sampelnya dan membandingkan performa kueri dari waktu ke waktu. Untuk kueri yang menggunakan CPU lebih tinggi, Spanner menyimpan rencana kueri yang diambil sampelnya selama 30 hari di halaman Query insights di konsol Google Cloud . Untuk melihat contoh paket kueri:
Mengikuti tur visualizer rencana kueri
Komponen utama visualizer diberi anotasi dalam screenshot berikut dan dijelaskan secara lebih mendetail. Setelah menjalankan kueri di tab kueri, pilih tab PENJELASAN di bawah editor kueri untuk membuka visualisasi rencana eksekusi kueri.
Alur data dalam diagram berikut adalah dari bawah ke atas, yaitu semua tabel dan indeks berada di bagian bawah diagram dan output akhir berada di bagian atas.

- Visualisasi rencana Anda bisa berukuran besar, bergantung pada kueri yang Anda jalankan. Untuk menyembunyikan dan menampilkan detail, alihkan pemilih tampilan DIPERLUAS/RINGKAS. Anda dapat menyesuaikan seberapa banyak rencana yang Anda lihat dalam satu waktu menggunakan kontrol zoom.
- Aljabar yang menjelaskan cara Spanner menjalankan kueri
digambarkan sebagai grafik asiklik, dengan setiap node sesuai dengan
iterator yang menggunakan baris dari inputnya dan menghasilkan baris ke
induknya. Contoh rencana ditampilkan di Gambar 9. Klik diagram
untuk melihat tampilan yang diperluas dari beberapa detail rencana.
Gambar 9. Contoh rencana visual (Klik untuk memperbesar). Setiap node, atau kartu, pada grafik merepresentasikan iterator dan berisi informasi berikut:
- Nama iterator. Iterator menggunakan baris dari inputnya dan menghasilkan baris.
- Statistik runtime yang memberi tahu Anda berapa banyak baris yang ditampilkan, berapa latensinya, dan berapa banyak CPU yang digunakan.
- Kami memberikan petunjuk visual berikut untuk membantu Anda mengidentifikasi potensi masalah dalam rencana eksekusi kueri.
- Panel 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 menunjukkan jumlah baris. Makin tebal garis, makin besar jumlah baris yang diteruskan ke node berikutnya. Jumlah baris sebenarnya ditampilkan di setiap kartu dan saat Anda menahan kursor di atas 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 rencana untuk melihat detail di panel informasi di sebelah kanan (5).
- Peta mini rencana eksekusi menampilkan tampilan yang diperkecil dari rencana lengkap dan berguna untuk menentukan bentuk keseluruhan rencana eksekusi dan untuk membuka berbagai bagian rencana dengan cepat. Tarik langsung di peta mini atau klik tempat yang ingin Anda fokuskan, untuk berpindah ke bagian lain dari rencana visual.
Pilih DOWNLOAD JSON untuk mendownload versi JSON dari rencana eksekusi, yang berguna untuk memecahkan masalah. Anda juga dapat membagikannya saat menghubungi tim Spanner untuk mendapatkan dukungan. Menyimpan JSON tidak menyimpan hasil kueri.
Untuk mendownload dan menyimpan versi JSON rencana eksekusi untuk divisualisasikan nanti:
- Di Spanner Studio, jalankan kueri.
- Pilih tab Penjelasan.
- Klik DOWNLOAD JSON untuk mendownload versi JSON dari rencana eksekusi.
- Simpan dan salin konten file JSON.
- Buka tab editor kueri baru.
- Di tab editor, masukkan:
PROTO: CONTENT_OF_JSON
- Klik Run.
- Pilih tab Penjelasan 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 rencana kueri. Informasi tersebut
dikelompokkan 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 yang signifikan dibandingkan dengan operator lain, dan menampilkan sejumlah besar baris data.
- Linimasa eksekusi kueri adalah grafik berbasis waktu yang menunjukkan durasi setiap grup mesin menjalankan bagian kuerinya. Grup mesin mungkin tidak selalu berjalan selama seluruh durasi waktu berjalan kueri. Ada juga kemungkinan bahwa grup mesin berjalan beberapa kali selama menjalankan kueri, tetapi linimasa di sini hanya menampilkan waktu mulai saat pertama kali dijalankan dan waktu berakhir saat terakhir kali dijalankan.
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 berjalan di Spanner, tetapi mengalami beberapa masalah performa baru-baru ini.
Sebagai developer utama untuk layanan, Anda diminta untuk menyelidiki masalah performa ini karena menyebabkan rating layanan yang buruk. Anda membuka konsol Google Cloud , 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. Kita memformat kueri di editor dengan memilih FORMAT QUERY. Ada juga catatan di kanan atas layar yang memberi tahu kita bahwa kueri valid.

Tab RESULTS di bawah editor kueri menunjukkan bahwa kueri selesai dalam waktu lebih dari dua menit. Anda memutuskan untuk melihat kueri lebih dekat untuk melihat apakah kueri tersebut efisien.
Menganalisis kueri lambat dengan visualizer rencana 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 sudah sesuai.
Anda memilih tab PENJELASAN tepat di bawah editor kueri untuk melihat representasi visual rencana eksekusi yang dibuat Spanner untuk menjalankan kueri dan menampilkan hasil.
Rencana yang ditampilkan dalam screenshot berikut relatif besar, tetapi bahkan pada tingkat zoom ini, Anda dapat membuat pengamatan berikut.
Berdasarkan Ringkasan kueri di panel informasi di sebelah kanan, kita mengetahui bahwa hampir 3 juta baris dipindai dan kurang dari 64 ribu baris yang akhirnya ditampilkan.
Kita juga dapat melihat dari panel Linimasa eksekusi kueri bahwa 4 grup mesin terlibat dalam kueri. Grup mesin bertanggung jawab atas eksekusi sebagian kueri. Operator dapat melakukan eksekusi di satu atau beberapa mesin. Memilih grup mesin di linimasa akan menandai bagian kueri yang dieksekusi di grup tersebut pada rencana visual.

Karena faktor-faktor ini, Anda memutuskan bahwa peningkatan performa mungkin dapat dilakukan dengan mengubah gabungan dari gabungan penerapan, yang dipilih Spanner secara default, menjadi gabungan hash.
Meningkatkan kualitas 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 menggambarkan kueri yang telah diperbarui. Seperti yang ditunjukkan dalam screenshot, kueri selesai dalam waktu kurang dari 5 detik, peningkatan yang signifikan dibandingkan waktu proses 120 detik sebelum perubahan ini.

Periksa rencana visual baru, yang ditunjukkan dalam diagram berikut, untuk melihat apa yang dapat kita pelajari dari peningkatan ini.

Segera, Anda akan melihat beberapa perbedaan:
Hanya satu grup mesin yang terlibat dalam eksekusi kueri ini.
Jumlah agregasi telah berkurang secara drastis.
Kesimpulan
Dalam skenario ini, kami menjalankan kueri lambat dan melihat rencana visualnya untuk mencari inefisiensi. Berikut adalah ringkasan kueri dan rencana sebelum dan sesudah perubahan dilakukan. Setiap tab menampilkan kueri yang dijalankan dan tampilan ringkas visualisasi rencana 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 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 kami menjadi gabungan hash meningkatkan performa secara signifikan.
Langkah berikutnya
Untuk referensi lengkap rencana kueri, lihat Rencana eksekusi kueri.
Untuk referensi operator lengkap, lihat Operator eksekusi kueri.