Halaman ini menjelaskan pengoptimal kueri Spanner dan manfaatnya.
Ringkasan
Pengoptimal kueri SQL Spanner mengonversi pernyataan SQL deklaratif, yang menjelaskan data yang diinginkan kueri, menjadi rencana eksekusi imperatif, yang menjelaskan satu cara untuk mendapatkan data tersebut secara akurat. Proses mengubah pernyataan deklaratif menjadi rencana eksekusi kueri melibatkan melakukan transformasi pada struktur hierarki yang digunakan untuk merepresentasikan kueri. Pengoptimal, dalam proses pembuatan 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 cara pengoptimal Spanner menghasilkan rencana eksekusi yang efisien?
Pengoptimal Spanner menggunakan kombinasi heuristik yang sudah mapan dan pengoptimalan berbasis biaya untuk menghasilkan rencana yang efisien. Beberapa heuristik sangat sederhana, seperti "melakukan filter pada mesin jarak jauh, bukan mengambil data ke mesin lokal". Heuristik lainnya lebih kompleks, tetapi masih merepresentasikan prinsip logika pemindahan yang mengurangi volume data lebih dekat ke data. Prinsip tersebut sangat penting dalam sistem yang mengelompokkan data di beberapa komputer.
Tidak semua keputusan eksekusi dapat dibuat secara efektif menggunakan aturan tetap tersebut, sehingga
pengoptimal Spanner juga membuat keputusan berdasarkan estimasi 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 Songs yang memenuhi syarat filter
SongGenre = "Country"
jika filter tersebut muncul dalam kueri. Untuk membantu
komputasi estimasi tersebut, Spanner secara berkala mengumpulkan
statistik untuk mencirikan distribusi data dalam database.
Selain itu, Spanner mengoptimalkan eksekusi kueri dengan secara otomatis menentukan apakah metode pemrosesan berorientasi baris atau kolom harus digunakan untuk kueri. Untuk 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, memperluas kumpulan pilihan dalam rencana eksekusi kueri dan meningkatkan akurasi estimasi yang menginformasikan 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 berbagai versi, lihat Versi pengoptimal kueri Spanner.
Paket statistik pengoptimal kueri
Spanner menyimpan 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 rencana kueri yang digunakan untuk kueri.
Secara default, database otomatis menggunakan paket statistik terbaru yang 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 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, membuat paket statistik baru dapat meningkatkan 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, memulai
operasi yang berjalan lama, dan membatalkan pembuatan statistik yang dipicu secara otomatis.
Setelah Spanner selesai mengeksekusi pernyataan, perlu waktu hingga sepuluh menit bagi pengoptimal kueri untuk memperhitungkan paket statistik baru dalam perencanaan kuerinya.
Pembersihan sampah memori paket statistik
Paket statistik di Spanner disimpan selama 30 hari sejak pembuatannya, setelah itu paket tersebut akan dihapus oleh pembersihan sampah.
Tabel INFORMATION_SCHEMA.SPANNER_STATISTICS
bawaan Spanner berisi daftar paket statistik yang tersedia. Setiap baris dalam tabel ini
mencantumkan paket statistik berdasarkan nama, dan nama tersebut berisi stempel waktu pembuatan
paket tertentu. Setiap entri juga berisi kolom bernama ALLOW_GC
yang
menentukan apakah paket dapat di-garbage collection atau tidak.
Anda dapat menyematkan seluruh database ke salah satu paket yang tercantum dalam
tabel tersebut. Paket statistik yang disematkan tidak akan di-garbage collection 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 di-garbage collection. Anda dapat mengubah nilai
ALLOW_GC
menggunakan pernyataan DDL ALTER STATISTICS
GoogleSQL atau PostgreSQL
ALTER STATISTICS
.
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 nilai yang kecil. Set data kecil ini berpotensi berisi PII.
Spanner membuat paket statistik baru secara rutin dan
menyimpan paket tersebut 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 dihapus sampahnya.
Histogram dalam paket ini mungkin berisi nilai yang dihapus dari database selama
periode yang lebih lama. Selain itu, konten paket statistik disertakan dalam
pencadangan database.
Statistik pengoptimal disimpan terenkripsi dengan cara yang sama seperti data pengguna.
Jumlah total penyimpanan yang diperlukan untuk paket ini biasanya kurang dari 100 MB, dan diperhitungkan dalam total biaya penyimpanan Anda.
Langkah selanjutnya
- Untuk mempelajari histori pengoptimal kueri lebih lanjut, lihat Histori versi pengoptimal kueri.
- Untuk mengelola versi pengoptimal dan paket statistik untuk skenario Anda, lihat Mengelola pengoptimal kueri.