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-bagian antarmuka pengguna konsol Google Cloud yang disebutkan dalam panduan ini, baca hal berikut:
Menjalankan kueri di konsol Google Cloud
- Buka halaman Instance Spanner di konsol Google Cloud.
-
Pilih nama instance yang berisi database yang ingin Anda kirimkan kueri.
Konsol Google Cloud akan menampilkan halaman Ringkasan instance.
-
Pilih nama database yang ingin Anda buat kueri.
Konsol Google Cloud menampilkan halaman Ringkasan 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 Explanation 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 terhadap database, dan melihat hasilnya serta rencana eksekusi kueri. Komponen utama halaman Spanner Studio diberi nomor dalam 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, menghasilkan hasil kueri di tab Results dan
rencana eksekusi kueri di tab Explanation. Ubah perilaku default menggunakan drop-down untuk menghasilkan Hasil saja atau Penjelasan saja.
Menandai sesuatu di editor akan mengubah perintah Run menjadi Run selected, sehingga Anda dapat menjalankan hanya yang telah Anda pilih.
- Perintah Hapus kueri akan menghapus semua teks di editor dan menghapus subtab Hasil dan Penjelasan.
- Perintah Format kueri memformat pernyataan di 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, panel perintah editor akan menampilkan tanda centang konfirmasi dan pesan Valid. Jika ada masalah, pesan error dengan detail akan ditampilkan.
- Perintah Run mengeksekusi 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 Hasil saja atau Penjelasan saja.
- Editor adalah tempat Anda memasukkan kueri SQL dan pernyataan DML.
Kode ini diberi kode warna dan nomor baris otomatis ditambahkan untuk
pernyataan multibaris.
Jika memasukkan lebih dari satu pernyataan di editor, Anda harus menggunakan titik koma penutup 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 menulis pernyataan di editor.
- Subtab Results menampilkan hasil saat Anda menjalankan pernyataan di editor. Untuk kueri, tabel hasil akan ditampilkan, dan untuk pernyataan DML seperti
INSERT
dan >UPDATE
, pesan tentang jumlah baris yang terpengaruh akan ditampilkan. - Subtab Penjelasan menampilkan grafik visual 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 Instance Spanner di konsol Google Cloud.
-
Klik nama instance dengan kueri yang ingin Anda selidiki.
Konsol Google Cloud akan menampilkan halaman Ringkasan instance.
-
Di menu Navigasi dan pada judul Observabilitas, klik Analisis kueri.
Konsol Google Cloud menampilkan halaman Analisis kueri Instance.
-
Di menu Database drop-down, 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 dan tag permintaan teratas yang diurutkan berdasarkan penggunaan CPU.
-
Temukan kueri dengan penggunaan CPU tinggi yang ingin Anda lihat rencana kueri sampelnya. Klik nilai FPRINT dari kueri tersebut.
Halaman Detail kueri menampilkan grafik Contoh paket kueri untuk kueri Anda dari waktu ke waktu. Anda dapat memperkecil 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 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 rencana kueri dan membandingkan performa kueri dari waktu ke waktu. Untuk kueri yang menggunakan CPU lebih tinggi, Spanner mempertahankan rencana kueri sampel selama 30 hari di halaman Insight kueri di konsol Google Cloud. Untuk melihat contoh paket kueri:
Mengikuti tur visualizer rencana kueri
Komponen utama visualiser dianotasikan dalam screenshot berikut dan dijelaskan secara lebih mendetail. Setelah menjalankan kueri di tab kueri, pilih tab EXPLANATION di bawah editor kueri untuk membuka visualiser 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.
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 isyarat 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 mewakili jumlah baris. Makin tebal garis, makin besar jumlah baris yang diteruskan ke node berikutnya. Jumlah baris yang sebenarnya ditampilkan di setiap kartu dan saat Anda mengarahkan kursor 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 rencana untuk melihat detail di panel informasi di sebelah kanan (5).
- 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 signifikan adalah operator yang menunjukkan latensi yang signifikan, menggunakan CPU yang signifikan dibandingkan dengan operator lain, dan menampilkan jumlah baris data yang signifikan.
- Linimasa eksekusi kueri adalah grafik berbasis waktu yang menunjukkan berapa lama setiap grup mesin menjalankan bagian kuerinya. Grup mesin mungkin tidak selalu berjalan selama seluruh durasi waktu berjalan kueri. Grup mesin juga dapat dijalankan beberapa kali selama menjalankan kueri, tetapi linimasa di sini hanya menunjukkan awal pertama kali dijalankan dan akhir terakhir kali dijalankan.
Menyesuaikan kueri yang berperforma 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 belakangan ini mengalami beberapa masalah performa.
Sebagai developer utama untuk layanan tersebut, Anda diminta untuk menyelidiki masalah performa ini karena menyebabkan rating buruk untuk layanan. 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 tersebut 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 di langkah sebelumnya memerlukan waktu lebih dari dua menit, tetapi kita tidak tahu apakah kueri tersebut seefisien mungkin dan, karenanya, apakah durasi ini sudah diperkirakan.
Anda memilih tab EXPLANATION 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 telah dipindai dan kurang dari 64 ribu baris 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 dieksekusi di satu atau beberapa mesin. Memilih grup mesin di linimasa akan menandai pada rencana visual bagian kueri yang dieksekusi di grup tersebut.
Karena faktor-faktor ini, Anda memutuskan bahwa peningkatan performa mungkin dapat dilakukan dengan mengubah join dari join penerapan, yang dipilih Spanner secara default, menjadi join hash.
Meningkatkan kueri
Untuk meningkatkan performa kueri, Anda menggunakan petunjuk join untuk mengubah metode join menjadi join hash. Implementasi join ini mengeksekusi pemrosesan berbasis set.
Berikut adalah 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 yang signifikan dari runtime 120 detik sebelum perubahan ini.
Periksa rencana visual baru, yang ditampilkan dalam diagram berikut, untuk melihat apa yang disampaikannya tentang peningkatan ini.
Anda akan segera melihat beberapa perbedaan:
Hanya satu grup mesin yang terlibat dalam eksekusi kueri ini.
Jumlah agregasi telah dikurangi secara drastis.
Kesimpulan
Dalam skenario ini, kita menjalankan kueri lambat dan melihat rencana visualnya untuk mencari inefisiensi. Berikut adalah ringkasan kueri dan rencana sebelum dan setelah 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 title tabel memenuhi syarat filter LIKE
'% the %'
. Mencari ke tabel lain dengan begitu banyak baris kemungkinan akan
mahal. Mengubah implementasi join menjadi join hash meningkatkan performa secara signifikan.
Langkah selanjutnya
Untuk referensi rencana kueri lengkap, lihat Rencana eksekusi kueri.
Untuk referensi operator lengkap, lihat Operator eksekusi kueri.