Menggunakan antrean kueri
BigQuery secara otomatis menentukan jumlah kueri yang dapat dijalankan secara serentak, yang disebut konkurensi dinamis. Kueri tambahan dimasukkan ke dalam antrean sampai resource pemrosesan tersedia. Dokumen ini menjelaskan cara mengontrol target konkurensi maksimum, dan menetapkan waktu tunggu antrean untuk kueri interaktif dan batch.
Ringkasan
BigQuery secara dinamis menentukan jumlah kueri yang dapat dijalankan secara serentak berdasarkan resource komputasi yang tersedia. Jumlah kueri yang dapat berjalan secara serentak dihitung per project on demand atau per pemesanan. Kueri tambahan ditempatkan dalam antrean sampai tersedia cukup kapasitas untuk memulai eksekusi. Panjang antrean dibatasi hingga 1.000 kueri interaktif dan 20.000 kueri batch per project per region, terlepas dari apakah project tersebut on-demand atau menggunakan pemesanan. Contoh berikut menunjukkan perilaku untuk project on demand jika konkurensi kueri yang dihitung adalah 202:
Untuk pemesanan, Anda memiliki opsi untuk menetapkan target konkurensi maksimum, batas atas pada jumlah kueri yang dapat dijalankan secara serentak dalam pemesanan, untuk memastikan bahwa setiap kueri mendapatkan sejumlah minimum slot. Anda tidak dapat menentukan target konkurensi maksimum untuk project on demand; target tersebut selalu dihitung secara dinamis.
Perilaku antrean
BigQuery menerapkan penjadwalan yang adil untuk memastikan bahwa tidak ada satu project yang dapat menggunakan semua slot dalam pemesanan.
Kueri dari project yang memiliki pangsa konkurensi terkecil akan dikeluarkan dari antrean terlebih dahulu. Selama eksekusi, slot didistribusikan secara adil di antara project sebelum didistribusikan di seluruh tugas dalam suatu project.
Misalnya, Anda memiliki pemesanan yang ditetapkan ke dua project: A dan B. BigQuery menghitung 5 untuk konkurensi pemesanan. Project A memiliki empat kueri yang berjalan secara serentak, project B memiliki satu kueri yang berjalan, dan kueri lainnya dimasukkan ke dalam antrean. Kueri dari project B akan dikeluarkan dari antrean terlebih dahulu bahkan jika kueri tersebut dikirimkan setelah kueri dari project A. Setelah kueri memulai eksekusi, kueri akan menerima pembagian slot yang adil dalam pemesanan bersama.
Selain jumlah total kueri serentak, BigQuery secara dinamis menentukan jumlah maksimum kueri batch serentak yang akan dijalankan per project atau reservasi on demand. Jika jumlah kueri batch yang berjalan secara serentak mencapai maksimum ini, kueri interaktif akan diprioritaskan meskipun dikirimkan nanti.
Saat Anda menghapus pemesanan, waktu tunggu semua kueri yang diantrekan akan habis. Saat project yang ditetapkan ke pemesanan ditetapkan ulang ke pemesanan lain, semua permintaan yang diantrekan atau berjalan akan dilanjutkan di pemesanan lama, sementara semua permintaan baru akan dikirim ke pemesanan baru. Saat project yang ditetapkan ke pemesanan dihapus dari pemesanan, kueri yang berjalan akan terus berlanjut di pemesanan, sementara permintaan baru dan dalam antrean dieksekusi menggunakan model on demand. Anda juga dapat membatalkan setiap tugas kueri yang sedang berjalan atau dalam antrean.
Mengontrol waktu tunggu antrean
Agar dapat mengontrol waktu tunggu antrean untuk kueri batch atau interaktif, gunakan pernyataan ALTER PROJECT SET OPTIONS
atau pernyataan ALTER ORGANIZATION SET OPTIONS
untuk menyetel kolom default_interactive_query_queue_timeout_ms
atau default_batch_query_queue_timeout_ms
dalam konfigurasi default proyek atau organisasi Anda.
Agar dapat melihat waktu tunggu antrean untuk kueri interaktif atau batch di project Anda, buat kueri tabel virtual INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS
.
Untuk menonaktifkan antrean, setel waktu tunggu antrean ke -1. Jika Anda mencapai konkurensi kueri maksimum, kueri tambahan akan gagal dengan error ADMISSION_DENIED
.
Menetapkan target konkurensi maksimum
Anda dapat menetapkan target konkurensi maksimum secara manual saat membuat pemesanan. Secara default, target konkurensi maksimum adalah nol, yang berarti BigQuery secara dinamis menentukan konkurensi berdasarkan resource yang tersedia. Atau, jika Anda menetapkan target bukan nol, target konkurensi maksimum akan menentukan batas atas pada jumlah kueri yang berjalan secara serentak dalam pemesanan, yang menjamin jumlah minimum kapasitas slot yang tersedia untuk setiap kueri yang berjalan.
Meningkatkan target konkurensi maksimum tidak menjamin bahwa lebih banyak kueri yang dijalankan secara bersamaan. Konkurensi sebenarnya bergantung pada resource komputasi yang tersedia, yang dapat ditingkatkan dengan menambahkan lebih banyak slot ke pemesanan Anda.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna menetapkan konkurensi dalam reservasi baru,
minta administrator untuk memberi Anda
peran IAM BigQuery Resource Editor (roles/bigquery.resourceEditor
) di
project administrasi
yang mempertahankan kepemilikan komitmen.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran yang telah ditentukan ini berisi izin bigquery.reservations.create
, yang diperlukan untuk menetapkan konkurensi dalam pemesanan baru.
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Untuk mengetahui informasi selengkapnya tentang peran IAM di BigQuery, lihat Peran dan izin yang telah ditentukan sebelumnya.
Menetapkan target konkurensi maksimum untuk pemesanan
Pilih salah satu opsi berikut:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Di menu navigasi, buka bagian Capacity management.
Klik Create reservation.
Pilih setelan pemesanan Anda.
Untuk meluaskan bagian Advanced settings, klik panah peluas
.Untuk menetapkan target konkurensi tugas, klik tombol Override automatic target job concurrency menjadi aktif dan masukkan Target Job Concurrency.
Klik Save.
SQL
Guna menetapkan target konkurensi maksimum untuk pemesanan baru, gunakan pernyataan DDL CREATE RESERVATION
dan tetapkan kolom target_job_concurrency
.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` OPTIONS ( target_job_concurrency = CONCURRENCY);
Ganti kode berikut:
-
ADMIN_PROJECT_ID
: project yang memiliki pemesanan -
LOCATION
: lokasi pemesanan, misalnyaregion-us
-
RESERVATION_NAME
: nama pemesanan -
CONCURRENCY
: target konkurensi maksimum
-
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Untuk menetapkan target konkurensi maksimum untuk pemesanan baru, jalankan perintah bq mk
:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Ganti kode berikut:
ADMIN_PROJECT_ID
: project yang memiliki pemesananLOCATION
: lokasi pemesananCONCURRENCY
: target konkurensi maksimumRESERVATION_NAME
: nama pemesanan
API
Untuk menetapkan target konkurensi maksimum di BigQuery Reservation API, tetapkan kolom concurrency
di resource pemesanan, dan panggil metode CreateReservationRequest
.
Mengupdate target konkurensi maksimum
Anda dapat memperbarui target konkurensi maksimum untuk pemesanan kapan saja. Namun, meningkatkan target tidak menjamin bahwa lebih banyak kueri yang dijalankan secara bersamaan. Konkurensi sebenarnya bergantung pada resource komputasi yang tersedia. Jika Anda mengurangi target konkurensi maksimum, kueri yang berjalan secara aktif tidak akan terpengaruh dan kueri yang diantrekan tidak akan berjalan hingga jumlah kueri serentak berada di bawah target baru.
Jika Anda menetapkan target konkurensi maksimum ke 0, BigQuery secara dinamis akan menentukan konkurensi berdasarkan resource yang tersedia (perilaku default).
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna memperbarui target konkurensi maksimum untuk pemesanan,
minta administrator untuk memberi Anda
peran IAM BigQuery Resource Editor (roles/bigquery.resourceEditor
) di
project administrasi
yang mempertahankan kepemilikan komitmen.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin bigquery.reservations.update
, yang diperlukan untuk memperbarui target konkurensi maksimum untuk reservasi.
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Untuk mengetahui informasi selengkapnya tentang peran IAM di BigQuery, lihat Peran dan izin yang telah ditentukan sebelumnya.
Memperbarui target konkurensi maksimum untuk pemesanan
Pilih salah satu opsi berikut:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Di menu navigasi, buka bagian Capacity management.
Klik tab Slot reservations.
Cari pemesanan yang ingin diperbarui.
Perluas opsi
Actions.Klik Edit.
Untuk meluaskan bagian Advanced settings, klik panah peluas
.Untuk menetapkan target konkurensi tugas, klik tombol Override automatic target job concurrency menjadi aktif dan masukkan Target Job Concurrency.
Klik Save.
SQL
Untuk memperbarui target konkurensi maksimum untuk pemesanan yang ada, gunakan pernyataan DDL ALTER RESERVATION
dan tetapkan kolom target_job_concurrency
.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` SET OPTIONS ( target_job_concurrency = CONCURRENCY);
Ganti kode berikut:
-
ADMIN_PROJECT_ID
: project yang memiliki pemesanan -
LOCATION
: lokasi pemesanan, misalnyaregion-us
-
RESERVATION_NAME
: nama pemesanan -
CONCURRENCY
: target konkurensi maksimum
-
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Untuk memperbarui target konkurensi maksimum untuk pemesanan yang ada, jalankan perintah bq update
:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Ganti kode berikut:
ADMIN_PROJECT_ID
: project yang memiliki pemesananLOCATION
: lokasi pemesananCONCURRENCY
: target konkurensi maksimumRESERVATION_NAME
: nama pemesanan
API
Untuk memperbarui target konkurensi maksimum di BigQuery Reservation API, tetapkan kolom concurrency
di resource pemesanan, dan panggil metode UpdateReservationRequest
.
Monitoring
Untuk mengetahui kueri mana yang berjalan dan mana yang ada dalam antrean, lihat tabel virtual INFORMATION_SCHEMA.JOBS_BY_*
dan INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
. Kolom state
ditetapkan ke RUNNING
untuk kueri yang berjalan secara aktif dan ke PENDING
untuk kueri dalam antrean.
Untuk melihat jumlah kueri serentak yang dijalankan saat nilai minimum konkurensi dinamis tercapai untuk setiap detik selama satu hari terakhir, jalankan kueri berikut:
SELECT t1.period_start, t1.job_count AS dynamic_concurrency_threshold FROM ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state) AS t1 JOIN ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE state = "PENDING" AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state HAVING COUNT(DISTINCT job_id) > 0 ) AS t2 ON t1.period_start = t2.period_start WHERE t1.state = "RUNNING";
Ganti kode berikut:
PROJECT_ID
: nama project tempat Anda menjalankan kueriREGION_ID
: lokasi tempat kueri diprosesRESERVATION_ID
: nama pemesanan tempat kueri dijalankan
Anda dapat memantau panjang antrean kueri untuk pemesanan dengan menggunakan Diagram resource administratif BigQuery dan memilih diagram Job Concurrency dengan metrik Pending.
Anda juga dapat memantau panjang antrean di Cloud Monitoring dengan melihat metrik jumlah tugas dan memfilter berdasarkan jumlah tugas dalam status pending.
Batasan
- Setiap project on demand dapat mengantrekan hingga 1.000 kueri interaktif dan 20.000 kueri batch sekaligus. Kueri yang melebihi batas ini akan menampilkan error kuota. Anda tidak dapat meminta peningkatan batas ini.
- Dalam pemesanan, setiap project yang ditetapkan ke pemesanan tersebut dapat mengantrekan hingga 1.000 kueri interaktif dan 20.000 kueri batch sekaligus. Kueri yang melebihi batas ini akan menampilkan error kuota. Anda tidak dapat meminta peningkatan batas ini.
- Secara default, waktu tunggu tugas yang belum memulai eksekusi akan habis setelah 6 jam untuk kueri interaktif dan 24 jam untuk kueri batch.
- Anda tidak dapat menetapkan target konkurensi maksimum untuk kueri yang berjalan dalam project on demand.
- Anda tidak dapat menetapkan target konkurensi maksimum untuk kueri yang berjalan dengan pemesanan edisi Standar. Untuk mengetahui informasi selengkapnya tentang edisi, lihat Pengantar edisi BigQuery.
Langkah berikutnya
- Pelajari lebih lanjut cara mendiagnosis dan menyelesaikan error batas antrean kueri.