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

Mejoras ocultas de rendimiento y capacidad de administración en SQL Server 2012/2014

Hace varios años, Microsoft publicó un artículo muy útil en la base de conocimientos sobre cómo configurar SQL Server 2012 y SQL Server 2014 para obtener el mejor rendimiento con cargas de trabajo pesadas en hardware de servidor moderno y de mayor tamaño. Mi colega Aaron Bertrand y yo tuvimos un pequeño papel en la investigación del artículo original de KB. Este artículo de KB se ha mantenido bastante actualizado desde entonces y sigue siendo una gran referencia para opciones de configuración útiles para SQL Server 2012/2014.

Desde entonces, Microsoft también ha retrotraído una serie de mejoras de rendimiento muy útiles de SQL Server 2016 a SQL Server 2012 y SQL Server 2014, siempre y cuando tenga una compilación lo suficientemente nueva. de cualquiera de estas versiones anteriores de SQL Server. Microsoft recomienda que implemente de manera proactiva tanto los Service Packs como las Actualizaciones acumulativas para minimizar la posibilidad de encontrar problemas que se corrigieron en versiones posteriores de SQL Server.

Como beneficio adicional, también obtendrá nuevas funciones y otras mejoras, como las que describo en este artículo. En la mayoría de los casos, deberá habilitar un indicador de seguimiento para obtener el beneficio de estas mejoras de rendimiento.

Administrador de páginas sucias

El primero es el uso de Dirty Page Manager (DPM) junto con la habilitación de puntos de control indirectos para sus bases de datos de usuario y sistema en SQL Server 2012 y SQL Server 2014. Los puntos de control indirectos son los predeterminados para las nuevas bases de datos creadas en SQL Server 2016, y es el configuración recomendada para instancias de SQL Server 2016.

Si habilita global Trace Flag 3449 (y está en SQL Server 2012 SP3 CU3 o posterior o SQL Server 2014 SP1 CU7 o posterior), obtendrá un rendimiento mucho mejor al evitar una llamada a FlushCache en varios escenarios comunes diferentes, como la base de datos de respaldo, el registro de transacciones de respaldo, crear una base de datos, agregar un archivo a una base de datos, recuperar una base de datos, reducir un archivo de base de datos y durante un apagado "elegante" de SQL Server. Trace Flag 3449 surte efecto inmediatamente, sin necesidad de reiniciar. También debe configurar TF 3449 como un indicador de seguimiento de inicio.

Evitar estas llamadas FlushCache es particularmente importante cuando tiene una gran cantidad de RAM (más de 256 GB) en su servidor de base de datos, y el beneficio aumenta con el tamaño del grupo de búfer que está en uso. Puede leer acerca de esta mejora con más detalle en esta entrada de blog:

A continuación, si está en SQL Server 2012 SP4 o SQL Server 2014 SP2 (o posterior), obtendrá una serie de otras nuevas mejoras de rendimiento, como la partición automática Soft NUMA y el escalado dinámico de objetos de memoria que se introdujeron originalmente en SQL Server 2016. .

Partición NUMA suave automática

Tanto en SQL Server 2012 SP4 como en SQL Server 2014 SP2, cuando configura Trace Flag 8079 como indicador de rastreo de inicio, SQL Server escaneará el diseño del hardware durante el inicio del motor y configurará automáticamente NUMA suave en los sistemas que reportan 8 o más núcleos físicos por nodo NUMA. El comportamiento NUMA suave automático es compatible con Hyperthreading (HT/procesador lógico), lo que significa que funciona tanto con Intel Hyper-Threading como con AMD SMT. Al determinar el diseño óptimo del nodo NUMA de software, se consulta la información de la CPU lógica y se usa para evitar agrupaciones de nodos solo lógicos y solo físicos que podrían generar variaciones de rendimiento en los nodos de NUMA de software.

Los procesadores de servidor actuales pueden tener hasta 32 núcleos físicos en un solo nodo NUMA, lo que puede exponer problemas de escalabilidad similares a SMP dentro de un solo nodo NUMA de hardware. Microsoft afirma que ven una mejora notable en el rendimiento de esta característica utilizando su arnés de prueba interno de SQL Server 2016:

"Con NUMA suave automático compatible con HT, obtenemos una ganancia de hasta un 30 % en el rendimiento de las consultas cuando DOP se establece en la cantidad de núcleos físicos en un socket (12 en este caso) usando NUMA suave automático".

Como siempre, es una buena idea probar el rendimiento de su carga de trabajo con Automatic Soft NUMA antes de usarlo en producción.

Escalado de objetos de memoria dinámica

Tanto en SQL Server 2012 SP4 como en SQL Server 2014 SP2, SQL Server dividirá dinámicamente los objetos de memoria según la cantidad de nodos NUMA y núcleos de procesadores lógicos para escalar mejor en hardware de servidor moderno. El objetivo de la promoción dinámica es particionar automáticamente un objeto de memoria seguro para subprocesos (CMEMTHREAD) si se convierte en un cuello de botella.

Los objetos de memoria no particionados se promoverán dinámicamente para que se particionen mediante el nodo NUMA (la cantidad de particiones es igual a la cantidad de nodos NUMA) en función de la carga de trabajo y el cuello de botella, y los objetos de memoria particionados por el nodo NUMA se pueden promover aún más para que se particionen mediante núcleos de CPU lógicos. (el número de particiones es igual al número de núcleos de CPU lógicos). Esta mejora elimina la necesidad de Trace Flag 8048 una vez que tenga instalado SQL 2014 SP2 o SQL Server 2012 SP4.

Mejora de SOS_RWLock Spinlock

En SQL Server 2014 SP2, hay mejoras (nuevamente adaptadas desde SQL Server 2016) que eliminan la necesidad de spinlocks para las operaciones SOS_RWLock. Microsoft describe esta mejora con más detalle de la siguiente manera:

"SOS_RWLock es una primitiva de sincronización utilizada en varios lugares a lo largo de la base de código de SQL Server. Como su nombre lo indica, el código puede tener múltiples propietarios compartidos (lectores) o únicos (escritores). Esta mejora elimina la necesidad de spinlock para SOS_RWLock y en su lugar utiliza técnicas sin bloqueo similares a OLTP en memoria. Con este cambio, muchos subprocesos pueden leer una estructura de datos protegida por SOS_RWLock en paralelo sin bloquearse entre sí y, por lo tanto, proporcionando una mayor escalabilidad. Antes de este cambio, la implementación anterior de spinlock permitía que solo un subproceso adquirir el SOS_RWLock a la vez incluso para leer una estructura de datos".

También obtendrá una serie de útiles mejoras de capacidad de administración tanto en SQL Server 2012 SP4 como en SQL Server 2014 SP2. Puede leer acerca de estas mejoras con más detalle en estas publicaciones de blog:

  • ¡Lanzamiento del Service Pack 4 (SP4) de SQL Server 2012!
  • ¡Ya está disponible SQL Server 2014 Service Pack 2!

La conclusión clave de todo esto es que si está ejecutando SQL Server 2012 (que dejó de ser compatible el 11 de julio de 2017), querrá estar en SQL Server 2012 SP4, mientras que si está ejecutando SQL Server 2014, desea estar en SQL Server 2014 SP2 o posterior. También deberá habilitar las marcas de rastreo aplicables y configurar las propiedades de la base de datos relevantes para aprovechar estas mejoras.