Información sobre las ranuras

Una ranura de BigQuery es una unidad de procesamiento virtual que usa BigQuery para ejecutar consultas de SQL o otros tipos de trabajos. Durante la ejecución de una consulta, BigQuery determina automáticamente cuántas ranuras usa la consulta. La cantidad de ranuras que se usan depende de la cantidad de datos que se procesan, la complejidad de la consulta y la cantidad de ranuras disponibles. En general, el acceso a más ranuras te permite ejecutar más consultas simultáneas y tus consultas complejas pueden ejecutarse con mayor rapidez.

Si bien todas las consultas usan ranuras, tienes dos opciones para que se te cobre el uso: el modelo de precios según demanda o el modelo de precios basado en la capacidad.

De forma predeterminada, se te cobra según el modelo a pedido. Con este modelo, se te cobra por la cantidad de datos procesados (medidos en TiB) por cada consulta. Los proyectos que usan el modelo según demanda están sujetos a límites de ranuras por proyecto y por organización con capacidad de aumento de actividad transitorio. Para la mayoría de los usuarios del modelo según demanda, los límites de capacidad de ranuras son más que suficientes. Sin embargo, según tu carga de trabajo, el acceso a más ranuras puede mejorar el rendimiento de las consultas. Para verificar cuántas ranuras usa tu cuenta, consulta Supervisión de BigQuery.

Con el modelo basado en la capacidad, pagas por la capacidad de ranuras asignada a tus consultas a lo largo del tiempo. Este modelo te brinda un control explícito sobre la capacidad total de ranuras, mientras que el modelo según demanda no lo hace. Eliges de forma explícita la cantidad de ranuras que usarás a través de una reserva. Puedes especificar la cantidad de ranuras en una reserva como una cantidad de referencia que siempre se asigna o como una cantidad con ajuste de escala automático, que se asigna cuando es necesario.

Ejecución de consultas mediante ranuras

Cuando BigQuery ejecuta un trabajo de consulta, convierte la instrucción de SQL en un plan de ejecución, que se divide en una serie de etapas de consulta, las cuales se componen de conjuntos de pasos de ejecución más detallados. BigQuery usa una arquitectura en paralelo muy distribuida para ejecutar estas consultas, y las etapas modelan las unidades de trabajo que varios trabajadores potenciales pueden ejecutar en paralelo. Los datos se pasan entre las etapas a través de una arquitectura aleatoria de distribución rápida, que se analiza con más detalle en el blog deGoogle Cloud .

La ejecución de consultas de BigQuery es dinámica, lo que significa que el plan de consultas se puede modificar mientras una de ellas está en tránsito. Las etapas que se ingresan mientras se ejecuta una consulta se suelen usar para mejorar la distribución de datos en todos los trabajadores de consultas. Además, la ejecución de la consulta puede verse afectada por la cantidad cambiante de capacidad disponible a medida que se completan o comienzan a ejecutarse otras consultas, o bien el escalador automático agrega ranuras a la reserva.

BigQuery puede ejecutar varias etapas de forma simultánea, usar la ejecución especulativa para acelerar una consulta y volver a crear particiones de forma dinámica de una etapa para lograr una paralelización óptima.

Las ranuras de BigQuery ejecutan unidades de trabajo individuales en cada etapa de la consulta. Por ejemplo, si BigQuery determina que el factor de paralelización óptima de una etapa es 10, solicitará 10 ranuras para procesar esa etapa.

Ranuras de consulta

Gráfico de ejecución de consultas de etapas y pasos

Ahorro de recursos de ranura

Si una consulta solicita más ranuras que las disponibles, BigQuery pone en cola las unidades de trabajo individuales y espera a que las ranuras estén disponibles. A medida que se avanza en la ejecución de la consulta y se liberan las ranuras, estas unidades de trabajo en cola se seleccionan de forma dinámica para su ejecución.

BigQuery puede solicitar cualquier cantidad de ranuras para una etapa en particular de una consulta. La cantidad de ranuras solicitadas no está relacionada con la cantidad de capacidad que adquieres, sino que es una indicación del factor de mejor paralelización que elige BigQuery para esa etapa. Las unidades de trabajo se ponen en cola y se ejecutan a medida que van quedando ranuras disponibles.

Cuando la demanda de consultas supere la cantidad de ranuras a las que te comprometiste, no se te cobrará por las ranuras adicionales ni por las tarifas adicionales a pedido. Las unidades de trabajo individuales se ponen en cola.

Por ejemplo,

  1. Una etapa de consulta solicita 2,000 ranuras, pero solo 1,000 están disponibles.
  2. BigQuery consume las 1,000 ranuras y pone en cola el resto.
  3. A partir de esto, si 100 ranuras terminan su trabajo, seleccionan de forma dinámica 100 unidades de trabajo de las 1,000 unidades de trabajo en cola. Quedan 900 unidades de trabajo en cola.
  4. Si 500 ranuras terminan su trabajo, seleccionan de forma dinámica 500 unidades de trabajo de las 900 unidades de trabajo en cola. Quedan 400 unidades de trabajo en cola.

Programación de ranuras

Ranuras de BigQuery en cola si la demanda supera la disponibilidad

Programación equilibrada en BigQuery

BigQuery asigna la capacidad de ranuras dentro de una sola reserva mediante un algoritmo llamado programación equilibrada.

El programador de BigQuery aplica el uso compartido equitativo de ranuras entre proyectos con consultas en ejecución dentro de una reserva y, luego, dentro de los trabajos de un proyecto determinado. El programador proporciona equidad eventual. Durante períodos breves, algunos trabajos pueden obtener un porcentaje desproporcionado de ranuras, pero el programador lo corregirá con el tiempo. El objetivo del programador es encontrar un equilibrio entre expulsar de forma agresiva las tareas en ejecución (lo que da como resultado una pérdida de tiempo de ranura) y ser demasiado tolerante (lo que da como resultado que los trabajos con tareas de larga duración obtengan un porcentaje desproporcionado de el tiempo de la ranura).

La programación equilibrada garantiza que cada consulta tenga acceso a todas las ranuras disponibles en cualquier momento, y la capacidad se vuelve a asignar de forma dinámica y automática entre las consultas activas a medida que la capacidad de cada consulta exige un cambio. Las consultas completas y nuevas se envían para su ejecución en función de las siguientes condiciones:

  • Cada vez que se envía una consulta nueva, la capacidad se vuelve a asignar de forma automática entre las consultas que se ejecutan. Las unidades de trabajo individuales se pueden detener, reanudar y poner en cola con facilidad a medida que va quedando disponible una mayor capacidad para cada consulta.
  • Cada vez que se completa una consulta, la capacidad que utiliza esa consulta va quedando disponible de forma automática e inmediata para las demás consultas.
  • Cada vez que la capacidad de una consulta exige una modificación debido a los cambios en el DAG dinámico de la consulta, BigQuery vuelve a evaluar de forma automática la capacidad disponible para esta y todas las demás consultas, y vuelve a asignar o detiene las ranuras según sea necesario.

Programación de varias consultas

Programación equilibrada en BigQuery

Según la complejidad y el tamaño, es posible que una consulta no necesite todas las ranuras a las que tiene derecho o que pueda necesitar más. BigQuery garantiza de forma dinámica que, con una programación equilibrada, todas las ranuras se pueden usar en cualquier momento.

Si un trabajo importante necesita más ranuras de las que recibe del programador con regularidad, considera crear una reserva adicional con la cantidad de ranuras requerida y asignar el trabajo a esa reserva.

Como ejemplo de programación justa, supongamos que tienes la siguiente configuración de reserva:

  • Reserva A, que tiene 1,000 ranuras de modelo de referencia sin ajuste de escala automático
  • Proyecto A y proyecto B, que están asignados a tu reserva

Situación 1: En el proyecto A, ejecutas la consulta A (una consulta simultánea) que requiere un uso elevado de ranuras, y en el proyecto B ejecutas 20 consultas simultáneas. Aunque hay un total de 21 consultas que usan la reserva A, la distribución de ranuras es la siguiente:

  • El proyecto A recibe 500 ranuras y la consulta A se ejecuta con 500 ranuras.
  • El proyecto B recibe 500 ranuras que se comparten entre sus 20 consultas.

Situación 2: En el proyecto A, ejecutas la consulta A (una consulta simultánea) que requiere 100 ranuras para ejecutarse, y en el proyecto B, ejecutas 20 consultas simultáneas. Dado que la consulta A no requiere el 50% de la reserva, la distribución de ranuras es la siguiente:

  • El proyecto A recibe 100 ranuras, y la consulta A se ejecuta con 100 ranuras.
  • El proyecto B recibe 900 ranuras que se comparten entre sus 20 consultas.

A la inversa, considera la siguiente configuración de reserva:

  • Reserva B, que tiene 1,000 ranuras de referencia sin ajuste de escala automático.
  • 10 proyectos, todos asignados a la reserva B

Si se supone que los 10 proyectos ejecutan consultas que tienen una demanda de ranuras suficiente, cada proyecto recibe 1/10 de las ranuras totales de la reserva (o 100 ranuras), independientemente de la cantidad de consultas que se ejecutan en cada proyecto.

Cuotas y límites de ranuras

Los límites y las cuotas de ranuras proporcionan una protección para BigQuery. Los diferentes modelos de precios usan diferentes tipos de cuotas de ranuras, como se indica a continuación:

  • Modelo de precios según demanda: Estás sujeto a un límite de ranuras por proyecto y organización con capacidad de aumento de actividad transitorio. Según tus cargas de trabajo, el acceso a más ranuras puede mejorar el rendimiento de las consultas.

  • Modelo de precios basado en la capacidad: Las cuotas y los límites de las reservas definen la cantidad máxima de ranuras que puedes asignar en todas las reservas de una ubicación. Solo se te facturarán los compromisos y las reservas, no las cuotas. Si deseas obtener información para aumentar la cuota de tus ranuras, consulta Solicita un aumento de la cuota.

Para verificar cuántas ranuras usas, consulta Supervisión de BigQuery.

Ranuras inactivas

En un momento determinado, es posible que algunas ranuras estén inactivas. Esto puede incluir lo siguiente:

  • Compromisos de ranuras que no están asignados a ninguna referencia de reserva.
  • Las ranuras que se asignaron a un modelo de referencia de reserva, pero no se encuentran en uso.

Las ranuras inactivas no se aplican cuando se usa el modelo de precios según demanda.

De forma predeterminada, las consultas que se ejecutan en una reserva usan ranuras inactivas de otras reservas dentro del mismo proyecto de administración de forma automática. BigQuery asigna ranuras de inmediato a una reserva asignada cuando se necesitan. Las ranuras inactivas que usa otra reserva se interrumpen con rapidez. Es posible que, durante un período breve, veas que el consumo total de ranuras supera la cantidad máxima que especificaste en todas las reservas, pero no se te cobrará por este uso adicional de ranuras.

Por ejemplo, supongamos que tienes la siguiente configuración de reservas:

  • project_a se asigna a reservation_a, que tiene 500 ranuras de modelo de referencia sin ajuste de escala automático.
  • project_b se asigna a reservation_b, que tiene 100 ranuras de modelo de referencia sin ajuste de escala automático.
  • Ambas reservas están en el mismo proyecto administrativo y no hay otros proyectos asignados a ellas.

Ejecutas query_b en project_b. Si no se ejecuta ninguna consulta en project_a, query_b tiene acceso a las 500 ranuras inactivas de reservation_a. Mientras query_b aún se está ejecutando, puede usar hasta 600 ranuras: 100 ranuras de modelo de referencia más 500 ranuras inactivas.

Mientras se ejecuta query_b, supongamos que ejecutas query_a en project_a, que puede usar 500 ranuras.

  • Como tienes 500 ranuras de modelo de referencia reservadas para project_a, query_a se inicia de inmediato y se le asignan 500 ranuras.
  • La cantidad de ranuras asignadas a query_b disminuye rápidamente a 100 ranuras de referencia.
  • Las consultas adicionales que se ejecutan en project_b comparten esas 100 ranuras. Si las consultas posteriores no tienen suficientes ranuras para comenzar, se ponen en cola hasta que se completen las consultas que se están ejecutando y las ranuras estén disponibles.

En este ejemplo, si project_b se asignó a una reserva sin ranuras de referencia ni ajuste de escala automático, entonces query_b no tendría ranuras después de que query_a comience a ejecutarse. BigQuery detendría query_b hasta que haya ranuras inactivas disponibles o se agote el tiempo de espera de la consulta. Las consultas adicionales en project_b se pondrán en cola hasta que haya ranuras inactivas disponibles.

