Cuando una instancia de ApsaraDB RDS for SQL Server se queda sin espacio en disco, se bloquea automáticamente para evitar la pérdida de datos. Una vez bloqueada, todas las operaciones de escritura fallan y el indicador de estado de ejecución en la consola de RDS refleja este bloqueo.
El espacio de almacenamiento se llena por tres razones:
Alto uso de archivos de registro: los registros de transacciones crecen de forma continua debido a un gran volumen de transacciones o a transacciones individuales muy extensas.
Alto uso de archivos de datos: los archivos de datos de la base de datos acumulan espacio asignado que no se libera automáticamente después de eliminar filas.
Alto uso de archivos temporales: tempdb consume demasiado espacio.
Este documento explica cómo identificar cuál de estas causas afecta a su instancia y cómo solucionarla.
Comprobar el uso de espacio
Existen dos métodos disponibles. Use el método 1 para obtener una descripción general rápida y el método 2 para conocer el tamaño exacto de los archivos por base de datos.
Método 1: Consultar la página de monitoreo
En la página de monitoreo de la instancia, revise las siguientes métricas. Para más detalles, consulte View standard monitoring.
|
Métrica |
Qué mide |
|
The size of consumed disk space |
Archivos de datos y de registro de todas las bases de datos de usuario |
|
The data size |
Archivos de datos (.mdf y .ndf) de todas las bases de datos de usuario |
|
The size of consumed log space |
Archivos de registro (.ldf) de todas las bases de datos de usuario |
|
Temporary file size |
Todos los archivos .mdf, .ndf y .ldf de tempdb |
|
System file space usage |
Archivos de datos y de registro de master, msdb y model, además de los archivos del sistema (registros de errores, archivos DLL y similares) dentro del directorio de la instancia de SQL Server |
Método 2: Ejecutar una consulta SQL
Conéctese a la instancia y ejecute instrucciones SQL para comprobar el tamaño exacto de los archivos de datos (.mdf y .ndf) y de registro (.ldf) en todas las bases de datos. Para más detalles, consulte How do I view the size of an RDS for SQL Server database and the tables in the database.
Resolver el bloqueo
Cuando ejecute operaciones con riesgos, como modificar configuraciones o datos de la instancia, compruebe las capacidades de recuperación ante desastres y tolerancia a fallos de las instancias para garantizar la seguridad de los datos.
Antes de modificar las configuraciones y los datos de sus instancias, incluidas las de ECS y RDS, le recomendamos crear snapshots o habilitar la copia de seguridad de registros de RDS.
Si autorizó o envió información de seguridad, como la cuenta de inicio de sesión y la contraseña, en Alibaba Cloud Management Console, le recomendamos modificarla oportunamente.
Ampliar el espacio de almacenamiento
Ampliar el espacio de almacenamiento desbloquea la instancia de inmediato. Consulte Change the specifications of an ApsaraDB RDS for SQL Server instance para ver los pasos.
Si la instancia ya alcanzó el límite máximo de almacenamiento, envíe un ticket para desbloquearla temporalmente mientras libera espacio.
Resolver el alto uso de archivos de registro
Diagnosticar la causa
Conéctese a la instancia y ejecute la siguiente consulta:
SELECT name, log_reuse_wait, log_reuse_wait_desc FROM sys.databases;
Si el valor de log_reuse_wait_desc es LOG_BACKUP, reduzca el registro de transacciones (consulte la sección siguiente).
**Reducir el registro de transacciones (cuando log_reuse_wait_desc es LOG_BACKUP)**
Para reducir el registro de transacciones, siga las instrucciones de How do I shrink the transaction logs of an ApsaraDB RDS for SQL Server instance.
Si el archivo de registro es muy grande, la copia de seguridad tarda más tiempo. Además, si existen transacciones sin confirmar al momento de la reducción, un solo intento podría no liberar todo el espacio. Vuelva a ejecutar la operación de reducción cuando termine la copia de seguridad.
Evitar que se repita: dividir transacciones grandes
El crecimiento acelerado del registro casi siempre se debe a un volumen alto de transacciones o a transacciones individuales muy extensas. Por ejemplo, si una sola transacción actualiza 5 millones de filas, divídala en 50 lotes de 100,000 filas cada uno. Las transacciones más pequeñas generan menos crecimiento en el registro y permiten truncarlo con mayor frecuencia.
Resolver el alto uso de archivos de datos
Los archivos de datos no se reducen automáticamente cuando se eliminan filas, ya que el espacio asignado permanece reservado. Compruebe qué bases de datos conservan una cantidad importante de espacio sin usar y redúzcalas de manera selectiva.
Paso 1: Identificar las bases de datos con mucho espacio libre
Ejecute la siguiente consulta en cada base de datos para ver cuánto espacio está asignado pero sin usar:
USE [$DB_Name];
SELECT
SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count) * 1.0 / 128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Reemplace $DB_Name con el nombre de la base de datos de destino.
Paso 2: Reducir la base de datos o un archivo específico
Para reducir una base de datos completa:
DBCC SHRINKDATABASE([$DB_Name]);
Para reducir un solo archivo:
DBCC SHRINKFILE(file_id, [$Size]);
Reemplace $Size con el tamaño final deseado después de la reducción (no la cantidad que desea reducir), expresado en MB.
Resolver el alto uso de archivos temporales
Diagnosticar la causa
En la pestaña de monitoreo de la instancia, compruebe el consumo de archivos temporales. Cuando tempdb se queda sin espacio suficiente, el error correspondiente también se registra en el registro de errores.
Para consultar una guía detallada de solución de problemas, revise la documentación de Microsoft sobre Troubleshooting insufficient disk space in tempdb.
Solución
Reinicie la instancia para liberar de inmediato el espacio de los archivos temporales.
Libere tablas temporales, versiones de filas y variables de tabla de forma oportuna en el código de la aplicación para evitar que tempdb crezca innecesariamente.
Ámbito de aplicación
ApsaraDB RDS for SQL Server