22
Mejoras del lenguaje T-SQL 2012 (parte 2) Enrique Catalá Bañuls REL300003 Mentor – Relational engine MAP 2012 – Microsoft Technical Ranger – Microsoft Certified Trainer [email protected]

Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

  • Upload
    solidq

  • View
    345

  • 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

Page 1: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Mejoras del lenguaje T-SQL 2012 (parte 2)

Enrique Catalá Bañuls

REL300003

Mentor – Relational engine MAP 2012 – Microsoft Technical Ranger – Microsoft Certified Trainer

[email protected]

Page 2: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Mejoras del lenguaje T-SQL 2012 (parte 2)

Rendimiento de nuevas funciones escalares

Sugerencias para el optimizador de consultas

Secuencias

Window functions

Page 3: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

DEMO DEMO Rendimiento de las nuevas funciones escalares

Page 4: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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.

Page 5: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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

Page 6: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

DEMO DEMO Sugerencias para el optimizador de consultas

Page 7: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Mejoras del lenguaje T-SQL 2012 (parte 2)

Rendimiento de nuevas funciones escalares

Sugerencias para el optimizador de consultas

Secuencias

Window functions

Page 8: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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?

Page 9: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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é

Page 10: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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)

Page 11: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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

Page 12: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

DEMO DEMO Rendimiento de secuencias

Page 13: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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é

Page 14: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Mejoras del lenguaje T-SQL 2012 (parte 2)

Rendimiento de nuevas funciones escalares

Sugerencias para el optimizador de consultas

Secuencias

Window functions

Page 15: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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

Page 16: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Window functions

Conceptos clave: Todos juntos Partition

UNBOUNDED

FOLLOWING

UNBOUNDED

PRECEDING

CURRENT

ROW

Page 17: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Window functions

Sintaxis

Partitioning

Ordering

Slicing/framing

Page 18: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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

Page 19: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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

Page 20: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

DEMO DEMO Rendimiento de window functions

Page 21: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

Mejoras del lenguaje T-SQL 2012 (parte 2)

Rendimiento de nuevas funciones escalares

Sugerencias para el optimizador de consultas

Secuencias

Window functions

Page 22: Mejoras del lenguaje T-SQL 2012 (parte 2) | SolidQ Summit 2012

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: