SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
• Envia datos a la CPU
• Implementado por
todos los operadores
GetNext()
• Invocaciones
GetNext() fila a fila
• El habitual en OLTP
Row Mode • Invocaciones
GetNext() por ~900
filas
• Beneficios 10x-100x
• Requiere columnstore
Batch Mode
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Compatibility Level Guarantees
Query Optimizer Improvements under Trace Flag 4199
New Referential Integrity Operator
Parallel Update of Sampled Statistics
Sublinear Threshold for Update of Statistics
Additions to the New Cardinality Estimator (New CE)
Misc. Enhancements
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Batch query processing in serial queries
Sort operators in batch mode
Window aggregates in batch mode
Distinct aggregates in batch mode
Parallel INSERT SELECT into heaps and CCI
Heap scans for memory-optimized tables
Parallel scans for memory-optimized tables
Sampled and auto-update stats for memory-optimized tables
String and Aggregate Pushdowns
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Trace flag “mágico” para QO
https://support.microsoft.com/en-us/kb/974006
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
NO_PERFORMANCE_SPOOL
[MAX|MIN]_GRANT_PERCENT
'DISABLE_OPTIMIZED_NESTED_LOOP'
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
'ENABLE_QUERY_OPTIMIZER_HOTFIXES'
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS'
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
'FORCE_DEFAULT_CARDINALITY_ESTIMATION'
'DISABLE_PARAMETER_SNIFFING'
'DISABLE_OPTIMIZER_ROWGOAL'
ENABLE_PARALLEL_PLAN_PREFERENCE
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Adaptative Query Processing
Plan regression prevention
WAITSTATS en QueryStore
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Adaptative Joins
• Detectar un mal
operador en
ejecución y
cambiarlo por otro
• Parameter sniffing
bye bye!
Interleaved execution
• MultiStatementTVF
con estimacion de
filas ajustadas al
vuelo
Batch mode memory
grant
• Actualización de
reservas de
memoria para
siguientes
ejecuciones
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
COMPATIBILITY LEVEL 140
JOIN eligible para NESTED LOOPS y HASH JOIN
HASH JOIN en batch mode (columnstore)
Alternativas con MERGE JOIN con el mismo outer
reference
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Ejecutar plan
nuevo
Resumir
optimizacion
usando
cardinalidades
del subarbol
materializado
Materializar
subarbol
Identificar
candidatos para
ejecucion
entrelazada
Comienzo
optimización
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
COMPATIBILITY LEVEL 140
Solo queries (no DML)
Solo para MSTVFs
No usadas en CROSS APPLY
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
AUTOMATIC_TUNING
FLAG a nivel de
BBDD
ON-OFF
DBA útil
No afecta a
nuestras
decisiones
Compatible con
sp_query_store_force_plan
ADMINISTRABLE
Sys.dm_db_tuning_recommendations
SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
Enterprise Edition
Compatibility_level = 140
Query Store Activado
AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON )