- ¿Qué es manchado caliente?
Aaron tiene razón y no voy a repetir lo que ha dicho anteriormente, sin embargo, no se trata solo del disco IO. La parte principal con la que la mayoría de las personas tiene problemas en TempDB se debe a la contención de ciertas estructuras de seguimiento.
Dado que tener múltiples archivos tempdb permite que los algoritmos de relleno proporcional y round robin tengan lugar de manera efectiva en ser "justos" en todas las asignaciones, agregar un nuevo archivo sin asignaciones lo quita un poco. No estoy de acuerdo con que sea una advertencia de "gallinita" (vea las actualizaciones del producto a continuación) si comienza a ver PAGELATCH_*
esperas en dicho nuevo archivo y no muchas o ninguna en otros archivos. Esto generalmente ocurre en sistemas que tienen una alta actividad de TempDB y ya tienen más de un archivo.
Tenga en cuenta que hay opciones en SQL Server 2019 para cambiar algunas de las tablas del sistema subyacentes a tablas en memoria que pueden tener una mejora ya que los objetos en memoria se asignan de manera diferente a las tablas en disco. Las tablas basadas en disco son las tablas tradicionales con las que todos hemos estado trabajando a lo largo de los años. SQL Server 2014 introdujo tablas con memoria optimizada . SQL Server 2019 puede manejar algunos metadatos de asignación en tablas con memoria optimizada.
Se realizó otro cambio en SQL Server 2019 para ayudar con los cambios simultáneos de PFS, que generalmente es lo que la disputa por la estructura en memoria en la asignación está PAGELATCH_*
esperando.
- ¿Qué pasa con las manchas calientes que empeoran las cosas en tempdb?
Nada en mi humilde opinión. Sí, TempDB tiene más elementos que pueden causar escrituras sin ser utilizado directamente, por lo que puede obstaculizar algunos elementos. Sin embargo, una base de datos de usuarios muy ocupada en términos de velocidad de cambio de datos es igual de mala. No se limita solo a TempDB.
- ¿Qué cosas específicas en el DB empeorarían mucho?
¡Me gusta mucho la analogía de Aaron! Esa es la esencia de lo que está sucediendo. Lo que realmente empeora es la asignación y el seguimiento del espacio para los objetos en la base de datos. Si su base de datos de usuario es mayormente estática (baja tasa de cambio) o su TempDB no se está utilizando realmente, no notará nada. Sin embargo, si es un servidor bastante ocupado, puede iniciar o exacerbar las esperas de bloqueo de página, lo que podría provocar el bloqueo de convoyes.
Aaron ya señaló que en la versión anterior hay marcas de seguimiento para asegurarse de que se usan extensiones uniformes y que todos los archivos en un grupo de archivos crecen juntos (Aaron señala 1117 y 1118 que son NOP en 2016+). La otra cosa que me gustaría señalar nuevamente es que esto no es solo para TempDB sino para cualquier base de datos, y el diseño físico debe pensarse en función de las necesidades.
Esto no es solo para problemas de puntos de acceso, sino que también se aplica a otras partes del sistema, como copia de seguridad / restauración, administración de archivos, fragmentación de metadatos del sistema de archivos, etc., que pueden ayudarse al tener múltiples archivos.
Puede ver la contención de la estructura de asignación buscando un waitresource
en una página PFS (que es la página 1, y luego cada 8088 páginas). Si ve que todo está en el mismo archivo (2: archivo: página), entonces sabe que esto está ocurriendo.