Cómo comprimir la base de datos tempdb en SQL Server

Seleccione idioma Seleccione idioma
Id. de artículo: 307487 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describen tres métodos que pueden utilizarse para comprimir la base de datos tempdb a un tamaño menor que el último configurado. El primer método ofrece control total sobre el tamaño de los archivos de tempdb pero requiere reiniciar SQL Server. El segundo método comprime tempdb en conjunto, con algunas limitaciones entre las que se incluye tener que reiniciar SQL Server. El tercer método permite comprimir archivos individuales de tempdb. Los dos últimos métodos requieren que no haya actividad en la base de datos tempdb durante la operación de compresión.

Nota:
Si está utilizando SQL Server 2005, estos métodos también se aplican. Sin embargo, debe utilizar SQL Server Management Studio en lugar del Administrador corporativo y el Analizador de consultas para realizar estas operaciones. Más, tenga en cuenta que SQL Server Management Studio en 2005 no muestra el tamaño correcto de los archivos tempdb después de una operación de reducción. El valor 'Espacio asignado actualmente' se extrae desde sys.master_files DMV y no se actualiza después de realizar una operación de reducción a una base de datos tempdb. Para encontrar el tamaño correcto de los archivos tempdb después de una operación de reducción ejecute las instrucciones siguientes en Management Studio:
use tempdb
select (size*8) as FileSizeKB from sys.database_files

Nota: SQL Server 2008 no se ve afectado por este problema (GUI muestra tamaño incorrecto.)

Información acerca de Tempdb

La base de datos tempdb es un espacio de trabajo temporal. Entre otros usos, SQL Server emplea tempdb para:
  • Almacenamiento de tablas temporales creadas explícitamente.
  • Tablas de trabajo que contienen resultados intermedios creados durante el procesamiento y ordenación de consultas.
  • Cursores estáticos creados.
SQL Server sólo graba en el registro de transacciones de tempdb la información suficiente para deshacer una transacción, pero no para rehacer las transacciones durante la recuperación de la base de datos. Esta característica aumenta el rendimiento de las instrucciones INSERT en tempdb. Asimismo, no hay necesidad de registrar información para rehacer transacciones porque tempdb vuelve a crearse cada vez que se reinicia SQL Server; por lo tanto, no hay transacciones para rehacer o deshacer. Cuando se inicia SQL Server, vuelve a crearse tempdb mediante una copia de la base de datos modelo y se restablece al último tamaño configurado.

De forma predeterminada, la base de datos tempdb está configurada de manera que crece automáticamente cuando sea necesario; en consecuencia, con el tiempo podría crecer a un tamaño mayor del deseado. Con sólo reiniciar SQL Server se restablece el tamaño de tempdb al último tamaño configurado. El tamaño configurado es el último tamaño explícito establecido con una operación de cambio de tamaño de archivo como ALTER DATABASE con la opción MODIFY FILE o la instrucción DBCC SHRINKFILE. En este artículo se presentan tres métodos que pueden utilizarse para comprimir la base de datos tempdb a un tamaño menor que el configurado.


Método 1 para comprimir Tempdb

Este método requiere reiniciar SQL Server.

  1. Detenga SQL Server. Abra el símbolo del sistema e inicie SQL Server escribiendo el comando siguiente:

    sqlservr -c -f

    Los parámetros -c y -f hacen que SQL Server se inicie en modo de configuración mínima con un tamaño de tempdb de 1 MB para el archivo de datos y un tamaño de 0,5 MB para el archivo de registro.

    NOTA:
    Si utiliza una instancia de SQL Server con nombre, debe cambiar a la carpeta apropiada (Archivos de programa\Microsoft SQL Server\MSSQL$nombre de instancia\Binn) y utilizar el modificador -s (-s%nombreDeInstancia%).
  2. Conéctese a SQL Server con el Analizador de consultas y ejecute los siguientes comandos de Transact-SQL:
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'tempdev', SIZE = target_size_in_MB) 
       -- Tamaño deseado para el archivo de datos
    
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'templog', SIZE = target_size_in_MB)
       -- Tamaño deseado para el archivo de registro.
    					
  3. Presione Ctrl+C en la ventana de símbolo del sistema para detener SQL Server, reinícielo como servicio y compruebe el tamaño de los archivos Tempdb.mdf y Templog.ldf.
