Ringkasan pengoptimal kueri

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