Upload
solidq
View
351
Download
2
Embed Size (px)
DESCRIPTION
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?
Citation preview
Mejoras del lenguaje T-SQL 2012 (parte 2)
Enrique Catalá Bañuls
REL300003
Mentor – Relational engine MAP 2012 – Microsoft Technical Ranger – Microsoft Certified Trainer
Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
DEMO DEMO Rendimiento de las nuevas funciones escalares
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.
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
DEMO DEMO Sugerencias para el optimizador de consultas
Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
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?
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é
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)
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
DEMO DEMO Rendimiento de secuencias
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é
Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
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
Window functions
Conceptos clave: Todos juntos Partition
UNBOUNDED
FOLLOWING
UNBOUNDED
PRECEDING
CURRENT
ROW
Window functions
Sintaxis
Partitioning
Ordering
Slicing/framing
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
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
DEMO DEMO Rendimiento de window functions
Mejoras del lenguaje T-SQL 2012 (parte 2)
Rendimiento de nuevas funciones escalares
Sugerencias para el optimizador de consultas
Secuencias
Window functions
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: