Usa colas de consultas
BigQuery determina de forma automática la cantidad de consultas que se pueden ejecutar de forma simultánea, lo que se denomina simultaneidad dinámica. Las consultas adicionales se ponen en cola hasta que los recursos de procesamiento están disponibles. En este documento, se explica cómo controlar el objetivo de simultaneidad máxima y configurar el tiempo de espera de la cola para consultas interactivas y por lotes.
Descripción general
BigQuery determina de forma dinámica la cantidad de consultas que se pueden ejecutar de forma simultánea según los recursos de procesamiento disponibles. La cantidad de consultas que se pueden ejecutar de forma simultánea se calcula por proyecto a pedido o por reserva. Las consultas adicionales se colocan en una cola hasta que haya suficiente capacidad disponible para comenzar la ejecución. La longitud máxima de la cola es de 1,000 consultas interactivas y 20,000 consultas por lotes por proyecto y por región, sin importar si el proyecto es a pedido o usa una reserva. En el siguiente ejemplo, se muestra el comportamiento de un proyecto según demanda cuando la simultaneidad de consultas calculada es 202:
Para las reservas, tienes la opción de establecer el objetivo de simultaneidad máxima, un límite superior en la cantidad de consultas que se pueden ejecutar de forma simultánea en una reserva, para garantizar que cada una a la consulta se le asigna una cantidad mínima de ranuras. No puedes especificar un objetivo de simultaneidad máxima para un proyecto a pedido; siempre se procesa de forma dinámica.
Comportamiento de las colas
BigQuery aplica la programación equilibrada para garantizar que ningún proyecto individual pueda consumir todas las ranuras de una reserva.
Las consultas de proyectos que tienen el porcentaje más bajo de simultaneidad se quitan primero. Durante la ejecución, las ranuras se distribuyen de manera equitativa entre los proyectos antes de distribuirse entre los trabajos de un proyecto.
Por ejemplo, supongamos que tienes una reserva asignada a dos proyectos: A y B. BigQuery calcula 5 para la simultaneidad de la reserva. El proyecto A tiene cuatro consultas que se ejecutan en simultáneo, el proyecto B tiene una consulta en ejecución y otras consultas están en cola. Una consulta del proyecto B se sacaría de la cola primero, incluso si se envió después de la consulta del proyecto A. Una vez que una consulta comienza a ejecutarse, recibe un porcentaje justo de ranuras en la reserva compartida.
Además de la cantidad total de consultas simultáneas, BigQuery determina de forma dinámica la cantidad máxima de consultas por lotes simultáneas que se ejecutarán por proyecto o reserva según demanda. Si la cantidad de consultas por lotes que se ejecutan en simultáneo alcanza este máximo, las consultas interactivas se priorizan incluso si se enviaron más adelante.
Cuando borras una reserva, se agota el tiempo de espera de todas las consultas en cola. Cuando un proyecto asignado a una reserva se reasigna a otra reserva, todas las solicitudes que están en cola o en ejecución continúan estándolo en la reserva anterior, mientras que todas las solicitudes nuevas se dirigen a la reserva nueva. Cuando un proyecto asignado a una reserva se quita de esta, las consultas en ejecución continúan en la reserva, mientras que las solicitudes nuevas y en cola se ejecutan con el modelo según demanda. De manera opcional, puedes cancelar los trabajos de consulta individuales en ejecución o en cola.
Controla el tiempo de espera de la cola
Para controlar el tiempo de espera de la cola de consultas interactivas o por lotes, usa la declaración
ALTER PROJECT SET OPTIONS
o la declaración
ALTER ORGANIZATION SET OPTIONS
para establecer los campos default_interactive_query_queue_timeout_ms
o
default_batch_query_queue_timeout_ms
en tus proyectos o
en la configuración predeterminada de tu organización.
Para ver el tiempo de espera de la cola para las consultas interactivas o por lotes en tu proyecto, consulta la vistaINFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS
.
Para desactivar la cola, establece el tiempo de espera de la cola en -1. Si alcanzas tu simultaneidad máxima
de consultas, las consultas adicionales fallan con un error
ADMISSION_DENIED
.
Establece el objetivo de simultaneidad máxima
Puedes configurar el objetivo de simultaneidad máxima de forma manual cuando creas una reserva. De forma predeterminada, el objetivo de simultaneidad máxima es cero, lo que significa que BigQuery determina de forma dinámica la simultaneidad según los recursos disponibles. De lo contrario, si estableces un objetivo distinto de cero, el objetivo de simultaneidad máxima especifica un límite superior para la cantidad de consultas que se ejecutan simultáneamente en una reserva, lo que garantiza una cantidad mínima de capacidad de ranuras disponible para cada consulta que se ejecuta.
El aumento de objetivo de simultaneidad máxima no garantiza que se ejecuten más consultas de forma simultánea. La simultaneidad real depende de los recursos de procesamiento disponibles, que se pueden aumentar a través de la adición de más ranuras a tu reserva.
Roles obligatorios
Para obtener el permiso que necesitas para configurar la simultaneidad en una reserva nueva, pídele a tu administrador que te otorgue el rol Editor de recursos de BigQuery (roles/bigquery.resourceEditor
) de IAM en el proyecto de administración que mantiene la propiedad de los compromisos.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el
permiso
bigquery.reservations.create
,
que se requiere para
configurar la simultaneidad en una reserva nueva.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Para obtener más información de los roles de IAM en BigQuery, consulta Funciones y permisos predefinidos.
Establece el objetivo de simultaneidad máxima para una reserva
Elige una de las opciones siguientes:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el menú de navegación, ve a la sección Administración de capacidad.
Haz clic en Crear reserva.
Elige la configuración de reserva.
Para expandir la sección Configuración avanzada, haz clic en la flecha de expansión
.Para configurar la simultaneidad de los trabajos de destino, haz clic en el botón de activación Anular la simultaneidad automática del trabajo de destino y, luego, escribe la simultaneidad de los trabajos de destino.
Haz clic en Guardar.
SQL
Para establecer el objetivo de simultaneidad máxima para una reserva nueva, usa la declaración DDL CREATE RESERVATION
y configura el campo target_job_concurrency
.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` OPTIONS ( target_job_concurrency = CONCURRENCY);
Reemplaza lo siguiente:
-
ADMIN_PROJECT_ID
: Es el proyecto que posee la reserva -
LOCATION
: Es la ubicación de la reserva, comoregion-us
-
RESERVATION_NAME
: por el nombre de la reserva -
CONCURRENCY
: Es el objetivo de simultaneidad máxima.
-
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
Para configurar el objetivo de simultaneidad máxima de una reserva nueva, ejecuta el comando bq mk
:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Reemplaza lo siguiente:
ADMIN_PROJECT_ID
: Es el proyecto que posee la reservaLOCATION
: Es la ubicación de la reserva.CONCURRENCY
: Es el objetivo de simultaneidad máxima.RESERVATION_NAME
: El nombre de la reserva
API
Para configurar el objetivo de simultaneidad máxima en la API de BigQuery Reservation, configura el campo concurrency
en el recurso de reserva y llama al método CreateReservationRequest
.
Actualiza el objetivo de simultaneidad máxima
Puedes actualizar el objetivo de simultaneidad máxima de una reserva en cualquier momento. Sin embargo, aumentar el objetivo no garantiza que se ejecuten más consultas de forma simultánea. La simultaneidad real depende de los recursos de procesamiento disponibles. Si reduces el objetivo de simultaneidad máxima, las consultas en ejecución activamente no se ven afectadas y las consultas en cola no se ejecutarán hasta que la cantidad de consultas simultáneas sea inferior al objetivo nuevo.
Si configuras el objetivo de simultaneidad máxima en 0, BigQuery determina de forma dinámica la simultaneidad según los recursos disponibles (el comportamiento predeterminado).
Roles obligatorios
Para obtener el permiso que necesitas para actualizar el objetivo de simultaneidad máxima de una reserva, pídele a tu administrador que te otorgue el rol Editor de recursos de BigQuery (roles/bigquery.resourceEditor
) de IAM en el proyecto de administración que mantiene la propiedad de los compromisos.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el
permiso
bigquery.reservations.update
,
que se requiere para
actualizar el objetivo de simultaneidad máxima de una reserva.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Para obtener más información de los roles de IAM en BigQuery, consulta Funciones y permisos predefinidos.
Actualiza el objetivo de simultaneidad máxima de una reserva
Elige una de las opciones siguientes:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el menú de navegación, ve a la sección Administración de capacidad.
Haz clic en la pestaña Reservas de ranuras.
Busca la reserva que deseas actualizar.
Expande la opción
Actions.Haz clic en Editar.
Para expandir la sección Configuración avanzada, haz clic en la flecha de expansión
.Para configurar la simultaneidad de los trabajos de destino, haz clic en el botón de activación Anular la simultaneidad automática del trabajo de destino y, luego, escribe la simultaneidad de los trabajos de destino.
Haz clic en Guardar.
SQL
Para actualizar el objetivo de simultaneidad máxima de una reserva existente, usa la declaración DDL ALTER RESERVATION
y configura el campo target_job_concurrency
.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` SET OPTIONS ( target_job_concurrency = CONCURRENCY);
Reemplaza lo siguiente:
-
ADMIN_PROJECT_ID
: Es el proyecto que posee la reserva -
LOCATION
: Es la ubicación de la reserva, comoregion-us
-
RESERVATION_NAME
: por el nombre de la reserva -
CONCURRENCY
: Es el objetivo de simultaneidad máxima.
-
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
Para actualizar el objetivo de simultaneidad máxima de una reserva existente, ejecuta el comando bq update
:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Reemplaza lo siguiente:
ADMIN_PROJECT_ID
: Es el proyecto que posee la reservaLOCATION
: Es la ubicación de la reserva.CONCURRENCY
: Es el objetivo de simultaneidad máxima.RESERVATION_NAME
: El nombre de la reserva
API
Para actualizar el objetivo de simultaneidad máxima en la API de BigQuery Reservation, configura el campo concurrency
en el recurso de reserva y llama al método UpdateReservationRequest
.
Supervisión
Para saber qué consultas se están ejecutando y cuáles están en cola, mira las vistas INFORMATION_SCHEMA.JOBS_BY_*
y INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
. El campo state
se establece en RUNNING
para las consultas que se ejecutan de forma activa y en PENDING
para las consultas en cola.
Para ver cuántas consultas simultáneas se ejecutaron cuando se alcanzó el umbral de simultaneidad dinámico por cada segundo durante el último día, ejecuta la siguiente consulta:
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";
Reemplaza lo siguiente:
PROJECT_ID
: Es el nombre del proyecto en el que ejecutaste las consultasREGION_ID
: Es la ubicación en la que se procesaron las consultasRESERVATION_ID
: Es el nombre de la reserva en la que se ejecutan las consultas
Puedes supervisar la longitud de la cola de consultas de tu reserva con los Gráficos de recursos administrativos de BigQuery y a través del gráfico Simultaneidad de los trabajos con la métrica Pendiente.
También puedes supervisar la longitud de la cola en Cloud Monitoring si consultas la métrica de recuento de trabajos y verificas la cantidad de trabajos en estado pendiente.
Limitaciones
- Cada proyecto según demanda puede poner en cola hasta 1,000 consultas interactivas y 20,000 consultas por lotes a la vez. Las consultas que excedan este límite muestran un error de cuota. No puedes solicitar un aumento de estos límites.
- Dentro de una reserva, cada proyecto asignado a esa reserva puede poner en cola hasta 1,000 consultas interactivas y 20,000 por lotes de forma simultánea. Las consultas que excedan este límite muestran un error de cuota. No puedes solicitar un aumento de estos límites.
- De forma predeterminada, los trabajos de consulta que no han iniciado el tiempo de espera de ejecución después de 6 horas para las consultas interactivas y 24 horas para las consultas por lotes.
- No puedes establecer el objetivo de simultaneidad máxima para consultas que se ejecutan en un proyecto a pedido.
- No puedes establecer el objetivo de simultaneidad máxima para consultas que se ejecutan con una reserva de edición Standard. Para obtener más información sobre las ediciones, consulta Introducción a las ediciones de BigQuery.
¿Qué sigue?
- Obtén más información para diagnosticar y resolver errores de límite de colas de consultas.