Memahami slot

Slot BigQuery adalah unit komputasi virtual yang digunakan BigQuery untuk menjalankan kueri SQL atau jenis tugas lainnya. Selama eksekusi kueri, BigQuery secara otomatis menentukan jumlah slot yang digunakan oleh kueri. Jumlah slot yang digunakan bergantung pada jumlah data yang diproses, kompleksitas kueri, dan jumlah slot yang tersedia. Secara umum, akses ke lebih banyak slot memungkinkan Anda menjalankan lebih banyak kueri serentak, dan kueri kompleks Anda dapat berjalan lebih cepat.

Meskipun semua kueri menggunakan slot, Anda memiliki dua opsi untuk cara penagihan penggunaan, yaitu model harga on-demand atau model harga berbasis kapasitas.

Secara default, Anda ditagih menggunakan model on-demand. Dengan model ini, Anda dikenai biaya untuk jumlah data yang diproses (diukur dalam TiB) oleh setiap kueri. Project yang menggunakan model on-demand tunduk pada batas slot per project dan per organisasi dengan kemampuan burst sementara. Sebagian besar pengguna pada model on demand menganggap batas kapasitas slot lebih dari cukup. Namun, bergantung pada workload, akses ke lebih banyak slot dapat meningkatkan performa kueri. Untuk memeriksa jumlah slot yang digunakan akun Anda, lihat pemantauan BigQuery.

Dengan model berbasis kapasitas, Anda membayar kapasitas slot yang dialokasikan untuk kueri Anda dari waktu ke waktu. Model ini memberi Anda kontrol eksplisit atas total kapasitas slot, sedangkan model on-demand tidak. Anda secara eksplisit memilih jumlah slot yang akan digunakan melalui reservasi. Anda dapat menentukan jumlah slot dalam reservasi sebagai jumlah dasar pengukuran yang selalu dialokasikan, atau sebagai jumlah yang diskalakan otomatis, yang dialokasikan saat diperlukan.

Eksekusi kueri menggunakan slot

Saat menjalankan tugas kueri, BigQuery mengonversi pernyataan SQL menjadi rencana eksekusi, yang dipecah menjadi serangkaian tahap kueri, yang terdiri dari kumpulan langkah eksekusi yang lebih terperinci. BigQuery menggunakan arsitektur paralel yang sangat terdistribusi untuk menjalankan kueri ini, dan stage membuat model unit tugas yang dapat dijalankan secara paralel oleh banyak worker potensial. Data diteruskan antar-tahapan menggunakan arsitektur acak terdistribusi yang cepat, yang dibahas secara lebih mendetail di blogTrusted Cloud by S3NS .

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. Selain itu, eksekusi kueri mungkin terpengaruh oleh perubahan jumlah kapasitas yang tersedia saat kueri lain selesai atau mulai dieksekusi, atau slot ditambahkan ke reservasi oleh penskala otomatis.

BigQuery dapat menjalankan beberapa tahap secara serentak, dapat menggunakan eksekusi spekulatif untuk mempercepat kueri, dan 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.

Slot kueri.

Grafik eksekusi kueri untuk tahap dan langkah

Ekonomi resource slot

Jika kueri meminta lebih banyak slot daripada yang tersedia, 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,

  1. Tahap kueri meminta 2.000 slot, tetapi hanya 1.000 yang tersedia.
  2. BigQuery menggunakan 1.000 slot dan mengantrekan 1.000 slot lainnya.
  3. 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.
  4. 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.

Penjadwalan slot.

Slot BigQuery diantrekan jika permintaan melebihi ketersediaan

Penjadwalan wajar di BigQuery

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 scheduler adalah untuk menemukan keseimbangan antara mengeluarkan tugas yang berjalan secara agresif (yang menyebabkan pemborosan waktu slot) dan yang terlalu longgar (yang menyebabkan tugas dengan tugas yang berjalan lama untuk mendapatkan pembagian waktu slot yang tidak proporsional).

Penjadwalan yang adil memastikan bahwa 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.

Penjadwalan beberapa kueri.

Penjadwalan wajar di BigQuery

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.

