SQL Server base de datos tempdb

La base de datos del sistema tempdb es un recurso global disponible para todos los usuarios conectados a la instancia de SQL Server y se utiliza para incluir objetos de usuario temporales, objetos internos creados por el motor de base de datos de SQL Server y versiones de fila que se generan mediante transacciones.

Por esta razón tener optimizada correctamente la configuración de esta base de datos es primordial para garantizar el rendimiento del sistema.

Por ejemplo, si el tamaño de tempdb es demasiado pequeño, el procesamiento del sistema podría estar demasiado ocupado con el crecimiento automático de la base de datos y, por tanto, no podría satisfacer las necesidades de carga de trabajo cada vez que se inicia SQL Server. Para obtener más información, vea Optimizar el rendimiento de tempdb y Planeamiento de capacidad para tempdb.

Otro factor de optimización a tener en cuenta es el número de archivos de datos de tempdb que debe ser igual al número de núcleos de CPU utilizada por SQL Server, hasta un máximo de 8. Esto evita los cuellos de botella en el proceso de asignación de página SGAM (Shared Global Allocation Map) cuando los nuevos objetos temporales son creados. Los archivos de tempdb deben estar en una unidad separada de los datos y los archivos de registro.

tempdb

Esta recomendación viene dada ya que cada objeto temporal que se crea en tempdb necesita páginas asignadas para ello. Estas páginas deben ser asignados a través de páginas SGAM y sólo hay una página SGAM por archivo de datos (no realmente, pero lo suficientemente cerca). Así que si tienes un solo archivo de datos y se está creando una gran cantidad de objetos temporales, como es posible con SQL Server Reporting Services (SSRS) y RCSI (u otras bases de datos en el servidor, ya que todos utilizan la misma tempdb) puede crearse un cuello de botella pues está tratando de manejar las asignaciones de muchas peticiones al mismo tiempo. Es por eso que existe la recomendación de crear un archivo de datos tempdb por núcleo de la CPU o hilos activos para aliviar la posibilidad de un cuello de botella en la asignación. Esto es raro pero puede suceder.

NOTA: Cada archivo de tempdb no necesita estar en su propia unidad de disco, sólo tienen que estar separados de todos los datos de SQL y archivos de registro.

Comentarios