Una limitación de este método es que sólo funciona en los archivos lógicos predeterminados tempdb, tempdev y templog. Si se agregaron archivos adicionales a tempdb, es posible comprimirlos después de reiniciar SQL Server como servicio. Todos los archivos de tempdb vuelven a crearse durante el inicio; por lo tanto, están vacíos y pueden eliminarse. Para quitar archivos adicionales de tempdb, utilice el comando ALTER DATABASE con la opción REMOVE FILE.

Método 2 para comprimir Tempdb

Utilice el comando DBCC SHRINKDATABASE para comprimir la base de datos tempdb como un conjunto. DBCC SHRINKDATABASE recibe el parámetro porcentajeDestino, que es el porcentaje deseado de espacio libre en el archivo de base de datos después de la compresión. Si utiliza DBCC SHRINKDATABASE, quizás necesite reiniciar SQL Server.

IMPORTANTE: si ejecuta DBCC SHRINKDATABASE, no puede producirse ninguna otra actividad en la base de datos tempdb. Para asegurarse de que otros procesos no puedan utilizar tempdb mientras se ejecuta DBCC SHRINKDATABASE, debe iniciar SQL Server en modo de usuario único. Para obtener más información, consulte la sección Efectos de la ejecución de DBCC SHRINKDATABASE o DBCCSHRINKFILE mientras Tempdb está en uso en este artículo.
  1. Determine el espacio que tempdb utiliza actualmente mediante el procedimiento almacenado sp_spaceused. A continuación, calcule el porcentaje de espacio libre restante para utilizarlo como parámetro en DBCC SHRINKDATABASE; este cálculo se basa en el tamaño deseado de la base de datos.

    Nota: en algunos casos tendrá que ejecutar sp_spaceused @updateusage=true para volver a calcular el espacio utilizado y obtener un informe actualizado. Consulte los Libros en pantalla de SQL Server para obtener más información acerca del procedimiento almacenado sp_spaceused.

    Considere este ejemplo:
    asuma que tempdb contiene dos archivos: el archivo de datos primario (Tempdb.mdf), cuyo tamaño es de 100 MB, y el archivo de registro (Tempdb.ldf), que tiene 30 MB. Suponga que sp_spaceused le informa de que el archivo de datos primario contiene 60 MB de datos. Suponga también que desea comprimir el archivo de datos primario a 80 MB. Calcule el porcentaje deseado de espacio libre restante después de la compresión: 80 MB - 60 MB = 20 MB. A continuación, divida 20 MB entre 80 MB = 25%, que es el porcentajeDestino. El archivo de registro de transacciones se comprime como corresponda para dejar el 25% o 20 MB de espacio libre después de comprimir la base de datos.
  2. Conéctese a SQL Server con el Analizador de consultas y ejecute los siguientes comandos de Transact-SQL:
       dbcc shrinkdatabase (tempdb, 'target percent') 
       -- Este comando reduce la base de datos tempdb completa
    					
El uso del comando DBCC SHRINKDATABASE en la base de datos tempdb presenta algunas limitaciones. El tamaño de destino de los archivos de datos y de registro no puede ser menor que el tamaño especificado cuando se creó la base de datos o el último tamaño establecido explícitamente con una operación de cambio de tamaño de archivo como ALTER DATABASE con la opción MODIFY FILE o el comando DBCC SHRINKFILE. Otra limitación de DBCC SHRINKDATABASE es el cálculo del parámetro target_percentage y su dependencia del espacio utilizado actualmente.



Método 3 para comprimir Tempdb

