http://summit.solidq.com/madrid/2012
En esta sesión, se parte de las nociones básicas impartidas en la sesión de Mejoras del lenguaje T-SQL 2012 (parte 1) y se profundiza más en detalles importantes como por ejemplo…¿por qué son mas eficientes?, ¿cuándo podemos hacer un uso de las mismas en problemas reales?, ¿Cómo podemos integrarlas en soluciones actuales?
1. Mejoras del lenguaje T-SQL 2012 (parte 2)
Enrique Catalá Bañuls
REL300003
Mentor – Relational engine
MAP 2012 – Microsoft Technical Ranger – Microsoft Certified Trainer
ecatala@solidq.com
2. Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
4. Introducido en SQL 2008 R2 SP1
Especifica que el query optimizer use solo operaciones index
seek
En SQL 2012 se puede especificar el índice y sus columnas para
controlar mejor el acceso al índice
PRECAUCIÓN: Limitar con FORCESEEK puede dar lugar a que no se
encuentre ningún plan de ejecución y se devuelva error 8622
Sugerencias para optimizador de consultas
FORCESEEK
Syntax Example Description
Without an index or INDEX hint
FROM dbo.MyTable WITH
(FORCESEEK)
The query optimizer considers
only index seek operations to
access the table or view through
any relevant index.
Combined with an INDEX hint
FROM dbo.MyTable WITH
(FORCESEEK, INDEX (MyIndex))
The query optimizer considers
only index seek operations to
access the table or view through
the specified index.
Parameterized by specifying an
index and index columns
FROM dbo.MyTable WITH
(FORCESEEK (MyIndex (col1, col2,
col3)))
The query optimizer considers
only index seek operations to
access the table or view through
the specified index using at least
the specified index columns.
5. Nuevo hint introducido en SQL 2008R2 SP1
Complementa a FORCESEEK para forzar a la query a solo
utilizar indexscan
Útil para escenarios donde el optimizador infraestima el nº
de filas devuelto
Soporta el nuevo INDEX hint al igual que FORCESEEK
No se puede usar en combinación con FORCESEEK
Sugerencias para optimizador de consultas
FORCESCAN
7. Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
8. Sirven para crear valores de clave en inserciones
Permiten incluso almacenar dicho valor en variable
NEXT VALUE FOR
Función para obtener el siguiente valor de la secuencia
Sp_sequence_get_range
Obtiene un rango de valores de secuencia que mas tarde podremos
utilizar
Secuencias
¿Para qué sirven?
9. Mejora el rendimiento pre-obteniendo valores en memoria
Se evita escritura en disco para gestión del contador
Por defecto existe cacheo
No se conoce a priori el valor
Como buena práctica siempre hay que especificar un valor
Tendremos comportamiento predecible entre dev-pre-pro
environments
Microsoft se reserva el derecho de cambiar el valor de cacheo por
defecto entre ediciones de SQL Server, parches y service packs
Si no especificamos un tamaño de cacheo nos arriesgamos
que un parche modifique rendimiento de nuestro sistema
Secuencias
Caché
10. Si quedan valores libres (por ejemplo, nos toca el 5)
Se calcula el siguiente valor de memoria
Se obtiene el siguiente valor y se actualiza en memoria
Se devuelve dicho valor al que lo solicitó
Si no quedan valores libres (nos toca el valor 16)
Se calcula el siguiente valor de memoria (16)
Se calcula el último valor de la nueva caché (30)
Se bloquea el objeto de secuencia y se guarda el valor (30)
Se devuelve dicho valor y se envía el evento extendido
cache_exhausted
Si no hay cache
Parecido al primer caso, pero todo se realiza en el objeto de
secuencia (I/O y bloqueos en secuencia)
Secuencias
Funcionamiento caché (p.ej: cache 15)
11. Facilitan escenarios parcialmente conectados con
sp_sequence_get_range
Aplicación práctica vista en la sesión de “buenas prácticas
de codificación de capas de acceso a datos”
Secuencias
Rendimiento
13. Se recomienda caché
de 40 elementos
En SQL 2012 RTM
Identity utiliza cacheo
de 10
Se puede modificar el
cacheo e incluso
deshabilitar
Cuanto más caching,
mas rendimiento
No linear
Posibilidad de huecos
ante caídas
Secuencias
Caché
14. Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
15. SQL Server 2012 está casi cerca de ofrecernos la
implementación completa de window funtions
SQL Serve 2012 introduce:
Reimplementación de cláusula OVER
Casi completa
ORDER BY
Windows Frame
8 nuevas window functions
LAG(), LEAD()
FIRST_VALUE(), LAST_VALUE()
CUME_DIST(),PERCENT_RANK()
PERCENTILE_DISC(), PERCENTILE_COUNT()
Window functions
SQL 2012
18. Directamente afectado por el Window Spool Operator
Utilizado para almacenar datos del frame
Dos tipos de ejecución
In-memory
disk-based worktable
In-memory worktable
El mas rápido
Prerequisitos: Frame definido usando cláusula ROWS y que dicho
frame sea <10k filas
Disk-based worktable
Por defecto
Usado cuando el frame se define con cláusula RANGE
Usado cuando el frame tiene más de 10k filas
Window functions
Rendimiento
19. Crea un índice por la columna de particionado y
luego por las columnas de ordenación (en su
mismo orden)
Incluye el resto de columnas con la cláusula
INCLUDE
Una ejecución a pleno rendimiento consta de:
Scan
Segment
Window spool
Aggregate
Window functions
Indexing
21. Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
22. Si quieres disfrutar de las mejores sesiones de
nuestros mentores de España y Latino América,
ésta es tu oportunidad.
http://summit.solidq.com/madrid/
Síguenos: