Ringkasan pengoptimal kueri

Halaman ini menjelaskan pengoptimal kueri Spanner dan manfaatnya.

Ringkasan

Pengoptimal kueri SQL Spanner mengonversi pernyataan SQL deklaratif, yang mendeskripsikan data yang diinginkan kueri, menjadi rencana eksekusi imperatif, yang menjelaskan suatu cara untuk mendapatkan data tersebut secara tepat. Proses transformasi pernyataan deklaratif menjadi rencana eksekusi kueri melibatkan transformasi ke struktur hierarki yang digunakan untuk merepresentasikan kueri. Pengoptimal, dalam proses menghasilkan rencana eksekusi, mempertahankan makna logis kueri SQL asli sehingga baris yang benar ditampilkan.

Peran penting lainnya dari pengoptimal adalah menghasilkan rencana eksekusi yang efisien.

Bagaimana pengoptimal Spanner menghasilkan rencana eksekusi yang efisien?

Pengoptimal Spanner menggunakan kombinasi heuristik yang andal dan pengoptimalan berbasis biaya untuk menghasilkan rencana yang efisien. Beberapa heuristik sangat mudah, seperti "melakukan filter pada mesin jarak jauh, bukan mengambil data ke mesin lokal". Heuristik lainnya lebih kompleks, tetapi tetap menerapkan prinsip pemindahan logika yang mengurangi volume data lebih dekat dengan data. Prinsip tersebut sangat penting dalam sistem yang melakukan sharding data di beberapa mesin.

Tidak semua keputusan eksekusi dapat dibuat secara efektif menggunakan aturan tetap tersebut, sehingga optimizer juga membuat keputusan berdasarkan perkiraan biaya alternatif. Estimasi biaya tersebut dihitung menggunakan struktur kueri, skema database, dan estimasi volume data yang akan dihasilkan oleh fragmen kueri. Misalnya, Spanner akan memperkirakan jumlah baris tabel Lagu yang memenuhi syarat filter SongGenre = "Country" jika filter tersebut muncul dalam kueri. Untuk membantu komputasi estimasi tersebut, Spanner secara berkala mengumpulkan statistik untuk mengkarakterisasi distribusi data dalam database.

Selain itu, Spanner mengoptimalkan eksekusi kueri dengan menentukan secara otomatis apakah metode pemrosesan berorientasi baris atau kolom harus digunakan untuk kueri tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan pemindaian.

Untuk mempelajari lebih lanjut rencana eksekusi kueri dan cara penggunaannya oleh Spanner untuk menjalankan kueri di lingkungan terdistribusi, lihat Rencana eksekusi kueri.

Pembuatan versi pengoptimal kueri

Seiring waktu, pengoptimal kueri Spanner akan berkembang, sehingga memperluas kumpulan pilihan dalam rencana eksekusi kueri dan meningkatkan akurasi perkiraan yang menjadi dasar pilihan tersebut, sehingga menghasilkan rencana eksekusi kueri yang lebih efisien.

Spanner merilis update pengoptimal sebagai versi pengoptimal kueri baru untuk meningkatkan efisiensi rencana eksekusi kuerinya. Untuk mempelajari lebih lanjut tentang berbagai versi, lihat versi pengoptimal kueri Spanner.

Paket statistik pengoptimal kueri

Spanner mempertahankan statistik tentang distribusi data kolom tabel untuk membantu memperkirakan jumlah baris yang akan dihasilkan oleh kueri. Pengoptimal kueri menggunakan estimasi ini untuk membantu memilih rencana eksekusi kueri terbaik. Statistik ini diperbarui secara berkala oleh Spanner. Karena statistik digunakan untuk memilih rencana eksekusi kueri, saat statistik diperbarui, Spanner dapat mengubah paket kueri yang digunakan untuk kueri.

Secara default, database secara otomatis menggunakan paket statistik yang terakhir dibuat. Anda dapat menyematkan database ke versi paket statistik sebelumnya. Anda juga memiliki opsi untuk menjalankan setiap kueri dengan paket statistik selain yang terbaru.

Membuat paket statistik baru

Spanner akan otomatis membuat paket statistik baru setiap tiga hari. Untuk membuat paket statistik baru secara manual, gunakan pernyataan DDL ANALYZE GoogleSQL atau pernyataan DDL ANALYZE PostgreSQL.

Setelah perubahan signifikan pada data atau skema database Anda, pembuatan paket statistik baru dapat menguntungkan performa kueri. Sebagai praktik terbaik, buat paket statistik baru jika hal berikut terjadi:

  • Database memproses penyisipan, pembaruan, atau penghapusan dalam jumlah besar.
  • Anda menambahkan indeks baru ke database.
  • Anda menambahkan kolom baru ke tabel.

Menjalankan pernyataan DDL ANALYZE akan memperbarui skema Anda, dan memulai operasi yang berjalan lama.

Setelah Spanner selesai menjalankan pernyataan, perlu waktu hingga sepuluh menit bagi pengoptimal kueri untuk memperhitungkan paket statistik baru dalam perencanaan kuerinya.

Pembersihan sampah memori dari paket statistik

Paket statistik di Spanner disimpan selama 30 hari sejak dibuat, setelah itu akan dilakukan pembersihan sampah memori.

Tabel INFORMATION_SCHEMA.SPANNER_STATISTICS bawaan Spanner berisi daftar paket statistik yang tersedia. Setiap baris dalam tabel ini mencantumkan paket statistik berdasarkan nama, dan namanya berisi stempel waktu pembuatan paket yang ditentukan. Setiap entri juga berisi kolom yang disebut ALLOW_GC yang menentukan apakah paket dapat dibersihkan sebagai sampah memori atau tidak.

Anda dapat menyematkan seluruh database ke salah satu paket yang tercantum dalam tabel tersebut. Paket statistik yang disematkan tidak akan dibersihkan sampah memorinya dan nilai ALLOW_GC akan diabaikan selama database disematkan ke paket ini. Untuk menggunakan paket statistik tertentu untuk setiap kueri, paket harus dicantumkan dengan ALLOW_GC=FALSE atau disematkan. Hal ini mencegah kueri gagal setelah paket statistik dibersihkan dari sampah memori. Anda dapat mengubah nilai ALLOW_GC menggunakan pernyataan DDL ALTER STATISTICS GoogleSQL atau ALTER STATISTICS PostgreSQL.

Retensi paket dan Informasi Identitas Pribadi (PII)

Paket statistik berisi histogram data kolom, sesuai dengan praktik industri standar. Hal ini membantu pengoptimal kueri memilih rencana kueri yang optimal. Histogram dibuat menggunakan sampel kecil nilai. Set data kecil ini berpotensi berisi PII.

Spanner membuat paket statistik baru secara teratur dan mempertahankannya selama 30 hari secara default. Dengan demikian, sampel kecil nilai yang dihapus dari database dapat dipertahankan selama 30 hari tambahan dalam histogram statistik. Paket statistik yang disematkan dengan opsi database optimizer_statistics_package atau paket dengan opsi ALLOW_GC=FALSE tidak akan dibersihkan sampah memorinya. Histogram dalam paket ini dapat berisi nilai yang dihapus dari database untuk periode yang lebih lama. Selain itu, konten paket statistik disertakan dalam cadangan database.

Statistik pengoptimal disimpan dengan dienkripsi dengan cara yang sama seperti data pengguna.

Jumlah total penyimpanan yang diperlukan untuk paket ini biasanya kurang dari 100 MB, dan diperhitungkan terhadap total biaya penyimpanan Anda.

Langkah selanjutnya