Memahami slot
Slot BigQuery adalah CPU virtual yang digunakan BigQuery untuk menjalankan kueri SQL. Selama eksekusi kueri, BigQuery akan otomatis menghitung jumlah slot yang diperlukan kueri, bergantung pada ukuran dan kompleksitas kueri.
Anda dapat menggunakan model harga on demand atau model harga berbasis kapasitas. Kedua model ini menggunakan slot untuk pemrosesan data. Dengan model berbasis kapasitas, Anda dapat membayar kapasitas pemrosesan kueri khusus atau terskala otomatis. Model berbasis kapasitas memberi Anda kontrol eksplisit atas slot dan kapasitas analisis, sedangkan model on demand tidak.
Pelanggan pada model harga berbasis kapasitas secara eksplisit memilih jumlah slot yang akan direservasi. Kueri Anda berjalan dalam kapasitas tersebut, dan Anda membayar kapasitas tersebut secara terus-menerus setiap detik setelah di-deploy. Misalnya, jika Anda membeli 2.000 slot BigQuery, kueri secara keseluruhan dibatasi untuk menggunakan 2.000 CPU virtual pada waktu tertentu. Anda memiliki kapasitas ini sampai Anda menghapusnya, dan Anda membayar untuk 2.000 slot sampai Anda menghapusnya.
Project pada model harga on demand BigQuery tunduk pada kuota slot per project dengan kemampuan burst sementara. Sebagian besar pengguna pada model on demand menganggap kapasitas slot default lebih dari cukup. Bergantung pada workload, akses ke lebih banyak slot akan meningkatkan performa kueri. Untuk memeriksa jumlah slot yang digunakan akun Anda, lihat pemantauan BigQuery.
Memperkirakan jumlah slot yang akan dibeli
BigQuery dirancang untuk dapat diskalakan secara efisien dengan resource yang meningkat. Bergantung pada workload, kapasitas tambahan cenderung akan memberi Anda manfaat tambahan. Oleh karena itu, pemilihan jumlah slot yang optimal untuk dibeli bergantung pada persyaratan Anda untuk performa, throughput, dan utilitas.
Anda dapat bereksperimen dengan slot dasar pengukuran dan penskalaan otomatis untuk menentukan konfigurasi slot yang terbaik. Misalnya, Anda dapat menguji workload dengan 500 slot dasar pengukuran, lalu 1.000, 1.500, dan 2.000, serta mengamati dampaknya terhadap performa.
Anda juga dapat memeriksa penggunaan slot project saat ini, beserta harga bulanan yang ingin Anda bayar. Workload on-demand memiliki
batas slot sementara sebanyak 2.000 slot, tetapi penting untuk memeriksa berapa banyak slot
yang benar-benar digunakan oleh project Anda menggunakan
tampilan INFORMATION_SCHEMA.JOBS*
,
Cloud Logging, Jobs API, atau Log
audit BigQuery. Untuk informasi selengkapnya, lihat
Memvisualisasikan slot yang tersedia dan slot yang dialokasikan.
Setelah membeli slot dan menjalankan beban kerja setidaknya selama tujuh hari, Anda dapat menggunakan estimator slot untuk menganalisis performa dan membuat model efek penambahan atau pengurangan slot. Untuk informasi selengkapnya, lihat Memperkirakan persyaratan kapasitas slot.
Eksekusi kueri menggunakan slot
Saat menjalankan tugas kueri, BigQuery mengonversi pernyataan SQL deklaratif menjadi grafik eksekusi, yang dipecah menjadi serangkaian tahap kueri, yang terdiri dari kumpulan yang lebih terperinci langkah-langkah eksekusi. BigQuery menggunakan arsitektur paralel yang sangat terdistribusi untuk menjalankan kueri ini, dan tahapannya memodelkan unit-unit pekerjaan yang dapat dijalankan secara paralel oleh banyak calon pekerja. Stage berkomunikasi satu sama lain menggunakan arsitektur acak terdistribusi yang cepat, yang dibahas secara lebih mendetail di blog Google Cloud.
Eksekusi kueri BigQuery bersifat dinamis. Artinya, paket kueri dapat diubah selama kueri sedang berlangsung. Stage yang diperkenalkan saat kueri berjalan sering digunakan untuk meningkatkan distribusi data di seluruh worker kueri.
BigQuery dapat menjalankan beberapa tahap secara serentak. BigQuery dapat menggunakan eksekusi spekulatif untuk mempercepat kueri, dan BigQuery dapat mempartisi ulang secara dinamis tahap untuk mencapai paralelisasi yang optimal.
Slot BigQuery akan menjalankan setiap unit tugas di setiap tahap kueri. Misalnya, jika BigQuery menentukan bahwa faktor paralelisasi optimal suatu tahap adalah 10, BigQuery akan meminta 10 slot untuk memproses tahap tersebut.
Eksekusi kueri dalam ekonomi resource slot
Jika kueri meminta lebih banyak slot daripada yang tersedia saat ini, BigQuery akan mengantrekan unit tugas individu dan menunggu hingga slot tersedia. Saat progres eksekusi kueri dibuat, dan setelah slot dikosongkan, unit tugas yang diantrekan ini akan diambil secara dinamis untuk dieksekusi.
BigQuery dapat meminta berapa pun jumlah slot untuk tahap kueri tertentu. Jumlah slot yang diminta tidak terkait dengan jumlah kapasitas yang Anda beli, melainkan indikasi faktor paralelisasi paling optimal yang dipilih oleh BigQuery untuk tahap tersebut. Unit antrean tugas dan dieksekusi saat slot tersedia.
Jika permintaan kueri melebihi slot yang akan Anda gunakan, Anda tidak akan dikenai biaya atas slot tambahan dan tidak akan dikenai biaya untuk tarif on demand tambahan. Masing-masing unit pekerjaan Anda akan dimasukkan ke dalam antrean.
Misalnya,
- Tahap kueri meminta 2.000 slot, tetapi hanya 1.000 yang tersedia.
- BigQuery menggunakan 1.000 slot dan mengantrekan 1.000 slot lainnya.
- Setelah itu, jika 100 slot menyelesaikan tugasnya, slot tersebut secara dinamis mengambil 100 unit tugas dari 1.000 unit tugas yang diantrekan. 900 unit tugas yang diantrekan akan tetap ada.
- Setelah itu, jika 500 slot menyelesaikan pekerjaannya, slot tersebut secara dinamis mengambil 500 unit tugas dari 900 unit tugas yang diantrekan. 400 unit tugas yang diantrekan akan tetap ada.
Slot yang tidak ada aktivitas
Pada waktu tertentu, beberapa slot mungkin tidak ada aktivitas. Hal ini dapat mencakup:
- Komitmen slot yang tidak dialokasikan ke pemesanan apa pun.
- Slot yang dialokasikan ke dasar pengukuran reservasi tetapi tidak digunakan.
Secara default, kueri yang berjalan di pemesanan akan otomatis menggunakan slot yang tidak ada aktivitas dari pemesanan lain dalam project administrasi yang sama. Artinya, tugas selalu dapat berjalan selama kapasitas tersedia. Kapasitas yang tidak ada aktivitas akan segera dihentikan sementara kembali ke pemesanan asli yang ditetapkan sesuai kebutuhan, terlepas dari prioritas kueri yang memerlukan resource. Hal ini terjadi secara otomatis secara real time.
Untuk mencegah perilaku ini dan memastikan reservasi hanya menggunakan slot yang disediakan olehnya, tetapkan ignore_idle_slots
ke true
. Namun, pemesanan dengan ignore_idle_slots
yang ditetapkan ke true
dapat membagikan slot yang tidak ada aktivitasnya kepada pemesanan lain.
Anda tidak dapat berbagi slot yang tidak ada aktivitasnya di antara pemesanan dari berbagai edisi. Anda hanya dapat membagikan slot dasar pengukuran atau slot yang di-commit. Slot yang diskalakan otomatis mungkin tersedia untuk sementara, tetapi tidak dapat dibagikan karena mungkin diperkecil skalanya.
Selama ignore_idle_slots
salah, pemesanan dapat memiliki jumlah slot sebesar 0
dan masih memiliki akses ke slot yang tidak digunakan. Jika Anda hanya menggunakan reservasi default
, nonaktifkan ignore_idle_slots
sebagai praktik terbaik. Kemudian, Anda dapat menetapkan project atau folder ke reservasi tersebut dan tindakan ini hanya akan menggunakan slot yang tidak ada aktivitas.
Penetapan jenis ML_EXTERNAL
merupakan pengecualian dalam slot yang digunakan oleh tugas pembuatan model eksternal BigQuery ML tidak dapat dihentikan. Slot di reservasi dengan jenis penetapan ML_EXTERNAL
dan QUERY
hanya tersedia untuk tugas kueri lainnya saat slot tidak ditempati oleh tugas ML_EXTERNAL
. Selain itu, tugas ini tidak dapat menggunakan slot nonaktif dari reservasi
lainnya.
Alokasi slot dalam pemesanan
BigQuery mengalokasikan kapasitas slot dalam satu pemesanan menggunakan algoritma yang disebut penjadwalan wajar.
Scheduler BigQuery memberlakukan pembagian slot yang sama di antara project-project dengan menjalankan kueri dalam pemesanan, lalu dalam tugas project tertentu. Scheduler akan memberikan perlakuan yang adil pada akhirnya. Selama periode singkat, beberapa tugas mungkin mendapatkan bagian slot yang tidak proporsional, tetapi penjadwal akhirnya mengoreksinya. Tujuan penjadwal adalah menemukan keseimbangan antara menghapus tugas yang berjalan secara agresif (yang mengakibatkan membuang waktu slot) dan terlalu longgar (yang menyebabkan tugas dengan tugas yang berjalan lama mendapatkan bagian waktu slot yang tidak proporsional).
Jika tugas penting terus-menerus membutuhkan lebih banyak slot daripada yang diterima dari scheduler, pertimbangkan untuk membuat pemesanan tambahan dengan jumlah slot yang dijamin dan menetapkan tugas ke pemesanan tersebut.
Penjadwalan wajar di BigQuery
Slot didistribusikan secara adil di antara project dan kemudian ke dalam tugas di project. Artinya, setiap kueri memiliki akses ke semua slot yang tersedia kapan saja, dan kapasitas secara dinamis dan otomatis dialokasikan ulang di antara kueri yang aktif mengikuti perubahan permintaan kapasitas setiap kueri. Kueri selesai dan kueri baru dikirim untuk dieksekusi dalam kondisi berikut:
- Setiap kali kueri baru dikirimkan, kapasitas akan otomatis dialokasikan ulang untuk menjalankan kueri. Setiap unit tugas dapat dijeda, dilanjutkan, dan dimasukkan ke dalam antrean dengan baik saat kapasitas yang lebih besar tersedia untuk setiap kueri.
- Setiap kali kueri selesai, kapasitas yang terpakai oleh kueri tersebut akan langsung tersedia untuk digunakan oleh semua kueri lain.
- Setiap kali permintaan kapasitas kueri berubah karena perubahan DAG dinamis kueri, BigQuery otomatis mengevaluasi ulang ketersediaan kapasitas untuk kueri ini dan semua kueri lainnya, serta mengalokasikan ulang dan menjeda slot sesuai kebutuhan.
Bergantung pada kompleksitas dan ukuran, suatu kueri mungkin tidak memerlukan semua slot yang berhak dimilikinya, atau mungkin memerlukan lebih banyak slot. BigQuery secara dinamis memastikan bahwa, dengan penjadwalan yang adil, semua slot dapat digunakan sepenuhnya kapan saja.