Tempdb: Reducir Tamaño

Bienvenidos nuevamente, este post es sobre un tema que seguramente muchos de ustedes han tenido que enfrentar, y es que hay ocaciones en las cuales  uno se encuentra con que el disco del servidor que aloja nuestra “tempdb” se encuentra casi llego y algunos procesos que demandan gran espacio en ella se caen justamente por falta de espacio.

La base de datos “Tempdb” es una base de datos de sistema la cual se utiliza para almacenar diversos objetos temporales, entre los mas conocidos estan las tablas temporales creadas explicitamente (#temptable), tambien tablas de trabajo generadas por los planes de ejecución para almacenar resultados intermedios, cursores materializados estaticos, y registros versionados cuando usamos alguno de los niveles de aislamiento de tipo “Snapshot”

Normalmente no se recomienda reducir de tamaño a ninguna de las bases de datos de usuario debido a la alta fragmentación que causaría en los datafiles de ésta y en la carga que esta operación representa para el servidor, sin embargo, con la tempdb pueden hacerse algunas excepciones, ya que hay ocasiones en las que alguna consulta o proceso fuera de lo ordinario haya causado un crecimiento desmesurado el cual requiera nuestra inmediata atención.

En este caso hay diversos metodos por los cuales reducirla:

Método 1: El más confiable de todos, pero requiere reiniciar el servicio de SQL Server. Cuando se reinicia el servicio de SQL Server la tempdb se recrea desde cero y sus archivos vuelven al tamaño original en el que fueron configurados por última vez.

Método 2: En el caso que no se tenga alguna ventana para el reinicio, entonces se puede utilizar este método el cual no requiere reiniciar el servicio de SQL Server, pero si algunos recursos del servidor para poder completarlo. Los pasos para este método son los siguientes:

  • Verificar cuanto espacio disponible hay en la base de datos tempdb.
 use tempdb;
exec sp_spaceused 

sp_spaceused_tempdb

  • Hacer “shrink” a la base de datos basado en ese espacio disponible. En este caso estoy reduciendo el archivo a un 10% de su tamaño actual
dbcc shrinkdatabase (tempdb, 10)

Método 3: Este método tampoco require reinicio del servicio de SQL Server y se utiliza cuando el anterior no produce el efecto deseado y es que hay ocaciones en las que no se puede reducir el tamaño de la tempdb debido a que aun contiene objetos activos tales como tablas de trabajo u otras estructuras temporales, entonces cuando tenemos este caso debemos hacer una serie de limpiezas en el motor antes de intentarlo. Es importante mencionar que esto deberia ser el ultimo recurso y pensarlo dos veces antes de ejecutarlo en producción ya que limpiara muchas cosas que el motor debera volver a calcular.

  • Realizar la limpieza de varios cache y un checkpoint
USE tempdb
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
DBCC FREEPROCCACHE;
GO
DBCC FREESYSTEMCACHE ('ALL');
GO
DBCC FREESESSIONCACHE;
GO
  • La siguiente acción no es necesariamente obligatoria, pero hay ocaciones en las que me ha servido, y es configurar el archivo de datos de la tempdb al tamaño deseado antes de darle el shrink. Para esto se debe ejecutar el siguiente comando ejemplo en el cual la estoy configurando a 100 MB:
use master
ALTER DATABASE tempdb
MODIFY FILE
(name=tempdev
,size=100M)
  • Finalmente reducir el tamaño del archivo de datos de la tempdb, en este caso lo reduzco a 100 MB
use tempdb
dbcc shrinkfile ('tempdev',100,TRUNCATEONLY)

Bueno amigos espero les haya servido este  post y dejenme sus comentarios sus preguntas y sobre que temas adicionales relacionados a la administración de bases de datos SQL Server les gustaria que postee. Saludos y suerte.

Anuncios

2 comentarios sobre “Tempdb: Reducir Tamaño

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s