Menyesuaikan kueri menggunakan visualizer rencana kueri

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

  1. Buka halaman Instances Spanner di Google Cloud konsol.

    Buka halaman Instances

  2. Pilih nama instance yang berisi database yang ingin Anda kueri.

    Google Cloud Konsol menampilkan halaman Overview instance.

  3. Pilih nama database yang ingin Anda kueri.

    Google Cloud Konsol menampilkan halaman Overview database.

  4. Di menu samping, klik Spanner Studio.

    Google Cloud Konsol menampilkan halaman Spanner Studio database.

  5. Masukkan kueri SQL di panel editor.
  6. Klik Run.

    Spanner menjalankan kueri.

  7. 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.

Halaman editor kueri yang diberi anotasi dengan komponen utama yang diberi nomor.
Gambar 7. Halaman editor kueri yang diberi anotasi.
  1. 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.

  2. 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.

  3. 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.

  4. 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 INSERT dan UPDATE subtab 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.

Melihat 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:

  1. Buka halaman Instances Spanner di Google Cloud konsol.

    Buka halaman Instances

  2. Klik nama instance dengan kueri yang ingin Anda selidiki.

    Google Cloud Konsol menampilkan halaman Overview instance.

  3. Di menu Navigation dan di bagian Observability, klik Query insights.

    Google Cloud Konsol menampilkan halaman Query insights Instance.

  4. 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.

  5. 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.

  6. 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.

    Grafik contoh paket kueri.
    Gambar 8. Grafik 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 kueri yang dianotasi
Gambar 9. Visualizer paket kueri yang diberi anotasi.

  1. 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.
  2. 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.

    Thumbnail screenshot rencana visual
    Gambar 9. Contoh paket visual (Klik untuk memperbesar).
    Screenshot rencana visual yang diperbesar

    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).

  3. 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.
  4. 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:

    1. Di Spanner Studio, jalankan kueri.
    2. Pilih tab Explanation.
    3. Klik DOWNLOAD JSON untuk mendownload versi JSON dari paket eksekusi.
    4. Simpan dan salin konten file JSON.
    5. Buka tab editor kueri baru.
    6. Di tab editor, masukkan:
        PROTO:
        CONTENT_OF_JSON
      
    7. Klik Run.
    8. Pilih tab Explanation di bawah editor kueri untuk melihat representasi visual dari paket eksekusi yang didownload.
  5. 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.

Editor kueri yang menampilkan kueri asli
Gambar 1. Editor kueri yang menampilkan kueri asli.

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.

Visualizer rencana kueri yang menampilkan penjelasan visual kueri asli
Gambar 2. Visualizer paket kueri yang menampilkan paket visual kueri asli.

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 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.

Editor kueri yang menampilkan kueri yang ditingkatkan
Gambar 3. Editor kueri yang menampilkan kueri yang ditingkatkan.

Periksa paket visual baru, yang ditampilkan dalam diagram berikut, untuk melihat apa yang dapat kita ketahui tentang peningkatan ini.

Visualisasi kueri di UI Konsol Cloud
Gambar 4. Visualisasi paket kueri setelah peningkatan kueri (Klik untuk memperbesar).

Screenshot rencana visual yang diperbesar

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;
Tampilan ringkas rencana visual sebelum peningkatan.
Gambar 5. Tampilan ringkas paket visual sebelum peningkatan.

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;
Tampilan ringkas rencana visual setelah peningkatan.
Gambar 6. Tampilan ringkas paket visual setelah peningkatan.

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