Los trabajos BUILD se utilizan para reconstruir las particiones que tienen datos recién escritos. Esto ayuda a mejorar el rendimiento de lectura. Durante el proceso de reconstrucción, el sistema crea índices, elimina los datos redundantes y ejecuta instrucciones DDL de forma asíncrona.
Descripción general
Durante un trabajo BUILD, el sistema combina los datos escritos en tiempo real con las particiones históricas que los contienen. Además, crea índices y ejecuta instrucciones DDL de forma asíncrona. Después de ejecutar instrucciones INSERT, UPDATE o DELETE sobre los datos de una partición, es posible ejecutar un trabajo BUILD para reconstruirla. Los trabajos BUILD no reconstruyen las particiones sin cambios en los datos.
La programación de los trabajos BUILD se realiza a nivel de tabla. Los trabajos de distintas tablas pueden ejecutarse en paralelo. Una vez que inicia un trabajo BUILD en una tabla, este se divide en tareas a nivel de shard. Cada una de las tres réplicas de un shard ejecuta una tarea. El trabajo BUILD finaliza cuando todas las tareas terminan.
Al ejecutar instrucciones DELETE o REPLACE, los datos se marcan para su eliminación y los trabajos BUILD en segundo plano los borran de forma asíncrona. Si se ejecutan muchas instrucciones DELETE o REPLACE y los trabajos BUILD no han terminado, la cantidad de filas de la tabla mostrada en Storage Overview será mayor que el resultado devuelto por SELECT COUNT(*). Esto ocurre porque el valor de Storage Overview proviene del campo row_count en information_schema.kepler_partitions, el cual cuenta las filas físicas e incluye aquellas marcadas para eliminación pero aún no borradas. En cambio, SELECT COUNT(*) devuelve la cantidad de filas lógicas válidas y excluye las filas marcadas para eliminación. Para borrar manualmente los datos marcados y lograr que ambas cifras coincidan, ejecute BUILD TABLE.
Notas de uso
Mientras se ejecuta un trabajo BUILD, no es posible usar la instrucción
INSERT OVERWRITE SELECTpara insertar datos en las tablas hasta que dicho trabajo termine. Si necesita insertar datos, utilice la instrucciónINSERT INTO.Una vez enviado un trabajo BUILD, no se puede cancelar.
-
De forma predeterminada, la cantidad de trabajos BUILD simultáneos corresponde al resultado redondeado hacia arriba de
Number of cores/3. Este valor no se puede modificar.Por ejemplo, si las especificaciones de nodo de un clúster de AnalyticDB for MySQL son 32 núcleos y 128 GB de memoria, la cantidad de trabajos BUILD simultáneos será 11 (el resultado de redondear hacia arriba
32/3). Los trabajos BUILD consumen recursos de CPU, memoria y E/S. Por esta razón, métricas como la utilización de CPU y el uso de E/S de disco podrían aumentar. Cuando los trabajos BUILD finalizan, estas métricas vuelven a sus valores normales. Se recomienda ejecutar los trabajos BUILD durante las horas de menor actividad.
Activación automática de trabajos BUILD
Un trabajo BUILD se activa automáticamente cuando se cumple alguna de las siguientes condiciones:
-
El tiempo transcurrido desde el último trabajo BUILD alcanza el intervalo mínimo entre trabajos y se agregaron como mínimo 50,000 filas de datos a un shard de una tabla.
Intervalo de tiempo para Enterprise Edition, Basic Edition o Data Lakehouse Edition: 1.5 horas.
Intervalo de tiempo para Data Warehouse Edition en modo elástico: 1.5 horas.
Intervalo de tiempo para Data Warehouse Edition en modo reservado: 0.5 horas.
Transcurrieron veinticuatro horas desde el último trabajo BUILD y se modificó como mínimo una fila de datos.
-
Cuando la cantidad de datos nuevos en un shard de una tabla llega a 1 millón de filas, se omite el intervalo de tiempo entre trabajos BUILD. En ese caso, se ejecuta inmediatamente un trabajo BUILD en la siguiente programación.
NotaEsta regla solo es compatible con clústeres cuyas versiones de kernel sean v3.1.8.7, v3.1.9.4, v3.1.10.1 o v3.2.0 y posteriores. Para conocer cómo consultar la versión de kernel de un clúster, consulte 如何查看实例版本信息. El umbral para activar esta regla se ajusta mediante el parámetro de control
RC_BUILD_IGNORE_INTERVAL_TIME_ROW_COUNT. El valor predeterminado es1000000(1 millón de filas). El ajuste surte efecto de inmediato, sin necesidad de reiniciar. -
Si la tabla tiene tareas DDL asíncronas en estado Waiting, se ejecuta inmediatamente un trabajo BUILD en la siguiente programación.
NotaEsta regla solo es compatible con clústeres cuya versión de kernel sea v3.2.0 o posterior. Las tareas DDL asíncronas (como cambiar tipos de columnas o modificar directivas de almacenamiento) surten efecto únicamente después de finalizar un trabajo BUILD. Esta regla evita que dichas tareas permanezcan mucho tiempo en estado Waiting por esperar el intervalo entre trabajos BUILD. Se controla mediante el parámetro
RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKSy está habilitada de forma predeterminada. Para deshabilitarla, ejecuteSET ADB_CONFIG RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKS = false;.
Activar manualmente un trabajo BUILD
Ejecutar una instrucción BUILD en las particiones con cambios en los datos
-
Tabla XUANWU
BUILD TABLE <table_name>;Este método activa un trabajo BUILD únicamente en las particiones cuyos datos se modificaron.
-
-
Tabla XUANWU_V2
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTION: admite únicamente el valorttl, que es un parámetro opcional. Si deja este parámetro vacío, el método activa un trabajo BUILD solo en las particiones con datos modificados. Si lo especifica, el método elimina de inmediato las particiones caducadas una vez que termina el trabajo BUILD.
NotaPara saber cómo determinar y especificar un motor de tabla, consulte la sección "Specify a table engine" del tema XUANWU_V2 engine.
-
Ejecutar una instrucción BUILD en particiones específicas
BUILD TABLE test force partitions='partition1,partition2';
La ejecución de una instrucción BUILD en particiones específicas solo es compatible con clústeres de AnalyticDB for MySQL V3.1.6.0 o posteriores. Para conocer cómo consultar la versión secundaria de un clúster de AnalyticDB for MySQL, consulte 如何查看实例版本信息. Para actualizar la versión secundaria de un clúster, póngase en contacto con el soporte técnico.
Si una tabla contiene grandes volúmenes de datos, la instrucción BUILD TABLE <table_name> force = true; podría tardar bastante en ejecutarse. AnalyticDB for MySQL permite especificar las partitions donde desea ejecutar un trabajo BUILD. Esto reduce el consumo de recursos y mejora el rendimiento de dichos trabajos.
Ejecutar una instrucción BUILD en una tabla completa
BUILD TABLE <table_name> force = true;
Este método activa un trabajo BUILD en todas las particiones de una tabla y vuelve a crear el índice correspondiente. De forma predeterminada, esta función está deshabilitada.
Este método vuelve a crear el índice de todos los datos existentes en una tabla, lo cual consume mucho tiempo. Se recomienda ejecutar la instrucción BUILD en particiones específicas. Antes de aplicarlo a una tabla completa, evalúe los efectos y riesgos. Para habilitar esta función, envíe un ticket.
Configurar la programación automática de trabajos BUILD
-
Método de configuración
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;Los parámetros
startyenddefinen el rango de tiempo en el que desea programar los trabajos BUILD. Establezca estos parámetros con valores de 0 a 24 y encierre el rango entre comillas invertidas (). Es posible configurar varios rangos de tiempo separados por punto y coma (;).Por ejemplo, si establece el parámetro
starten 0 y el parámetroenden 6, los trabajos BUILD se programarán entre las 0:00 y las 6:59.ImportanteLos rangos de tiempo especificados sirven para programar los trabajos, no para ejecutarlos. Por lo tanto, una vez programados, es posible que el sistema no termine de ejecutarlos antes de que concluya el rango indicado.
-
Ejemplo
Configure los trabajos BUILD para que se programen en los siguientes rangos de tiempo: de 00:00 a 06:59 y de 18:00 a 22:59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;Después de ejecutar la instrucción anterior, el sistema programa los trabajos BUILD de 00:00 a 06:59 y de 18:00 a 22:59.
Configurar prioridades de programación para trabajos BUILD
El orden en el que se programan los trabajos BUILD depende de la cantidad de datos agregados a cada shard de las tablas. Entre más datos se agreguen a un shard, antes se programará y ejecutará el trabajo. También puede usar un hint o ejecutar la instrucción SET ADB_CONFIG para configurar las prioridades de programación de los trabajos BUILD de las tablas.
-
La configuración de prioridades de programación para trabajos BUILD solo es compatible con clústeres de AnalyticDB for MySQL V3.1.5.0 o posteriores.
Para view and update the minor version, vaya a la sección Configuration Information en la página Cluster Information de la consola de AnalyticDB for MySQL.
Un hint admite únicamente una tabla. La prioridad configurada surte efecto solo en el trabajo BUILD actual.
La instrucción
SET ADB_CONFIGadmite una o más tablas. Las prioridades configuradas permanecen vigentes hasta que establezca nuevas prioridades de programación para dichas tablas.Si utiliza un hint y la instrucción
SET ADB_CONFIGpara definir prioridades distintas en una misma tabla, la prioridad del hint tendrá precedencia en el trabajo actual.
El parámetro task_priority define la prioridad de programación de los trabajos BUILD. Su valor debe ser un número entero y, de forma predeterminada, es 0. Un valor mayor indica una prioridad más alta. Una vez configuradas las prioridades, los nodos de frontend programan los trabajos BUILD según estos valores. Si establece el parámetro task_priority en un valor menor que 0 para una tabla, se deshabilita la programación automática de trabajos BUILD para dicha tabla y los nodos de frontend no los programarán.
Métodos de configuración:
-
Usar un hint
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;Por ejemplo, establezca la prioridad de programación de los trabajos BUILD en 30 para la tabla
testde la base de datosadb_demo./*build_task_priority = 30 */ Build TABLE adb_demo.test; -
Usar la instrucción SET ADB_CONFIG
-
Configure las prioridades de programación de trabajos BUILD para varias tablas en distintas bases de datos.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;NotaSepare varias tablas con punto y coma (;).
Por ejemplo, establezca la prioridad de programación en 30 para la tabla
test1de la base de datosadb_demo1y en 10 para la tablatest2de la base de datosadb_demo2.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`; -
Configure la misma prioridad de programación de trabajos BUILD para todas las tablas de una base de datos.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Por ejemplo, establezca la prioridad de programación de trabajos BUILD en 30 para todas las tablas de la base de datos
adb_demo1.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`; -
Configure prioridades de programación distintas entre una tabla específica y el resto de las tablas de la misma base de datos.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Por ejemplo, establezca la prioridad de programación en 30 para la tabla
test1de la base de datosadb_demo1y en 10 para el resto de las tablas de esa base de datos.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
-
Puede ejecutar la instrucción SHOW ADB_CONFIG para consultar la prioridad de programación actual de los trabajos BUILD.
Consultar el estado de un trabajo BUILD
Después de activar un trabajo BUILD de forma automática o manual, ejecute la siguiente instrucción SQL para consultar su estado durante los últimos tres días:
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
A continuación se describe el estado de los trabajos BUILD según los valores del parámetro status.
|
Valor de |
Descripción |
|
INIT |
El trabajo se está inicializando. |
|
RUNNING |
El trabajo se está ejecutando. |
|
FINISH |
El trabajo finalizó. |
Preguntas frecuentes
¿Por qué la programación automática de trabajos BUILD no surte efecto?
Causa: Los parámetros de tiempo no están encerrados entre comillas invertidas ( ), por lo que no se analizan sintácticamente de manera correcta.
Solución: Al ejecutar la instrucción SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD para configurar la programación automática, encierre los parámetros start y end entre comillas invertidas ( ). Por ejemplo, SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD= indica que el sistema programe los trabajos BUILD entre las 0:00 y las 6:59.