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:

202 kueri serentak, diikuti dengan kueri dalam antrean, diikuti dengan kueri yang menampilkan error.

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

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di menu navigasi, buka bagian Capacity management.

  3. Klik Create reservation.

  4. Pilih setelan pemesanan Anda.

  5. Untuk meluaskan bagian Advanced settings, klik panah peluas .

  6. Untuk menetapkan target konkurensi tugas, klik tombol Override automatic target job concurrency menjadi aktif dan masukkan Target Job Concurrency.

  7. Klik Save.

SQL

Guna menetapkan target konkurensi maksimum untuk pemesanan baru, gunakan pernyataan DDL CREATE RESERVATION dan tetapkan kolom target_job_concurrency.

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. 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, misalnya region-us
    • RESERVATION_NAME: nama pemesanan
    • CONCURRENCY: target konkurensi maksimum

  3. 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 pemesanan
  • LOCATION: lokasi pemesanan
  • CONCURRENCY: target konkurensi maksimum
  • RESERVATION_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

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di menu navigasi, buka bagian Capacity management.

  3. Klik tab Slot reservations.

  4. Cari pemesanan yang ingin diperbarui.

  5. Perluas opsi Actions.

  6. Klik Edit.

  7. Untuk meluaskan bagian Advanced settings, klik panah peluas .

  8. Untuk menetapkan target konkurensi tugas, klik tombol Override automatic target job concurrency menjadi aktif dan masukkan Target Job Concurrency.

  9. Klik Save.

SQL

Untuk memperbarui target konkurensi maksimum untuk pemesanan yang ada, gunakan pernyataan DDL ALTER RESERVATION dan tetapkan kolom target_job_concurrency.

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. 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, misalnya region-us
    • RESERVATION_NAME: nama pemesanan
    • CONCURRENCY: target konkurensi maksimum

  3. 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 pemesanan
  • LOCATION: lokasi pemesanan
  • CONCURRENCY: target konkurensi maksimum
  • RESERVATION_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 kueri
  • REGION_ID: lokasi tempat kueri diproses
  • RESERVATION_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.

Panjang antrean dalam diagram resource administratif.

Anda juga dapat memantau panjang antrean di Cloud Monitoring dengan melihat metrik jumlah tugas dan memfilter berdasarkan jumlah tugas dalam status pending.

Panjang antrean di Cloud Monitoring.

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