Jika tugas penting terus-menerus membutuhkan lebih banyak slot daripada yang diterima dari scheduler, pertimbangkan untuk membuat pemesanan tambahan dengan jumlah slot yang diperlukan dan menetapkan tugas ke pemesanan tersebut.

Sebagai contoh penjadwalan yang adil, misalkan Anda memiliki konfigurasi pemesanan berikut:

  • Reservasi A, yang memiliki 1.000 slot dasar pengukuran tanpa penskalaan otomatis
  • Project A dan project B, yang ditetapkan ke reservasi Anda

Skenario 1: Di project A, Anda menjalankan kueri A (satu kueri serentak) yang memerlukan penggunaan slot tinggi, dan di project B, Anda menjalankan 20 kueri serentak. Meskipun ada total 21 kueri yang menggunakan A pemesanan, distribusi slotnya adalah sebagai berikut:

  • Project A menerima 500 slot, dan kueri A berjalan dengan 500 slot.
  • Project B menerima 500 slot yang dibagikan di antara 20 kuerinya.

Skenario 2: Di project A, Anda menjalankan kueri A (satu kueri serentak) yang memerlukan 100 slot untuk dijalankan, dan di project B Anda menjalankan 20 kueri serentak. Karena kueri A tidak memerlukan 50% reservasi, distribusi slotnya adalah sebagai berikut:

  • Project A menerima 100 slot, dan kueri A berjalan dengan 100 slot.
  • Project B menerima 900 slot yang dibagikan di antara 20 kuerinya.

Sebaliknya, pertimbangkan konfigurasi reservasi berikut:

  • Reservasi B, yang memiliki 1.000 slot dasar pengukuran tanpa penskalaan otomatis.
  • 10 project, yang semuanya ditetapkan ke pemesanan B.

Misalkan 10 project menjalankan kueri yang memiliki permintaan slot yang cukup, maka setiap project akan menerima 1/10 dari total slot reservasi (atau 100 slot), terlepas dari jumlah kueri yang berjalan di setiap project.

Kuota dan batas slot

Kuota dan batas slot memberikan perlindungan untuk BigQuery. Model penetapan harga yang berbeda menggunakan jenis kuota slot yang berbeda, sebagai berikut:

  • Model harga on demand: Anda tunduk pada batas slot per project dan organisasi dengan kemampuan burst sementara. Bergantung pada workload Anda, akses ke lebih banyak slot dapat meningkatkan performa kueri.

  • Model harga berbasis kapasitas: Kuota dan batas reservasi menentukan jumlah maksimum slot yang dapat Anda alokasikan di semua reservasi di suatu lokasi. Anda hanya akan ditagih untuk pemesanan dan komitmen, bukan untuk kuota. Untuk mengetahui informasi tentang cara meningkatkan kuota slot, lihat Meminta penambahan kuota.

Untuk memeriksa jumlah slot yang Anda gunakan, lihat pemantauan BigQuery.

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.

Slot tidak ada aktivitas tidak berlaku saat menggunakan model harga sesuai permintaan.

Secara default, kueri yang berjalan di pemesanan akan otomatis menggunakan slot yang tidak ada aktivitas dari pemesanan lain dalam project administrasi yang sama. BigQuery segera mengalokasikan slot ke reservasi yang ditetapkan saat diperlukan. Slot tidak ada aktivitas yang digunakan oleh reservasi lain akan segera dihentikan. Mungkin ada waktu singkat saat Anda melihat total konsumsi slot melebihi maksimum yang Anda tentukan di semua reservasi, tetapi Anda tidak dikenai biaya untuk penggunaan slot tambahan ini.

Misalnya, anggaplah Anda memiliki penyiapan reservasi berikut:

  • project_a ditetapkan ke reservation_a, yang memiliki 500 slot dasar pengukuran tanpa penskalaan otomatis.
  • project_b ditetapkan ke reservation_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 berlari query_b di project_b. Jika tidak ada kueri yang berjalan di project_a, maka query_b memiliki akses ke 500 slot tidak aktif dari reservation_a. Saat query_b masih berjalan, query_b dapat menggunakan hingga 600 slot: 100 slot dasar pengukuran ditambah 500 slot tidak aktif.

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 akan segera dimulai dan dialokasikan 500 slot.
  • Jumlah slot yang dialokasikan untuk query_b akan berkurang dengan cepat menjadi 100 slot dasar pengukuran.
  • Kueri tambahan yang dijalankan di project_b berbagi 100 slot tersebut. Jika kueri berikutnya tidak memiliki cukup slot untuk dimulai, kueri tersebut akan diantrekan 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, maka query_b tidak akan memiliki slot setelah query_a mulai berjalan. BigQuery akan menjeda query_b hingga slot yang tidak digunakan tersedia atau kueri mencapai waktu tunggu habis. Kueri tambahan di project_b akan dimasukkan ke dalam antrean hingga slot tidak ada aktivitas tersedia.

