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.

Linimasa penggunaan slot.

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.

Slot kueri.

Kueri GoogleSQL adalah DAG dinamis

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,

  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

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 diambil alih. 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 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 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 bagian 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.

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.