El lenguaje de manipulación de datos (DML) sin bloqueos en Data Management (DMS) permite ejecutar sentencias UPDATE, DELETE e INSERT...SELECT sobre grandes conjuntos de datos sin bloquear tablas ni degradar el rendimiento de la base de datos. El motor de DMS divide automáticamente los datos de destino en lotes y ejecuta la sentencia lote por lote, con una breve pausa entre cada uno para proteger la replicación de primaria a secundaria y reducir la carga de la base de datos.
Contexto
A medida que crecen los datos del negocio, suele ser necesario eliminar datos históricos o actualizar grandes porciones de una tabla. Dos enfoques comunes conllevan riesgos importantes:
Escribir un script para dividir los datos: Usar la cláusula
LIMITpara paginar eliminaciones o actualizaciones es un error frecuente. Dado queLIMITsin un escaneo de índice fuerza un escaneo completo de la tabla, esta puede llegar a bloquearse. Incluso cuando la división se implementa correctamente, un intervalo de lotes mal ajustado puede causar un retraso grave en la replicación entre las bases de datos primaria y secundaria.Extracción manual por parte del DBA: Dividir manualmente grandes conjuntos de datos consume mucho tiempo, es propenso a errores y resulta difícil de ajustar una vez iniciado el proceso.
Además de los riesgos anteriores, pueden ocurrir dos modos de falla adicionales al operar directamente sobre tablas grandes:
Una sola sentencia SQL que afecte demasiadas filas puede provocar que el número de entradas de registro exceda el límite superior y causar que la sentencia falle por completo.
Una sentencia SQL ejecutada sin usar los índices especificados puede causar bloqueo de tablas, aumentar la carga de la base de datos y, en casos graves, provocar fallas en el negocio.
El DML sin bloqueos elimina ambos riesgos al automatizar la división por lotes y la limitación de velocidad dentro de DMS.
Funcionamiento
El DML sin bloqueos procesa una sola sentencia SQL en tres etapas:
División de datos: El motor de DMS analiza la sentencia y divide las filas coincidentes en varios lotes según rangos de índices, lo que evita escaneos completos de la tabla.
Ejecución por lotes: DMS ejecuta la sentencia sobre un lote a la vez y mantiene solo bloqueos de nivel de fila de corta duración durante cada lote.
Intervalo de espera: Después de completar cada lote, DMS espera brevemente antes de iniciar el siguiente. Este intervalo permite que la base de datos secundaria se ponga al día con la replicación y mantiene el retraso entre primaria y secundaria dentro de límites aceptables.
Beneficios
El negocio no se ve afectado durante las operaciones de cambio masivo de datos.
Se reduce el impacto en el rendimiento y en el almacenamiento de la base de datos.
Se garantiza la eficiencia de ejecución incluso para grandes volúmenes de cambios de datos.
Bases de datos compatibles
|
Motor de base de datos |
Instancias compatibles |
|
MySQL |
ApsaraDB RDS for MySQL, PolarDB for MySQL, MyBase for MySQL, PolarDB for Xscale, bases de datos MySQL de terceros |
|
PostgreSQL |
ApsaraDB RDS for PostgreSQL, PolarDB for PostgreSQL, MyBase for PostgreSQL, bases de datos PostgreSQL de terceros |
|
MariaDB |
ApsaraDB for MariaDB, bases de datos MariaDB de terceros |
|
OceanBase |
ApsaraDB for OceanBase en modo MySQL |
|
Compatible con Oracle |
PolarDB for PostgreSQL (Compatible with Oracle) |
Limitaciones
Solo se admiten sentencias UPDATE, DELETE e INSERT...SELECT.
UPDATE y DELETE
|
Restricción |
Detalles |
|
Alcance de tabla |
Solo tabla única |
|
Cláusula WHERE |
Obligatoria. Para actualizar o eliminar todas las filas, use |
|
Subconsultas |
No compatible |
|
Cláusula LIMIT |
No compatible: el uso de |
INSERT...SELECT
|
Restricción |
Detalles |
|
Alcance de SELECT |
Solo tabla única |
|
Cláusula WHERE |
Obligatoria en la cláusula SELECT. Para seleccionar todas las filas, use |
|
Cláusulas no permitidas |
|
Casos de uso
Eliminar datos históricos: Elimine filas que ya no son necesarias sin bloquear lecturas ni escrituras en la tabla de producción.
Actualizar todas las filas: Aplique una actualización de columna en toda la tabla sin causar retraso en la replicación ni interrupciones en el servicio.