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 dapat dibeli
BigQuery dirancang agar dapat diskalakan secara efisien dengan peningkatan resource. 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 bayarkan. 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 workload 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 stage membuat model unit tugas yang dapat dijalankan secara paralel oleh banyak pekerja potensial. 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 stage 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. Setiap unit tugas individual Anda 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 dasar pengukuran pemesanan apa pun.
- Slot yang dialokasikan ke dasar pengukuran pemesanan 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. BigQuery langsung mengalokasikan slot ke reservasi yang ditetapkan saat diperlukan. Slot tidak ada aktivitas yang digunakan oleh pemesanan lain akan cepat didahulukan. Mungkin ada waktu singkat saat Anda melihat total konsumsi slot melebihi maksimum yang Anda tentukan di semua reservasi, tetapi Anda tidak akan ditagih untuk penggunaan slot tambahan ini.
Misalnya, Anda memiliki penyiapan reservasi berikut:
project_a
ditetapkan kereservation_a
, yang memiliki 500 slot dasar pengukuran tanpa penskalaan otomatis.project_b
ditetapkan kereservation_b
, yang memiliki 100 slot dasar pengukuran tanpa penskalaan otomatis.- Kedua pemesanan berada dalam project administratif yang sama dan tidak ada project lain yang ditetapkan ke pemesanan ini.
Anda menjalankan query_b
di project_b
. Jika tidak ada kueri yang berjalan di project_a
, query_b
akan memiliki akses ke 500 slot tidak ada aktivitas dari reservation_a
. Meskipun query_b
masih berjalan, query_b
dapat menggunakan hingga 600 slot: 100 slot dasar pengukuran ditambah 500 slot
yang tidak ada aktivitas.
Saat query_b
berjalan, misalkan Anda menjalankan query_a
di project_a
yang dapat
menggunakan 500 slot.
- Karena Anda memiliki 500 slot dasar pengukuran yang dicadangkan untuk
project_a
,query_a
langsung dimulai dan dialokasikan 500 slot. - Jumlah slot yang dialokasikan ke
query_b
dengan cepat menurun menjadi 100 slot dasar pengukuran. - Kueri tambahan yang berjalan di
project_b
menggunakan 100 slot tersebut. Jika kueri berikutnya tidak memiliki cukup slot untuk dimulai, kueri tersebut akan dimasukkan ke dalam antrean hingga kueri yang sedang berjalan selesai dan slot tersedia.
Dalam contoh ini, jika project_b
ditetapkan ke reservasi tanpa slot dasar pengukuran atau penskalaan otomatis, query_b
tidak akan memiliki slot setelah query_a
mulai berjalan. BigQuery akan menjeda query_b
hingga slot tidak ada aktivitas
tersedia atau waktu tunggu kueri habis. Kueri tambahan di project_b
akan dimasukkan ke dalam antrean
sampai slot tidak ada aktivitas tersedia.
Untuk memastikan pemesanan hanya menggunakan slot yang disediakan, 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 sebagai slot tidak ada aktivitas untuk reservasi lain karena dapat 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 pemesanan default
, matikan ignore_idle_slots
sebagai praktik terbaik. Selanjutnya, Anda dapat menetapkan project atau folder ke pemesanan tersebut, dan pemesanan itu hanya akan menggunakan slot yang tidak ada aktivitas.
Penetapan jenis ML_EXTERNAL
adalah pengecualian karena slot yang digunakan oleh
tugas pembuatan model eksternal BigQuery ML tidak dapat dihentikan. Slot
dalam pemesanan dengan jenis penetapan ML_EXTERNAL
dan QUERY
hanya tersedia untuk tugas kueri lainnya jika slot tidak ditempati oleh
tugas ML_EXTERNAL
. Selain itu, tugas ini tidak dapat menggunakan slot tidak ada aktivitas dari pemesanan lain.
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 scheduler pada akhirnya akan memperbaikinya. Tujuan penjadwal adalah untuk menemukan keseimbangan antara mengeluarkan tugas yang berjalan secara agresif (yang menyebabkan pemborosan waktu slot) dan terlalu longgar (yang menyebabkan tugas dengan tugas yang berjalan lama untuk mendapatkan pembagian 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.
Penggunaan Slot Berlebih
Jika tugas menyimpan slot terlalu lama, tugas tersebut dapat menerima pembagian slot yang tidak adil seperti yang dijelaskan di atas. Untuk mencegah penundaan, tugas lain dapat meminjam slot tambahan sehingga periode total penggunaan slot melebihi kapasitas slot yang Anda tentukan. Setiap penggunaan slot berlebih hanya diatribusikan ke tugas yang menerima lebih dari bagian yang adil.
Slot yang berlebih tidak ditagih langsung kepada Anda. Sebagai gantinya, tugas akan terus berjalan dan mengumpulkan penggunaan slot sesuai bagiannya hingga semua penggunaan berlebihnya tercakup oleh kapasitas reguler Anda. Slot berlebih dikecualikan dari penggunaan slot yang dilaporkan, kecuali statistik eksekusi mendetail tertentu.
Perhatikan bahwa beberapa peminjaman slot preemptif dapat terjadi untuk mengurangi penundaan di masa mendatang dan memberikan manfaat lain seperti pengurangan variabilitas biaya slot dan pengurangan latensi ekor. Peminjaman slot dibatasi pada sebagian kecil dari total kapasitas slot Anda.
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.