El objetivo principal de esta sesión es comentar posibles soluciones a degradaciones de rendimiento en las queries que se lanzan a SQL Server.
Lo primero que hicimos es definir que es la degradación de rendimiento y mostrar un ejemplo de un caso real donde comparamos el consumo usado de la CPU con el número de transacciones por segundo.
Revisamos los tipos de tuning existentes en SQL Server 2017 y comenzamos a explicar las siguientes:
Database Scope:
- Opción Identity_Cache. Esta configuración solventa el problema que sucede en las columnas identity cuando se produce un reinicio. Tras reiniciarse si el ultimo valor era por ej el 5 y volvemos a insertar se incrementará en 1000 y el valor será el 1005. Si queremos que sea el 6 debemos establecer esta opción en la bbdd
- Esta configuración permite establecer el grado de paralelismo en para las operciones que se ejecuten en el contexto de la bbdd
- Esta configuración permite solucionar queries donde la distribución de datos de la tabla no es homogénea
- Esta configuración permite establecer como motor de ejecución el motor antiguo de SQL Server (2000 a 2012)
- Los hotfixes relativos al motor de consultas en versiones anteriores a SQL Server 2017 no se aplican de manera automática, esta opción las activa
Automatic Tuning:
- Automatic Index Management. Permite la gestión automática de índices (borrado/creación) así como el forzado de planes. Aprende automática y aplica los cambios. Aplica cuando hay menos actividad, aunque se puede deshabilitar esta opción para aplicarla cuando queramos
- Automatic Plan Correction. En función de la causa que provoque el cambio de plan y si tenemos esta opción activada SQL Server podrá cambiar un plan que está degradando el rendimiento por otro optimo que tuviera guardado previamente
Adaptive Query Processing:
- Batch Mode Adaptive Joins. Esta funcionalidad permite cambiar el tipo de join nested loop (para pocos registros ) o hash join (muchos registros) en un plan de ejecución tras leer la primera entrada (tabla). Esta funcionalidad requiere índices columnares para activar el batch mode
- Interleaved Execution for Multistatement Table Value Function. Como su nombre indica esta funcionalidad aplica a las funciones de tipo tabla multilinea (multistatement). El problema con estas funciones radica en que versiones anteriores a SQL Server a 2014 siempre estima 1 registro y en 2014/6 100. En base a esto si en lugar de centenas nos llegan millones la reserva de memoria será claramente inferior a la que se necesita. Esta funcionalidad corrige esta situación.
A continuación, puedes ver la presentación de la charla ‘Adaptive Query Processing: Mejoras en el motor de consulta de SQL Server 2017’ del SolidQ Summit 2018: