Download - DENALI: Escalabilidad y Rendimiento
SQL11 Denali: Escalabilidad y rendimiento
Enrique Catalá Bañuls
REL-318
Mentor – Área relacional MCT – MCTS – MCITP – MAP 2010
Escalabilidad y rendimiento
α Escalabilidad
α Columnar storage
α Agregados con ventana deslizante
α Paginación eficiente
α Secuencias
α Mejoras en iFTS
α Optimización en tipos de datos espaciales
Objetivos de la sesión Agenda
α Solución sencilla con poco mantenimiento y eficiente
α Clustering β Redirección de clientes automática
β Política de failover flexible
α Mirroring β Failover de grupos de bases de datos
β Síncrono/asíncrono
β Compresión y encriptación
β Réplicas de solo lectura Snapshot transparente
β Reparación de páginas automática
α Log Shipping β Múltiples secundarios: 4 secundarios, 2 síncronos, 1 failover
automático
AlwaysOn Visto en la sesión: REL-316: Denali: Alta Disponibilidad
α Tipo de índice nonclustered nuevo β En un futuro podrá ser tambien tipo clustered…veremos si para
versión RTM
α Rendimientos de más de 100x y compresion entre 4x y 15x
α Optimización de consultas modelo estrella
α Surgen para escenarios tipo PDW donde se procesan cientos de Tb en menos de un segundo
α Basado en la tecnologia patentada Vertipaq que utilizan Analisys Services y PowerPivot
Columnar indexes
α Altamente comprimible
α Procesa las columnas en bloques
α Buffer hit ratio mejorado Solo las columnas necesarios se leen
β Almacenamiento Puro
α Por ahora son el almacenamiento secundario
β En un futuro serán el almacenamiento primario de información
Columnar indexes
Columnstore index
α No se soporta actualización por ahora
α Para modificar datos se recomienda: β Crear tabla particionada con columnstore index alineado
β Deshabilitar columnstore
β Mover datos a la nueva tabla con una operación SWITCH
β Rebuild el índice
α Basan su beneficio en evitar leer de disco al optimizar la RAM mediante compresión y evitar leer información indeseada
α Equipos más asequibles producen rendimientos en entornos BI realmente espectaculares.
β Se puede pensar en soluciones ROLAP eliminando la necesidad de ETL con agregados pre-cargados
Columnstore indexes
α Calculos aplicados a conjuntos de filas
α Resolución de problemas β Cursores
β Consultas agrupadas
β Subconsultas
β Joins
α Retos β Pensar en modo conjunto
β Mezclar cálculos de agrupado y el nivel detalle
β Complejidad
β Rendimiento
Calculos sobre conjuntos
α No te desvies de la realidad, SQL Server es un motor relacional basado en conjuntos
α ¿Entiendes realmente lo que significa conjunto?
Piensa en conjuntos
Definición teórica por Georg Cantor:
1. Un conjunto es una reunión de objetos que cumplen con cierta
propiedad (llamados los elementos de ese conjunto) y que, por tanto,
queda definido por tal propiedad.
2. Un conjunto es una sola entidad matemática, de modo que puede a su
vez ser contenido por otro conjunto
3. Dos conjuntos que tengan los mismos elementos son iguales, luego un
conjunto queda determinado por sus elementos
En definitiva, una reunión de objetos sin ningún orden y con una propiedad
común
α Las consultas agrupadas imponen condiciones
Mezcla de detalle y cálculos de conjuntos
α Subconsultas β Demasiada información
β Cuidado con el orden de evaluación
β Cada consulta necesita su resolución independiente
Piensa en conjuntos
α El pensamiento tradicional produce consultas muy complejas
Piensa en conjuntos Complejidad
α Consultas de complejidad cuadrática
Piensa en conjuntos Rendimiento
α Particionamos
α Ordenamos
α Deslizamos
Novedad Denali Nuevas construcciones basadas en conjuntos
α Conceptualmente, una ventana deslizante existe simultáneamente respecto a cada fila. Debes preparar tu mente para empezar a dar soluciones eficaces
Cambia tu mente Piensa mas profundamente para dar con la clave
α Pensar en una asignación numérica aislada e independiente es erróneo aunque se obtenga el resultado deseado
Abre tu mente
α Agregados con ventana deslizante (Framing) β Hasta Denali, solo agregados con particionado
α Offset β LAG, LEAD,FIRST_VALUE, LAST_VALUE
α Distribución β PERCENT_RANK,PERCENTILE_CONT, PERCENTILE_DIST,…
Nuevas funciones de agregado
α “ASYNC_NETWORK_IO”: “Occurs on network writes when the task is blocked behind the network. Verify that the client is processing data from the server.”
α “PAGEIOLATCH_SH: “Occurs when a task is waiting on a latch for a buffer that is in an I/O request. The latch request is in Shared mode. Long waits may indicate problems with the disk subsystem.”
PAGINACION ¿Por qué paginar?
α Con SQL Server 2005 aparecieron las funciones de Ranking β Pudimos empezar a dar solución al problema de la paginación, con
algo de imaginación, eso si
PAGINACION Antes de SQL11
α Sintaxis ANSI que puede servir a fines idénticos a TOP(n)
α Muchisima mas potente
α Filtro aplicado sobre la cláusula ORDER BY
α OFFSET indica cuantas filas hay que saltarse
α FETCH indica cuantas filas se deben devolver tras el OFFSET
α *Por ahora, mismo plan de ejecución
Paginación en Denali Cláusulas OFFSET/FETCH
α Clara y concisa
Paginación Cláusula OFFSET/FETCH
Paginación 10 mins
α Una secuencia es un objeto usado para autogenerar números basados en criterios flexibles
α Es la evolución de IDENTITY
α Muy flexible y con posibilidad de optimizar su rendimiento
α Solo se soporta nombre de dos partes
α La equivalencia lógica con IDENTITY
Secuencias Introduccion
α 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 ¿Por qué?
Secuencias Vs Identity
Option Identity Sequences
Obtain value before use No Yes
Table-Independent No Yes
Use in UPDATE No Yes
Used in SELECT No Yes
Control order Not in SELECT INTO
Yes in INSERT SELECT
Yes
Effected by rollback No No
Can associate/disassociate with an
existing column
No Yes
Can define minimum and maximum
values
No Yes
Can cycle No Yes
Can change increment No Yes
Supports defining caching No Yes
Obtain range of values No Yes
α Se utiliza por defecto caché de 50 elementos
β 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 caidas
Secuencias Rendimiento contra identity
α Se puede obtener un aumento muy alto utilizando sp_sequence_get_range
Secuencias Rendimiento contra Identity (II)
Secuencias
α Se puede utilizar IFilters como propiedades extendidas para hacer búsquedas en FTS
α Ahora por tanto, se puede buscar en las propiedades que exponen de forma óptima
Full Text Search Mejoras en iFTS
α Esto unido al FILETABLE storage…no os da la impresión de que WinFS está dando tufillo? :)
create fulltext index on
db_X.svceventinfo(file_stream)
α Mejoras del motor entre 7-10x frente a SQL 2008 (Según internals de MS)
β Comparado con SQL 2005 más de 60x
α En el peor de los casos, tiempos de respuesta iFTS de <3ms
α Hasta 350M de documentos por almacenamiento
α Incremento de respuesta linear con el nº de CPU
Full Text Search Motor
α Ahora hasta 8 Niveles por defecto β Antes 4
β Hasta 256 niveles (antes 32)
α GEOGRAPHY_AUTO_GRID y GEOMETRI_AUTO_GRID
α Soporte para objetos curvilíneos β CircularString
β CompoundCurve
β CurvePolygon
α Nuevos métodos adaptados β STCurveToLine()
β BufferWithCurves()
β …
α Mayor Precisión
Spatial Mejoras en indexación
α Para mayor precisión, cláusula SPATIAL_WINDOW_MAX_CELL con posibilidad de llegar a 2048 celdas
α La mayoría de operadores y métodos se han optimizado
α Ya es posible realizar agregaciones β UnionAggregate
β EnvelopeAggregate
β CollectionAggregate
β ConvexHullAggregate
α Ya es posible superar el valor de hemisferio lógico
Spatial Más novedades
SELECT GEOGRAPHY::UnionAggregate(geog) FROM Regions
α Escalabilidad
α Columnar storage
α Agregados con ventana deslizante
α Paginación eficiente
α Secuencias
α Mejoras en iFTS
α Optimización en tipos de datos espaciales
Objetivos de la sesión Agenda
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/