Para asegurarte de que una reserva solo use sus ranuras aprovisionadas, configura ignore_idle_slots como true. Sin embargo, las reservas que tienen ignore_idle_slots configurado como true pueden compartir sus ranuras inactivas con otras reservas.

No puedes compartir ranuras inactivas entre reservas de ediciones diferentes. Solo puedes compartir las ranuras del modelo de referencia o las ranuras confirmadas. Las ranuras con ajuste de escala automático pueden estar disponibles temporalmente, pero no se pueden compartir como ranuras inactivas para otras reservas, ya que pueden reducir la escala verticalmente.

Siempre que ignore_idle_slots sea falso, una reserva puede tener un recuento de ranuras de 0 y aun así tener acceso a las ranuras sin usar. Si solo usas la reserva default, desactiva ignore_idle_slots como práctica recomendada. Luego, puedes asignar un proyecto o una carpeta a esa reserva y solo usará las ranuras inactivas.

Las asignaciones de tipo ML_EXTERNAL son una excepción en cuanto a que las ranuras que usan los trabajos de creación de modelos externos de BigQuery ML que no son interrumpibles. Las ranuras en una reserva con tipos de asignación ML_EXTERNAL y QUERY solo están disponibles para otros trabajos de consulta cuando las tareas ML_EXTERNAL no ocupan las ranuras. Además, estos trabajos no pueden usar ranuras inactivas de otras reservas.

Equidad basada en reservas

Con la equidad basada en reservas, BigQuery prioriza y asigna las ranuras inactivas de manera equitativa en todas las reservas dentro del mismo proyecto de administrador, independientemente de la cantidad de proyectos que ejecutan trabajos en cada reserva. Cada reserva recibe una proporción similar de la capacidad disponible en el grupo de ranuras inactivas y, luego, sus ranuras se distribuyen de manera equitativa entre sus proyectos. Esta función solo es compatible con las ediciones Enterprise o Enterprise Plus.

En el siguiente gráfico, se muestra cómo se distribuyen las ranuras inactivas sin la equidad basada en reservas habilitada:

Las ranuras inactivas se comparten entre proyectos.

En este gráfico, las ranuras inactivas se comparten de forma equitativa entre los proyectos.

Si no se habilita la equidad basada en reservas, las ranuras inactivas disponibles se distribuyen de manera uniforme entre los proyectos de las reservas.

En el siguiente gráfico, se muestra cómo se distribuyen las ranuras inactivas con la equidad basada en reservas habilitada:

Las ranuras inactivas se comparten entre las reservas.

En este gráfico, las ranuras inactivas se comparten de forma equitativa entre las reservas, no entre los proyectos.

Con la equidad basada en reservas habilitada, las ranuras inactivas disponibles se distribuyen de manera equitativa entre las reservas.

Cuando habilites la equidad basada en reservas, revisa tu consumo de recursos para administrar la disponibilidad de ranuras y el rendimiento de las consultas.

Evita depender únicamente de las ranuras inactivas para las cargas de trabajo de producción con requisitos de tiempo estrictos. Estos trabajos deben usar ranuras de referencia o con ajuste de escala automático. Te recomendamos que uses ranuras inactivas para los trabajos de menor prioridad, ya que las ranuras se pueden interrumpir en cualquier momento.

Uso excesivo de ranuras

Cuando un trabajo se retiene en las ranuras por demasiado tiempo, puede recibir un porcentaje injusto de ranuras. Para evitar demoras, BigQuery permite que otros trabajos tomen prestadas ranuras adicionales, lo que da como resultado períodos de uso total de las ranuras por encima de la capacidad de ranura especificada. Cualquier uso excesivo de ranuras se atribuye solo a los trabajos que reciben más del uso legítimo.

No se te facturan directamente los espacios adicionales. En cambio, los trabajos continúan ejecutándose y acumulando uso de ranuras en su porcentaje justo hasta que tu capacidad asignada cubra todo el uso excesivo. Los espacios adicionales se excluyen del uso de espacios informados, a excepción de ciertas estadísticas de ejecución detalladas.

Ten en cuenta que cierto préstamo interrumpible de ranuras puede ocurrir para reducir los retrasos futuros y proporcionar otros beneficios, como una variabilidad de los costos de ranuras y una latencia final reducidas. El préstamo de ranuras se limita a una pequeña fracción de la capacidad total de las ranuras.