Utilice el comando DBCC SHRINKFILE para comprimir archivos de tempdb individuales. DBCC SHRINKFILE proporciona más flexibilidad que DBCC SHRINKDATABASE porque puede utilizarse en un único archivo de base de datos sin afectar a otros archivos que pertenezcan a la misma base de datos. DBCC SHRINKFILE admite el parámetro tamaño de destino, que es el tamaño final deseado para el archivo de base de datos.

IMPORTANTE: debe ejecutar el comando DBCC SHRINKFILE mientras no se produce ninguna otra actividad en la base de datos tempdb. Para asegurarse de que otros procesos no puedan utilizar tempdb mientras se ejecuta DBCC SHRINKFILE, debe reiniciar SQL Server en modo de usuario único. Para obtener más información acerca de DBCC SHRINKFILE, consulte la sección Efectos de la ejecución de DBCC SHRINKDATABASE o DBCCSHRINKFILE mientras Tempdb está en uso en este artículo.
  1. Determine el tamaño deseado para el archivo de datos primario (tempdb.mdf), el archivo de registro (templog.ldf) y/o los archivos adicionales agregados a tempdb. Asegúrese de que el espacio utilizado en los archivos es menor o igual que el tamaño de destino deseado.
  2. Conéctese a SQL Server con el Analizador de consultas y ejecute los siguientes comandos de Transact-SQL para los archivos de base de datos específicos que necesite comprimir:
       use tempdb
       go
    
       dbcc shrinkfile (tempdev, 'target size in MB')
       go
       -- este comando reduce el archivo de datos primario
    
       dbcc shrinkfile (templog, 'target size in MB')
       go
       -- este comando reduce el archivo de registro; observe el último párrafo.
    						
Una ventaja de DBCC SHRINKFILE es que puede reducir un archivo a un tamaño menor que el original. DBCC SHRINKFILE puede emitirse en cualquiera de los archivos de datos o de registro. Una limitación de DBCC SHRINKFILE es que no puede reducir la base de datos a un tamaño menor que el de la base de datos modelo.

En SQL Server 7.0 la compresión del registro de transacciones es una operación diferida, por lo que debe emitirse un truncamiento y una copia de seguridad del registro para ayudar a la operación de compresión en una base de datos. Sin embargo, tempdb tiene la opción trunc log on chkpt activada de forma predeterminada; por lo tanto, en ese caso no es necesario emitir un truncamiento de registro para esa base de datos. Para obtener información adicional acerca de cómo comprimir un registro de transacciones de base de datos en SQL Server 7.0, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
256650 INF: Cómo reducir el registro de transacciones de SQL Server

Efectos de la ejecución de DBCC SHRINKDATABASE o DBCCSHRINKFILE mientras Tempdb está en uso

Si tempdb está en uso e intenta comprimirlo mediante los comandos DBCC SHRINKDATABASE o DBCC SHRINKFILE, pueden mostrarse múltiples errores de consistencia similares a los siguientes y la operación de compresión no se ejecutará correctamente:
Servidor: Msj 2501, Nivel 16, Estado 1, Línea 1 No se encuentra la tabla '1525580473'. Compruebe sysobjects.
O bien
Servidor: Msj 8909, Nivel 16, Estado 1, Línea 0 Tabla dañada: Id. de objeto 1, Id. de índice 0, Id. de página %S_PGID. Valor de PageId en el encabezado de la página = %S_PGID.
Aunque es posible que el error 2501 no indique daños en tempdb, hace que la operación de compresión no se ejecute correctamente. Por otra parte, el error 8909 podría indicar daños en la base de datos tempdb. Reinicie SQL Server para volver a crear tempdb y limpiar los errores de consistencia. No obstante, tenga en cuenta que los errores de daños físicos en los datos, por ejemplo el error 8909, pueden deberse a otros motivos, entre los que se incluyen problemas del subsistema de entrada y salida.

REFERENCIAS

Libros en pantalla de SQL Server, tema: "DBCC SHRINKFILE"; "DBCC SHRINKDATABASE"

Propiedades

Id. de artículo: 307487 - Última revisión: viernes, 12 de julio de 2013 - Versión: 6.2
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Palabras clave: 
kbsqlsetup kbhowtomaster KB307487

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com