Todos los productos
Search
Centro de documentos

Data Management:Descripción general

Última actualización: Sep 04, 2026

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 LIMIT para paginar eliminaciones o actualizaciones es un error frecuente. Dado que LIMIT sin 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:

  1. 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.

  2. 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.

  3. 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 WHERE 1=1

Subconsultas

No compatible

Cláusula LIMIT

No compatible: el uso de LIMIT para paginación manual fuerza un escaneo completo de la tabla, lo que provoca el bloqueo de tablas que esta función está diseñada para prevenir

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 WHERE 1=1

Cláusulas no permitidas

LIMIT, ORDER BY y GROUP BY no son compatibles en la cláusula SELECT

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.

Pasos siguientes