Información sobre las ranuras
Una ranura de BigQuery es una unidad de procesamiento virtual que usa BigQuery para ejecutar consultas de SQL, código de Python 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 Supervisa el estado, el uso de recursos y los trabajos.
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. 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. Las reservas con ranuras de ajuste de escala automático escalan su capacidad para satisfacer tus demandas de carga de trabajo. BigQuery asigna ranuras a medida que cambian las cargas de trabajo. Las reservas con ranuras de ajuste de escala automático solo están disponibles con las ediciones de BigQuery. Esto te permite configurar la cantidad de ranuras en una reserva según el rendimiento o la naturaleza crítica de la carga de trabajo que usa la reserva.
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 consta de una serie de etapas de consulta. A su vez, las etapas se componen de conjuntos de pasos de ejecución. BigQuery usa una arquitectura en paralelo distribuida para ejecutar consultas. Las etapas modelan las unidades de trabajo que se pueden ejecutar en paralelo. Los datos se pasan entre las etapas a través de una arquitectura aleatoria distribuida, que se analiza con más detalle en esta Google Cloud entrada de blog.
La ejecución de consultas de BigQuery es dinámica. Un plan de consultas se puede modificar mientras se procesa la consulta. La distribución del trabajo se puede optimizar para la distribución de datos a medida que se agregan etapas. Además, la capacidad para la ejecución de una consulta puede cambiar a medida que otras consultas comienzan o finalizan, o a medida que el escalador automático agrega ranuras a una 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.
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,
- Una etapa de consulta solicita 2,000 ranuras, pero solo 1,000 están disponibles.
- BigQuery consume las 1,000 ranuras y pone en cola el resto.
- 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.
- 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.
Si la carga de trabajo requiere más ranuras de las que están disponibles para la reserva, el tiempo de ejecución del trabajo puede aumentar a medida que los trabajos esperan a que las ranuras estén disponibles. Esto se conoce como contención de ranuras. La contención de ranuras puede aumentar si la demanda de la carga de trabajo es mucho mayor que las ranuras disponibles para la reserva.
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.
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 equitativa, 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
Ay proyectoB, 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
Arecibe 500 ranuras y la consultaAse ejecuta con 500 ranuras. - El proyecto
Brecibe 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
Arecibe 100 ranuras, y la consultaAse ejecuta con 100 ranuras. - El proyecto
Brecibe 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 espacios, 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. Si usas el ajuste de escala automático, la suma de los tamaños máximos de tus reservas no puede exceder este límite. 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 de la misma región y proyecto de administración de forma automática. BigQuery asigna de inmediato las ranuras inactivas a una reserva asignada cuando se necesitan. Las ranuras inactivas que usa otra reserva se interrumpen con rapidez si la reserva original lo requiere. 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_ase asigna areservation_a, que tiene 500 ranuras de modelo de referencia sin ajuste de escala automático.project_bse asigna areservation_b, que tiene 100 ranuras de modelo de referencia sin ajuste de escala automático.- Ambas reservas están en la misma región y 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_ase inicia de inmediato y se le asignan 500 ranuras. - La cantidad de ranuras asignadas a
query_bdisminuye rápidamente a 100 ranuras de referencia. - Las consultas adicionales que se ejecutan en
project_bcomparten 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 la reserva
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:
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:
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 el 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. Recomendamos usar ranuras inactivas para 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.