Dengan Query Explain, Anda dapat mengirimkan kueri mode Datastore
ke backend dan menerima statistik performa mendetail tentang eksekusi kueri
backend sebagai gantinya. Library ini berfungsi seperti operasi EXPLAIN ANALYZE
di banyak
sistem database relasional.
Anda dapat mengirim permintaan Query Explain menggunakan library klien mode Datastore.
Hasil Kueri Explain membantu Anda memahami bagaimana kueri dijalankan, yang menunjukkan inefisiensi dan lokasi kemungkinan bottleneck sisi server.
Penjelasan Kueri:
- Memberikan insight tentang fase perencanaan sehingga Anda dapat menyesuaikan indeks kueri dan meningkatkan efisiensi.
- Membantu Anda memahami biaya dan performa per kueri dan memungkinkan Anda melakukan iterasi dengan cepat melalui berbagai pola kueri untuk mengoptimalkan penggunaannya.
Memahami opsi Penjelasan Kueri: default dan analisis
Operasi Query Explain dapat dilakukan menggunakan opsi default atau opsi analyze.
Dengan opsi default, Query Explain akan merencanakan kueri, tetapi akan melewati tahap eksekusi. Tindakan ini akan menampilkan informasi tahap perencana. Anda dapat menggunakannya untuk memeriksa apakah kueri memiliki indeks yang diperlukan dan memahami indeks mana yang digunakan. Hal ini akan membantu Anda memverifikasi, misalnya, bahwa kueri tertentu menggunakan indeks komposit daripada harus berpotongan di banyak indeks yang berbeda.
Dengan opsi analisis, Query Explain kedua paket dan menjalankan kueri. Tindakan ini akan menampilkan semua informasi perencana yang disebutkan sebelumnya beserta statistik dari runtime eksekusi kueri. Hal ini akan mencakup informasi penagihan beserta insight tingkat sistem tentang eksekusi kueri. Anda dapat menggunakan alat ini untuk menguji berbagai konfigurasi kueri dan indeks guna mengoptimalkan biaya dan latensi.
Apa yang dimaksud dengan biaya Penjelasan Kueri?
Jika kueri dijelaskan dengan opsi default, tidak ada operasi indeks atau baca yang akan dijalankan. Terlepas dari kompleksitas kueri, satu operasi baca akan dikenai biaya.
Saat kueri dijelaskan dengan opsi analisis, operasi indeks dan baca akan dilakukan, sehingga Anda akan dikenai biaya untuk kueri tersebut seperti biasa. Tidak ada biaya tambahan untuk aktivitas analisis, hanya biaya biasa untuk kueri yang dijalankan.
Menjalankan kueri dengan opsi default
Anda dapat menggunakan library klien untuk mengirimkan permintaan opsi default.
Perhatikan bahwa hasil penjelasan kueri diautentikasi dengan Identity and Access Management, menggunakan izin yang sama untuk operasi kueri biasa.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk mode Datastore, lihat Library klien mode Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java mode Datastore.
Untuk melakukan autentikasi ke mode Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Lihat kolom indexes_used
dalam respons untuk mempelajari indeks yang digunakan dalam paket kueri:
"indexes_used": [ {"query_scope": "Collection Group", "properties": "(__name__ ASC)"}, ]
Untuk mengetahui informasi selengkapnya tentang laporan, lihat referensi laporan.
Menjalankan kueri dengan opsi analisis
Anda dapat menggunakan library klien untuk mengirimkan permintaan opsi default.
Perlu diperhatikan bahwa hasil analisis kueri diautentikasi dengan Identity and Access Management (IAM), menggunakan izin yang sama untuk operasi kueri reguler.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk mode Datastore, lihat Library klien mode Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java mode Datastore.
Untuk melakukan autentikasi ke mode Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Lihat objek executionStats
untuk menemukan informasi pembuatan profil kueri, seperti:
{ "resultsReturned": "5", "executionDuration": "0.100718s", "readOperations": "5", "debugStats": { "index_entries_scanned": "95000", "documents_scanned": "5" "billing_details": { "documents_billable": "5", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
Untuk mengetahui informasi selengkapnya tentang laporan, lihat referensi laporan.
Menafsirkan hasil dan melakukan penyesuaian
Contoh skenario berikut membuat kueri film berdasarkan genre dan negara produksi, serta menunjukkan cara mengoptimalkan indeks yang digunakan oleh kueri.
Untuk mengetahui informasi selengkapnya tentang laporan, lihat referensi laporan Penjelasan Kueri.
Sebagai ilustrasi, asumsikan nilai yang setara dengan kueri SQL ini.
SELECT * FROM movies WHERE category = 'Romantic' AND country = 'USA';
Jika kita menggunakan opsi analisis, output laporan berikut akan menunjukkan
kueri yang dijalankan pada indeks kolom tunggal (category ASC, __name__ ASC)
dan
(country ASC, __name__ ASC)
. Metode ini memindai 16.500 entri indeks, tetapi hanya menampilkan 1.200 dokumen.
// Output query planning info "indexes_used": [ {"query_scope": "Collection Group", "properties": "(category ASC, __name__ ASC)"}, {"query_scope": "Collection Group", "properties": "(country ASC, __name__ ASC)"}, ] // Output query status { "resultsReturned": "1200", "executionDuration": "0.118882s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "16500", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
Untuk mengoptimalkan performa eksekusi kueri, Anda dapat membuat indeks komposit yang tercakup sepenuhnya (kategori ASC, ASC negara, __name__ ASC).
Dengan menjalankan kembali kueri dalam mode analisis, kita dapat melihat bahwa indeks yang baru dibuat dipilih untuk kueri ini, dan kueri berjalan jauh lebih cepat dan lebih efisien.
// Output query planning info "indexes_used": [ {"query_scope": "Collection Group", "properties": "(category ASC, country ASC, __name__ ASC)"} ] // Output query stats { "resultsReturned": "1200", "executionDuration": "0.026139s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "1200", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
Langkah selanjutnya
- Pelajari laporan Penjelasan Kueri lebih lanjut
- Pelajari lebih lanjut cara mengoptimalkan kueri dan indeks