Untuk memastikan pemesanan hanya menggunakan slot yang disediakan, tetapkan ignore_idle_slots ke true. Namun, reservasi dengan ignore_idle_slots yang ditetapkan ke true dapat membagikan slot yang tidak ada aktivitasnya kepada reservasi 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, nonaktifkan 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.

Keadilan berbasis reservasi

Dengan keadilan berbasis reservasi, BigQuery memprioritaskan dan mengalokasikan slot yang tidak digunakan secara merata di semua reservasi dalam project admin yang sama, terlepas dari jumlah project yang menjalankan tugas di setiap reservasi. Setiap reservasi menerima bagian kapasitas yang tersedia serupa di kumpulan slot tidak ada aktivitas, lalu slotnya didistribusikan secara adil dalam projectnya. Fitur ini hanya didukung dengan edisi Enterprise atau Enterprise Plus.

Diagram berikut menunjukkan cara distribusi slot tidak ada aktivitas tanpa mengaktifkan keadilan berbasis reservasi:

Slot tidak aktif dibagikan di seluruh project.

Dalam diagram ini, slot tidak aktif dibagikan secara merata di seluruh project.

Jika keadilan berbasis pemesanan tidak diaktifkan, slot tidak ada aktivitas yang tersedia akan didistribusikan secara merata di seluruh project dalam pemesanan.

Diagram berikut menunjukkan cara slot tidak ada aktivitas didistribusikan dengan pengaktifan keadilan berbasis reservasi:

Slot yang tidak ada aktivitasnya dibagikan di seluruh pemesanan.

Dalam diagram ini, slot tidak aktif dibagikan secara merata di seluruh pemesanan, bukan project.

Dengan mengaktifkan keadilan berbasis reservasi, slot tidak ada aktivitas yang tersedia didistribusikan secara merata di seluruh reservasi.

Saat Anda mengaktifkan keadilan berbasis reservasi, tinjau konsumsi resource Anda untuk mengelola ketersediaan slot dan performa kueri.

Hindari mengandalkan slot tidak aktif saja untuk workload produksi dengan persyaratan waktu yang ketat - tugas ini harus menggunakan slot dasar pengukuran atau yang diskalakan otomatis. Sebaiknya gunakan slot tidak ada aktivitas untuk tugas berprioritas lebih rendah karena slot dapat di-preempt kapan saja.

Penggunaan slot yang berlebihan

Jika tugas mempertahankan slot terlalu lama, tugas tersebut dapat menerima bagian slot yang tidak adil. Untuk mencegah penundaan, BigQuery memungkinkan tugas lain meminjam slot tambahan, sehingga menyebabkan periode penggunaan slot total di atas kapasitas slot yang Anda tentukan. Penggunaan slot yang berlebih hanya diatribusikan ke tugas yang menerima lebih dari bagian yang adil.

Slot tambahan tidak ditagih langsung kepada Anda. Sebagai gantinya, tugas akan terus berjalan dan mengakumulasi penggunaan slot sesuai bagian yang adil hingga semua penggunaan berlebihnya tercakup oleh kapasitas yang dialokasikan. Slot berlebih dikecualikan dari penggunaan slot yang dilaporkan, kecuali untuk statistik eksekusi mendetail tertentu.

Perhatikan bahwa beberapa peminjaman slot secara antisipatif dapat terjadi untuk mengurangi penundaan di masa mendatang dan memberikan manfaat lain seperti berkurangnya variabilitas biaya slot dan berkurangnya latensi ekor. Peminjaman slot terbatas pada sebagian kecil dari total kapasitas slot Anda.