Visualizer paket kueri memungkinkan Anda dengan cepat memahami struktur paket kueri yang dipilih oleh Spanner untuk mengevaluasi kueri. Panduan ini menjelaskan cara menggunakan paket kueri untuk membantu Anda memahami eksekusi kueri.
Sebelum memulai
Untuk memahami bagian-bagian antarmuka pengguna Konsol Google Cloud yang disebutkan dalam panduan ini, baca artikel berikut:
Menjalankan kueri di konsol Google Cloud
- Buka halaman Instance Spanner di Google Cloud Console.
-
Pilih nama instance berisi database yang ingin Anda kueri.
Google Cloud Console menampilkan halaman Overview instance.
-
Pilih nama database yang ingin Anda kueri.
Konsol Google Cloud menampilkan halaman Overview database.
-
Di menu samping, klik Spanner Studio.
Konsol Google Cloud menampilkan halaman Spanner Studio database.
- Masukkan kueri SQL di panel editor.
-
Klik Run.
Spanner menjalankan kueri.
- Klik tab Penjelasan untuk melihat visualisasi rencana kueri.
Tur editor kueri
Halaman Spanner Studio menyediakan tab kueri yang memungkinkan Anda mengetik atau menempelkan kueri SQL dan pernyataan DML, menjalankannya pada database Anda, serta melihat hasil dan rencana eksekusi kuerinya. Komponen utama halaman Spanner Studio diberi nomor pada screenshot berikut.
- Panel tab menampilkan tab kueri yang telah Anda buka. Untuk membuat tab baru,
klik Tab baru.
Panel tab 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 mengeksekusi pernyataan yang dimasukkan di panel pengeditan, memberikan hasil kueri di tab Results dan rencana eksekusi kueri di tab Penjelasan. Ubah perilaku default menggunakan drop-down untuk menghasilkan Hasil saja atau Hanya penjelasan.
Menyoroti sesuatu di editor akan mengubah perintah Run menjadi Run selected, sehingga Anda dapat mengeksekusi apa yang telah dipilih.
- Perintah Clear query menghapus semua teks di editor dan menghapus subtab Results dan Explanation.
- Perintah Format query memformat pernyataan di editor agar lebih mudah dibaca.
- Perintah Shortcuts menampilkan serangkaian pintasan keyboard yang dapat Anda gunakan di editor.
- Link Bantuan kueri SQL membuka tab browser untuk dokumentasi tentang sintaksis kueri SQL.
Kueri divalidasi secara otomatis setiap kali diperbarui di editor. Jika pernyataan tersebut valid, kolom perintah editor akan menampilkan tanda centang konfirmasi dan pesan Valid. Jika ada masalah, pesan error beserta detailnya akan ditampilkan.
- Perintah Run mengeksekusi pernyataan yang dimasukkan di panel pengeditan, memberikan hasil kueri di tab Results dan rencana eksekusi kueri di tab Penjelasan. Ubah perilaku default menggunakan drop-down untuk menghasilkan Hasil saja atau Hanya penjelasan.
- Editor adalah tempat Anda memasukkan kueri SQL dan pernyataan DML.
Baris tersebut berkode warna dan nomor baris ditambahkan secara otomatis untuk
pernyataan multibaris.
Jika memasukkan lebih dari satu pernyataan di editor, Anda harus menggunakan penghentian titik koma setelah setiap pernyataan kecuali yang terakhir.
- Panel bawah tab kueri menyediakan tiga subtab:
- Subtab Skema menampilkan tabel dalam database dan skemanya. Gunakan sebagai referensi cepat saat membuat pernyataan di editor.
- Subtab Hasil menampilkan hasil saat Anda menjalankan pernyataan di editor. Untuk kueri, tampilan ini menampilkan tabel hasil, dan
untuk pernyataan DML seperti
INSERT
dan >UPDATE
, akan ditampilkan pesan tentang jumlah baris yang terpengaruh. - Subtab Penjelasan menampilkan grafik visual rencana 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 sampel paket kueri
- Buka halaman Instance Spanner di Google Cloud Console.
-
Klik nama instance dengan kueri yang ingin Anda selidiki.
Google Cloud Console menampilkan halaman Overview instance.
-
Di menu Navigasi dan di bagian judul Kemampuan observasi, klik Query insights.
Konsol Google Cloud akan menampilkan halaman Query insights Instance.
-
Di menu drop-down Database, pilih database dengan kueri yang ingin Anda selidiki.
Konsol Google Cloud menampilkan informasi pemuatan kueri untuk database. Tabel kueri dan tag TopN menampilkan daftar kueri teratas dan tag permintaan yang diurutkan berdasarkan pemakaian CPU.
-
Temukan kueri dengan pemakaian CPU tinggi yang ingin Anda lihat paket kueri sampelnya. Klik nilai FPRINT dari kueri tersebut.
Halaman Query details menampilkan grafik Query plans sample untuk kueri Anda dari waktu ke waktu. Anda dapat memperkecil hingga maksimum tujuh hari sebelum waktu saat ini. Catatan: Paket kueri tidak didukung untuk kueri dengan partitionTokens yang diperoleh dari kueri PartitionQuery API dan DML Terpartisi.
-
Klik salah satu titik dalam 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.
Dalam beberapa kasus, Anda mungkin ingin melihat contoh paket kueri dan membandingkan performa kueri dari waktu ke waktu. Untuk kueri yang menggunakan CPU yang lebih tinggi, Spanner mempertahankan sampel paket kueri selama 30 hari di halaman Insight kueri di Konsol Google Cloud. Untuk melihat contoh paket kueri:
Ikuti tur visualizer rencana kueri
Komponen utama visualizer dianotasi dalam screenshot berikut dan dijelaskan secara lebih mendetail. Setelah menjalankan kueri di tab kueri, pilih tab EXPLANATION di bawah editor kueri untuk membuka visualizer rencana eksekusi kueri.
Aliran data dalam diagram berikut bersifat bottom-up, yaitu semua tabel dan indeks berada di bagian bawah diagram dan output akhirnya berada di bagian atas.
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, latensinya, dan jumlah CPU yang dipakai.
- Kami memberikan petunjuk visual berikut untuk membantu Anda mengidentifikasi potensi masalah dalam rencana eksekusi kueri.
- Batang merah pada node adalah indikator visual persentase latensi atau waktu CPU untuk iterator ini dibandingkan dengan total 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 mengarahkan pointer ke konektor.
- Segitiga peringatan ditampilkan pada node tempat pemindaian tabel lengkap 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 detailnya di panel informasi di sebelah kanan (5).
- Informasi iterator memberikan detail, serta statistik runtime, untuk kartu iterator yang Anda pilih dalam grafik.
- Query summary memberikan detail tentang jumlah baris yang ditampilkan dan waktu yang diperlukan untuk menjalankan kueri. Operator terkemuka adalah yang menunjukkan latensi yang signifikan, menggunakan CPU dalam jumlah yang signifikan dibandingkan operator lain, dan menampilkan baris data dalam jumlah yang signifikan.
- Query execution timeline adalah grafik berbasis waktu yang menunjukkan durasi berapa lama setiap grup mesin menjalankan bagian kuerinya. Grup mesin mungkin belum tentu berjalan selama durasi kueri. Ada kemungkinan bahwa grup mesin berjalan beberapa kali selama menjalankan kueri, tetapi linimasa di sini hanya menunjukkan awal saat pertama kali dijalankan dan akhir dari terakhir kali dijalankan.
Menyesuaikan kueri yang menunjukkan performa buruk
Bayangkan perusahaan Anda menjalankan {i>database<i} film {i>online<i} yang berisi informasi tentang film seperti pemeran film, perusahaan produksi, detail film, dan banyak lagi. Layanan berjalan di Spanner, tetapi mengalami beberapa masalah performa akhir-akhir ini.
Sebagai developer prospek untuk layanan, Anda diminta untuk menyelidiki masalah performa ini karena memberikan rating yang buruk untuk layanan tersebut. Buka konsol Google Cloud, buka instance database Anda, lalu buka editor kueri. Masukkan kueri berikut ke editor dan jalankan.
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 tersebut valid.
Tab RESULTS di bawah editor kueri menunjukkan bahwa kueri selesai hanya dalam waktu lebih dari dua menit. Anda memutuskan untuk melihat lebih dekat pada kueri tersebut untuk mengetahui 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.
Pilih 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 melakukan pengamatan berikut.
Berdasarkan Ringkasan kueri di panel informasi di sebelah kanan, kita mengetahui bahwa hampir 3 juta baris dipindai dan di bawah 64K akhirnya ditampilkan.
Kita juga dapat melihat dari panel Query execution linimasa bahwa ada 4 kelompok mesin yang 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 dijalankan pada grup tersebut pada rencana visual.
Karena faktor-faktor ini, Anda memutuskan bahwa peningkatan performa mungkin dapat dilakukan dengan mengubah penggabungan dari penerapan, yang dipilih Spanner secara default, menjadi gabung hash.
Memperbaiki kueri
Untuk meningkatkan performa kueri, Anda menggunakan petunjuk join untuk mengubah metode join menjadi hash join. Implementasi join ini menjalankan pemrosesan berbasis set.
Berikut kueri yang diupdate:
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 di screenshot, kueri selesai dalam waktu kurang dari 5 detik, peningkatan yang signifikan pada runtime selama 120 detik sebelum perubahan ini.
Periksa rencana visual baru, yang ditampilkan dalam diagram berikut, untuk melihat apa yang ditunjukkan kepada kita tentang peningkatan ini.
Anda akan segera 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 yang 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 secara 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 hal 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 cenderung
menjadi mahal. Mengubah implementasi join menjadi hash join meningkatkan performa secara signifikan.
Langkah selanjutnya
Untuk referensi paket kueri yang lengkap, lihat Rencana eksekusi kueri.
Untuk referensi operator lengkap, lihat Operator eksekusi kueri.