Skip to content

Mejores Prácticas en tempdb de SQL Server

Durante mucho tiempo hemos leído sobre la importancia de las bases de datos de sistema en nuestro servidor. Y por supuesto, esta es una de las más importantes de todas, por eso esta vez, dedicamos este artículo a las Mejores Prácticas en tempdb de SQL Server.

mejores-practicas-en-tempdb-de-sql-server

Primero, ¿por qué es tan importante?

La tempdb es un recurso global dentro de nuestra instancia. Todas las conexiones pueden utilizarla.

Imagínate una conexión que necesite de ella y la base no esté disponible. Sería un desastre, considerando su naturaleza.

¿Pero qué contiene?

Puede almacenar diferentes objetos o ser un soporte a diferentes procesos. Almacena tablas o procedimientos temporales, resultados temporales de funciones o cursores como también soporta a procesos internos como spools, sorts, group by, order by, union o también ayuda en procesos de ordenamientos de índices cuando se especifica el valor SORT_IN_TEMPDB en su creación o reconstrucción.

Básicamente podríamos decir que la tempdb está presente en todo lo que podemos hacer en nuestra instancia. Vamos entendiendo su criticidad, ¿verdad?


Ahora bien, los factores que pueden costarnos caro. ¡Evítalos!

1) Tempdb compartiendo disco lógico

Si tienes la base de datos tempdb en una unidad de disco junto con otras bases de datos de sistema o de usuario, nunca podrás tener un seguimiento aislado del performance o de su demanda en espacio físico.

Por otro lado, harás más difícil el monitoreo y mantenimiento pues ya no podrás controlar el crecimiento individual mirando solo la unidad del disco.

2) Autocrecimiento por defecto

Dependiendo de la versión que tengas de SQL Server o si cambiaste las configuraciones por defecto en la instalación, el valor del crecimiento automático puede variar.

El problema surje cuando el valor es muy pequeño y empezamos a sentir contención por la necesidad de expansión de la base de datos. Imagina que el crecimiento se da de 1 MB en 1 MB y necesitamos crecer 1 GB…necesitamos «hacer ese crecimiento» 1000 veces. No es lo mismo que crecer dos veces en un ritmo de 500 MB en 500 MB. Mientras más pequeña la tasa, más esfuerzo en escritura en disco.

3) 1 solo archivo de datos

Las bases de datos tienen archivos físicos de datos (mdf, ndf) y de log (ldf). Por defecto cada base tiene un archivo de data y uno de log.

Se ha visto que existen escenarios de lentitud de servidores en los que se genera una contención particular en la base de datos tempdb. Usualmente esta se ve como tiempos de espera PAGELATCH_UP y pueden ser referencias a páginas del formato 2:1:1, 2:1:3 (PFS, SGAM). Esta contención se puede liberar fácilmente cuando se piensa en Dividir Archivos de data en tempdb.

4) Algunos otros

Tener collation diferentes entre la base de datos tempdb, la instancia de SQL Server y/o otras bases de usuario. Nos puede llevar a generar errores de collate en JOINS.

Crecimiento disparejo en archivos de datos. Puede restar optimización en la distribución de páginas hacia los archivos.

No monitorear la base de datos tempdb. Fácilmente puede llevarnos a perder el acceso a la instancia a través de errores por falta de espacio en esta base. Ya te pasó, ¿verdad? Ya recordaste las letras rojas diciendo «The transaction log for database tempdb is full».

(Muy típico y usual) Pensar que su espacio es infinito. Muchas prácticas en desarrollo o administración de SQL Server malinterpretan el uso de la base tempdb como «espacio temporal», esto no es un espacio ilimitado o que «solo está en memoria» como a veces se piensa. Mientras utilices tablas temporales en una conexión abierta, con esta ejecución puedes ver un reporte de tamaños de objetos temporales.

Ya lo sabes, no es un espacio infinito. Cuidado con las operaciones de DBCC CHECKDB, INDEX REBUILD con SORT_IN_TEMPDB, cursores o consultas gigantescas con ORDER BY en campos sin índices. Siempre monitorea tus mejores prácticas en tempdb.

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Esta entrada tiene 2 comentarios

    1. Y es muy común que cuando la tempdb se queda sin espacio, varias operaciones pueden quedar detenidas. Muy importante el monitoreo y el generar una línea base que nos permita conocer cómo es el comportamiento de nuestra propia base de datos en el tiempo. Cada caso es diferente.

Los comentarios están cerrados.

Carrito
Volver arriba