sql >> Base de Datos >  >> RDS >> Sqlserver

Optimización de TempDB:Evitar cuellos de botella y problemas de rendimiento

Como sugiere el nombre, TempDB es un espacio de trabajo temporal requerido por SQL Server para crear y almacenar objetos intermedios y temporales.

TempDB es un engranaje importante en el aparato general de SQL Server y como espacio de trabajo temporal:los datos que contiene son transitorios por naturaleza. En otras palabras, su instancia de SQL Server recrea TempDB cada vez que se reinicia, brindándose un borrador limpio con el que puede trabajar.

  • objetos temporales activados por solicitudes de usuarios
  • objetos requeridos por procesos internos del sistema
  • información de versiones de filas

No hace falta decir que si TempDB no está configurado de manera óptima, puede provocar cuellos de botella operativos y una degradación del rendimiento. Es posible que se pregunte por qué sus consultas con uniones complejas y operaciones de clasificación no producen resultados tan rápido como se esperaba.

No hay una manera fácil de generalizar sobre las mejores prácticas para optimizar TempDB, los escenarios son demasiado diversos y lo que funciona en una situación determinada puede no funcionar en otra. Incluso si su base de datos ha entrado en producción, siempre es una buena idea continuar revisando su configuración de TempDB para asegurarse de que esté configurada como debe ser.

Uno de los problemas más graves en el rendimiento de la base de datos es la contención de TempDB. Esto sucede cuando varios recursos requieren TempDB, pero solo hay un único archivo de datos de TempDB para acceder.

La contención de TempDB puede causar problemas de rendimiento graves y, a menudo, se malinterpreta como un bloqueo normal debido a bloqueos de la base de datos. Muchas veces, en realidad es una contención bloqueada en las páginas de asignación por procesos concurrentes. Esto puede generar cuellos de botella ya que cada proceso espera su turno. Como el turno no llega lo suficientemente rápido, el tiempo de espera de las conexiones subyacentes y los procesos deben desasignarse.

¿Qué obtienes? Un atasco de tráfico virtual de procesos bloqueados.

¿Cómo se resuelve la contención de TempDB y se optimiza el rendimiento de SQL Server? Echemos un vistazo a los conceptos básicos y trabajemos desde allí.

Número de archivos de datos:¿cuántos debo tener?

Cuando configura SQL Server y mantiene la configuración predeterminada, solo tiene un único archivo de datos para TempDB. No te conformes con esta configuración.

Una de las reglas generales que se promociona a menudo es un único archivo de datos por núcleo. Pero proceda con precaución en este caso, si su servidor tiene 12 núcleos, entonces no use 12 archivos de datos TempDB a menos que lo justifiquen los requisitos de la aplicación y la carga.

La mejor opción, dadas las configuraciones de hardware actuales, es comenzar con 8 archivos de datos primarios del mismo tamaño y ver si se resuelve el problema de contención. Avanza hacia arriba y agrega más cuatro archivos si es necesario. El asistente de instalación y configuración de SQL Server 2016 tiene una función integrada que garantiza que tenga una cantidad suficiente de archivos de datos TempDB al detectar la cantidad de núcleos de CPU y crear automáticamente la cantidad adecuada de archivos de datos TempDB.

El tamaño sí importa:¿cómo se deben configurar los archivos de datos para el tamaño?

Ahora que hemos cubierto la cantidad de archivos, echemos un vistazo al tamaño recomendado de cada archivo. El tamaño predeterminado es de 8 MB, lo que proporciona a SQL Server un total de 64 MB de espacio TempDB, insuficiente para la mayoría de los entornos de producción. Mantener el crecimiento automático también es una opción, pero SQL Server tendrá que hacer una pausa y asignar más espacio en disco para los archivos TempDB cuando sea necesario, lo que agrega una sobrecarga significativa a SQL Server durante una ejecución de producción.

La práctica recomendada es mantener los archivos y el espacio inicial requerido para cada archivo en aproximadamente el 80 o 90 % del volumen en el que se almacena TempDB. Se deja del 10 al 20 % del espacio en disco para la memoria virtual basada en el sistema operativo.

En otras palabras, ajuste el tamaño de los archivos de datos durante la configuración o cambie el tamaño de los archivos en el entorno de producción. Esto asegurará que se asigne suficiente espacio en disco para TempDB. En este punto, siempre se recomienda mantener activada la opción Crecimiento automático, pero lo ideal es intentar asegurarse de que SQL Server no tenga que asignar espacio de disco adicional sobre la marcha con demasiada frecuencia.

Un dato interesante, antes de SQL Server 2017, no era posible asignar más de 1 GB por archivo de datos TempDB en el momento de la instalación. Con la última versión, es posible asignar hasta 256 GB para un archivo de datos TempDB durante la instalación.

Lo que nos lleva a la siguiente pregunta:

¿Dónde guardo los archivos de datos TempDB?

Antes de SQL Server 2012, en el caso de un entorno en clúster, TempDB tenía que ubicarse en discos compartidos entre el entorno en clúster, como una red de área de almacenamiento (SAN). A partir de SQL Server 2012, es posible mantener los archivos de datos TempDB en almacenamiento local basado en SSD. Esto reduce lo que habría sido una gran cantidad de tráfico entre la SAN compartida y la instancia de SQL Server.

En la mayoría de los casos, la mejor opción para la ubicación de TempDB es un SSD local dedicado. Si eso no es posible, mantenerlo en un volumen propio dedicado, con suficiente espacio en disco preasignado, debería resolver los posibles problemas de rendimiento. Asegúrese de monitorear constantemente el estado del disco para que las lecturas y escrituras del disco se realicen a un nivel óptimo.

Idealmente, los medios deberían ser lo más rápido posible dada la configuración del servidor, los requisitos de la aplicación y, por último, pero no menos importante, el presupuesto asignado.

Ahora que hemos echado un vistazo a los conceptos básicos, echemos un vistazo a las adiciones relevantes y bienvenidas a varias adiciones de SQL Server después de SQL Server 2012.

¿Qué más hay de nuevo?

Servidor SQL 2016

Pestaña dedicada durante la configuración

  • Con esta edición, SQL Server tiene una pestaña dedicada para la configuración de TempDB durante el flujo de trabajo de configuración
  • El asistente de instalación y configuración de SQL Server 2016 tiene una función integrada que garantiza que tenga una cantidad suficiente de archivos de datos TempDB al momento de instalar SQL Server. Detecta el número de núcleos de CPU y crea automáticamente archivos de datos TempDB, sujetos a un máximo de 8. Puede aumentar este número después de configurar SQL Server.

Inicialización instantánea de archivos

  • SQL Server tiene que asignar espacio en disco para TempDB durante la configuración inicial, así como cuando el tamaño del archivo crece en una ejecución de producción. Esta asignación puede ser posible de dos maneras. La primera forma es inicializando el espacio en disco no utilizado escribiendo ceros antes de asignar el espacio. La segunda forma es asignando instantáneamente espacio de archivo para el crecimiento de TempDB.
  • En el primer método, SQL Server tiene que llevar a cabo una operación intensiva del disco al inicializar cada clúster de disco lógico. En este método, los procesos que se ejecutan en el servidor que necesitan TempDB pueden tener que esperar, creando un cuello de botella.
  • Si elige asignar instantáneamente espacio de archivos, el servidor SQL asigna instantáneamente espacio para el crecimiento automático sin inicializar el espacio en disco. Esto reduce la E/S del disco cada vez que hay un requisito de crecimiento automático y garantiza un mejor rendimiento y rendimiento. Aunque era posible activar IFI en ediciones anteriores, era un proceso engorroso. En esta edición de SQL Server, es más fácil configurar IFI en el momento de configurar el servidor.
  • Las marcas de rastreo 1117 y 1118 son redundantes

Servidor SQL 2017

  • Antes de SQL Server 2017, no era posible asignar más de 1 GB por archivo de datos de TempDB en el momento de la instalación, lo que significaba que el tamaño del archivo de TempDB tenía que aumentarse una vez completada la instalación. Con esta versión, es posible asignar hasta 256 GB para un archivo de datos TempDB durante la instalación.

Supervisión de la base de datos temporal

Hacer un seguimiento de TempDB puede ser difícil. ¿Cómo puede saber si tiene contención de TempDB? ¿Qué se asigna a los objetos de usuario, el almacén de versiones o los objetos internos? ¿Cómo son estas tendencias con el tiempo? ¿Qué sesiones consumen TempDB y en qué medida? Spotlight Cloud facilita la respuesta a estas preguntas. Supervisa todos los aspectos del rendimiento de su servidor SQL las 24 horas del día, los 7 días de la semana y proporciona flujos de trabajo analíticos de inmersión profunda para abordar cualquier problema de rendimiento. Realice un seguimiento de su TempDB a lo largo del tiempo y obtenga asesoramiento experto automatizado sobre la configuración.


Como solución SaaS, Spotlight Cloud es fácil de instalar y configurar. Retiene hasta un año de datos de rendimiento que brindan información de ajuste inigualable. Los problemas de rendimiento se pueden resolver en segundos con un análisis de causa raíz. No pierda más tiempo investigando scripts complejos:comience su prueba de 30 días ahora. El monitoreo de rendimiento de primer nivel de SQL Server comienza ahora.