SlideShare a Scribd company logo
1 of 78
Ing. Eduardo Castro, PhD
Microsoft SQL Server MVP
PASS Regional Mentor
PASS Global Board of Directors Advisor
ecastro@simsasys.com
http://www.youtube.com/eduardocastrom
SQL Server Query Processor
Patrocinadores del SQL Saturday
Gold Sponsor
Geek Sponsor
Bronze Sponsor
Referencias
 Understanding QP. C F. Software Design
Engineer. Microsoft SQL Server
Agenda
• SQL Server engine architecture
• Query execution
• Showplan
• Iteradores de SQL
SQL Server Engine
Arquitectura de Alto Nivel
Query Execution
(Query Operators, Memory
Grants, Parallelism, Showplan)
Storage Engine
(Access Methods, Buffer Pool, Locking, Transactions, …)
SQL-OS
(Threads, Memory Management, Synchronization, …)
Query Optimization
(Plan Generation, View Matching,
Statistics, Costing)
LanguageProcessing
(Parse/Bind, Statement/Batch Execution, Plan Cache)
Utilities
(DBCC,Backup/Restore,BCP,…)
Metadata,TypeSystem,
ExpressionServices
Introducción al Query Optimizer
 En el núcleo del motor de base de datos de SQL Server
hay dos componentes principales: el motor de
almacenamiento motor y el procesador de consultas,
también llamado el motor relacional.
 El motor de almacenamiento es responsable de la lectura
de datos entre el disco y la memoria de manera que se
optimice concurrencia mientras mantiene la integridad de
los datos.
 El procesador de consultas, como sugiere el nombre,
acepta todas las consultas a SQL Server, idea un plan para
su óptima ejecución, y luego ejecuta el plan y ofrece los
resultados requeridos.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Introducción al Query Optimizer
 Para cada query que recibe, el trabajo del procesador de
consultas es idear un plan, tan pronto como sea posible,
que describa la mejor manera posible (o, al menos, una
forma eficiente) de ejecutar dicha consulta.
 Su segundo trabajo es ejecutar la consulta de acuerdo con
ese plan.
 Cada una de estas tareas se delega en un componente
separado dentro del procesador de consultas; el
optimizador de consultas diseña el plan y luego lo pasa al
motor de ejecución, que realmente ejecutar el plan y
obtiene los resultados de la base de datos.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Libro De Referencia
El procesamiento de consultas
 Parsing and binding - La consulta es parsed and bound.
Asumiendo que la consulta es válida, la salida de esta fase
es un árbol lógico
 Con cada nodo en el árbol representa una
operación lógica que la consulta debe llevar a cabo, como
la lectura de una tabla en particular hacer un inner join.
 Un planes de ejecución es, en esencia, un conjunto de
operaciones físicas por ejemplo, Index Seek, a Nested Loops Join
que se pueden realizar para producir el resultado deseado, tal como
se describe por el árbol lógico
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El procesamiento de consultas
 Optimización de consultas - El árbol lógico se usa
entonces para ejecutar la optimización de la consulta, que
a grandes rasgos se compone de los siguientes dos pasos:
 Generación de posibles planes de ejecución - Utilizando el
árbol lógico, el optimizador elabora una serie de posibles formas
de ejecutar la consulta, es decir, un número de posibles planes
de ejecución
 Evaluación de costo de cada plan - Mientras que el
optimizador de consultas no genera cada posible plan de
ejecución, sí evalúa el costo de los recursos y el tiempo de cada
plan; el plan que el optimizador de consultas considera que tiene
el menor costo es seleccionado, y lo pasa al motor de ejecución.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El procesamiento de consultas
 Query execution, plan caching - la consulta
es ejecutada por el motor de ejecución,
según el plan seleccionado; el plan puede
ser almacenado en la memoria caché.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El proceso de optimización
 El proceso de optimización, es la generación de
los planes de ejecución candidatos
y la selección de los mejores de estos planes de
acuerdo a su costo.
 El optimizador de consultas de SQL Server
utiliza un modelo de estimación de costos
para estimar el costo de cada uno de los planes
de candidatos.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El proceso de optimización
 La optimización de consultas es el proceso e mapear las
operaciones lógicas del árbol original en su equivalente de
operaciones físicas, las cuales serán ejecutadas por el
motor de ejecución.
 La funcionalidad del motor de ejecución aplicar los planes
de ejecución que son creados por el optimizador de
consultas.
 El motor de ejecución implementa cierto número de
diferentes algoritmos, y a partir de estos algoritmos que el
optimizador de consultas debe elegir, cómo formula los
planes de ejecución.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El proceso de optimización
 Se traducen las operaciones lógicas originales en el
operaciones físicas que el motor de ejecución es
capaz de realizar, y los planes de ejecución incluyen
tanto las operaciones lógicas y físicas.
 Algunos operaciones lógicas, como un Sort se
traducen a la misma operación física, mientras que
otras operaciones lógicas se traducen a varias
operaciones físicas.
 Por ejemplo, una join lógico se puede traducir en un
Nested Loops Join, Merge Join, o Hash Join .
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El proceso de optimización
 El producto final del proceso de optimización
de la consulta es un plan de ejecución: un
árbol que consiste de un número de
operadores físicos, que contienen los
algoritmos que serán ejecutados por el motor
de ejecución con el fin de obtener los
resultados deseados desde
la base de datos.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Generación de planes de ejecución
candidatos
 El propósito básico del optimizador de consultas es
encontrar un plan de ejecución eficiente
para su búsqueda.
 Incluso para las consultas relativamente simples, puede
haber un gran número de diferentes caminos acceder a los
datos para producir el mismo resultado final.
 El Optimizador de Consultas tiene que seleccionar el mejor
plan posible de un gran número planes candidatos, y es
importante que haga una buena elección, ya que el tiempo
necesario para volver los resultados al usuario pueden
variar mucho, dependiendo de qué plan es seleccionado.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Generación de planes de ejecución
candidatos
 El optimizador de consultas debe lograr un equilibrio entre
el tiempo de optimización y calidad del plan.
 Por ejemplo, si el optimizador de consultas gasta un
segundo hallazgo un buen lo suficientemente plan de que
ejecuta en un minuto, entonces no tiene sentido tratar de
encontrar el plan perfecto o más plan óptimo, si esto va a
tomar cinco minutos de tiempo de optimización, más el
tiempo de ejecución.
 Así que SQL Server no realiza una búsqueda exhaustiva,
sino que intenta encontrar un plan eficiente tan
rápidamente como sea posible.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Generación de planes de ejecución
candidatos
 Con el fin de explorar el espacio de búsqueda, el
optimizador de consultas utiliza reglas de transformación y
heurística.
 Los generación de planes de ejecución de candidatos se
realiza dentro del optimizador de consultas usando reglas
de transformación, y con el uso de heurísticas limita el
número de opciones, con el fin de mantener el tiempo de
optimización razonable.
 Los planes candidatos son almacenado en la memoria
durante la optimización, en un componente llamado Memo.
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
El procesamiento de consultas
Inside the SQL Server Query Optimizer. Benjamin Nevarez.
Cómo funciona el procesamiento de consultas
PlanCache
Generate ExecutablePlan
Execute
Fix Memory Grant &DoP
Auto-Param
Bind, ExpandViews
NotFound
Parse
Query Optimization
Return Plans toCache
NewStatement
LanguageProcessing
(Parse/Bind, Statement/Batch Execution, PlanCache)
Found Executable FoundCompiled
Plan Plan
QueryOptimization QueryExecution
(Plan Generation,View (QueryOperators,
Matching,Statistics, MemoryGrants,
Costing) Parallelism,Showplan)
Flujo de ejecución de Queries
• Query plans son árboles de iteración
• Iterador = unidad básica del query plan execution
• Cada iterador tiene 0, 1, 2, o N hijos
• Los métodos principales de cada iterador son:
– Open
– GetRow
– Close
• Los flujos de control van hacia abajo en el árbol
• Data flows (se llenan) hacia arriba en el árbol
Consulta de ejemplo
SELECT l_orderkey, l_linenumber, o_orderstatus
FROM lineitem JOIN orders ON l_orderkey = o_orderkey
WHERE l_suppkey < 2000 AND l_partkey < 2000
lineitem
l_suppkey<2000, l_partkey<2000
l_orderkey=o_orderkey
orders
l_orderkey, l_linenumber, o_orderstatus
Obtenga toda la información acerca line-items que están filtrados
por proveedores y partes
SQL Server Query Optimizer
 Basado en el Cascades Framework
 Basado en transformación, enfoque top-down
 Optimization = Tasks + Memo
( Programs = Algorithms + Data Structures )
 Completamente basado en costos
 Flexible y con extensiones
 Se pueden agregar nuevos operadores y reglas
SQL
Query
Parsing,
Validation
Normalization
(predicate unfolding,
join collapsing, view
substitution, etc.)
Cost-based
Optimization
Execution
Plan
The Memo
 Search Space Memory
 Compactly stores all explored alternatives (AND-OR graph)
 Groups together equivalent operator trees and their plans
 Provides memoization, duplicate detection, property and cost
management, etc.
1) SELECT (b>20, )
b>20
S
1) SELECT (a<10, )
a<10
R
2) JOIN (x=y, , )
1) SELECT (a<10, )a<10 b>20
R S
1) GET(S)S1) GET(R)R
b>20R
S
1) JOIN (x=y, , )
2) ...
3) ...
Groups
Expressions
Initialize Memo
Optimize Root Group
Optimize Group
Explore Group
Obtain enforcers and
implementation rules for all
expressions
Apply Rules by Promise
Optimize Inputs
Obtain optimization context
Optimize children groups
Calculate costs, pick best
Apply Rule
Pruning checks
Generate bindings, substitutes
Restrict ruleset
optimizing?Opt Inputs:Explore
Explore Expression
Apply-always rules
Explore Inputs
Rest of Apply-always Rules
Other Rules by Promise
Explore Group
For each expression
-Get Guidance
-Explore Expression.
Optimization Tasks
Planteamiento del Problema
Workload Database
Configuration
Physical
Design Tool
Conjunto de
estructuras físicas
(es decir, índices y
vistas) que hacen
que las cargas de
trabajo similares
ejecutar lo más
rápido posible
Database Tuning Advisor Yukon
Carga de trabajo
Comprimir
la carga de
trabajo
Selección de
candidatos
(Por consulta)
Enumeración
Tiempo?
Sí
No
La fusión
Recomendación
Sintonización
Cliente
...
Optimizador
de consultas Base de datos
Servidor
Y si
API
Metadatos
- Crear hipotético Índice / Vista.
- Optimizar consultas con
respecto a las configuraciones
hipotéticas.
Nueva Arquitectura
 Instrumentación el optimizador de consultas.
 Estrategia de búsqueda basado en relaxations.
…
Query
Optimizer
Database
Server
What-if
API
Metadata
Relaxation
Time?
Yes
No
Recommendation
Tuning
Client
Workload
Request
Identification
Get Optimal Configuration
(per query)
Requests
API
Tipos de iteradores
• Insert, update, and delete
• Top
• Compute scalar
• Filter
• Concatenation
• Sequence
• Scan and seek
• Joins
• Aggregates
• Sorts
• Spools
• Parallelism
Showplan
• Muestra el plan de ejecución
• Excelente herramienta ...
– Para entender qué es lo que está haciendo SQL Server
– Para diagnosticar problemas de desempeño
• Un montón de Estadísticas ...
– Cantidad Estimada y real de fila
• Gráfica, texto, y XML versiones
– XML desde SQL Servidor 2005
Gráfico vs XML
 Gráfico
 Vista con base en íconos
 Da una vista general
 Fácil identificar los iteradores más costosos
 Provee ayuda para cada iterador
 XML
 Vista gráfica sencilla desde SQL Server 2005
 Muestra mayor detalle
 Más difícil de leer que los planes gráficos
| --StreamAgregado
| --sort
| --NestedLoops
| Índice --Clustered
Buscar
| --indexVerk
...
<RelOp NodeID= "0"
...>
<StreamAggregate>
<RelOp NodeID= "1"
...>
<Ordenar...>
...
Leyendo planes
• Gráfico
– Cada icono representa un iterador en el árbol
– Estructura del árbol estructura y flujos de datos están representados por flechas
que conectan los iconos
– Más información es disponible en el información sobre herramientas y en el
"propiedades" cristal
• XML
– Un elemento por iterador más los elementos adicionales para otra información
– Estructura del árbol es representado por anidamiento de elementos
– Flujos de datos están en los elementos más exteriores
Showplan ejemplos
DECLARE @Date DATETIME
SET @Date = '1996-07-04'
SELECT L_SHIPDATE, COUNT_BIG(*)
FROM LINEITEM JOIN ORDERS ON L_ORDERKEY = O_ORDERKEY
WHERE O_ORDERDATE = @Date
GROUP BY L_SHIPDATE
ORDER BY L_SHIPDATE
Plan de ejemplo
Plan de ejemplo
Plan ejemplo
|--Stream Aggregate(GROUP BY:([L_SHIPDATE]) DEFINE:([Expr1008]=Count(*)))
|--Sort(ORDER BY:([L_SHIPDATE] ASC))
|--Nested Loops(Inner Join, OUTER REFERENCES:(*ORDERS+.*O_ORDERKEY+, …) …)
|--Clustered Index Seek(OBJECT:(*ORDERS+.*O_ORDERDATE_CLUIDX+), SEEK:(*O_ORDERDATE+=*@Date+)…)
|--Index Seek(OBJECT:(*LINEITEM+.*L_ORDERKEY_IDX+), SEEK:(*L_ORDERKEY+=*O_ORDERKEY+)…)
<ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2"
…>
<StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … />
<QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …>
<RelOp …>
…
</RelOp>
<ParameterList><ColumnReference Column="@Date"
ParameterCompiledValue="'1996-03-15 …'"
ParameterRuntimeValue="'1996-07-04 …'"
/></ParameterList>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
XML Plan
<ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2" …>
<StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … />
<QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …>
<RelOp …>
…
</RelOp>
<ParameterList>
<ColumnReference Column="@Date"
ParameterCompiledValue="'1996-03-15 …'"
ParameterRuntimeValue="'1996-07-04 …'" />
</ParameterList>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
<RelOp NodeId="0" PhysicalOp="Stream Aggregate" LogicalOp="Aggregate" …>
<StreamAggregate>
<RelOp NodeId="1" PhysicalOp="Sort" LogicalOp="Sort" …>
<MemoryFractions Input="0.782609" Output="1" />
<Sort Distinct="0">
<RelOp NodeId="2" PhysicalOp="Nested Loops" LogicalOp="Inner Join" …>
<NestedLoops Optimized="1" WithUnorderedPrefetch="1">
<RelOp NodeId="5" PhysicalOp="Clustered Index Seek" …>
<IndexScan Ordered="1" ScanDirection="FORWARD" …>
<Object … Table="[ORDERS]" Index="[O_ORDERDATE_CLUIDX]" … />
</IndexScan>
</RelOp>
<RelOp NodeId="6" PhysicalOp="Index Seek" …>
<IndexScan Ordered="1" ScanDirection="FORWARD" …>
<Object … Table="[LINEITEM]" Index="[L_ORDERKEY_IDX]" … />
</IndexScan>
</RelOp>
</NestedLoops>
</RelOp>
</Sort>
</RelOp>
</StreamAggregate>
</RelOp>
XML Plan
<ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2" …>
<StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … />
<QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …>
<RelOp …>
…
</RelOp>
<ParameterList>
<ColumnReference Column="@Date"
ParameterCompiledValue="'1996-03-15 …'"
ParameterRuntimeValue="'1996-07-04 …'" />
</ParameterList>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
XML Plan
Seek"
<RelOp NodeId="5"
PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index
EstimateRows="623.462" …>
<OutputList>
<ColumnReference … Table="[ORDERS]" Column="O_ORDERKEY" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="629" … ActualExecutions="1" />
</RunTimeInformation>
<IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0"
ForceSeek="0" NoExpandHint="0">
<DefinedValues>
<DefinedValue>
<ColumnReference … Table="[ORDERS]" Column="O_ORDERKEY" />
</DefinedValue>
</DefinedValues>
<Object … Table="[ORDERS]" Index="[O_ORDERDATE_CLUIDX]" IndexKind="Clustered" />
<SeekPredicates>
…
</SeekPredicates>
</IndexScan>
</RelOp>
Text/XML plan options
SQL Profiler y DMVs también muestran los planes
Command Execute
Query?
Display
Estimated
Row Counts
& Stats
Display
Actual
Row
Counts
Text
plan
SET SHOWPLAN_TEXT ON No No No
SET SHOWPLAN_ALL ON No Yes No
SET STATISTICS PROFILE ON Yes Yes Yes
XML
plan
SET SHOWPLAN_XML ON No Yes No
SET STATISTICS XML ON Yes Yes Yes
Iteradores comunes
• Scans and seeks
• Join iterators
– Nested loops join
– Merge join
– Hash join
• Aggregation iterators
– Stream aggregrate
– Hash aggregate
• Los iteradores no son buenos ni males
• No existe “el mejor” join o tipo de agregación
• Cada iterador funciona bien dependiendo del escenario
Scans and seeks
• Scans devuelve toda una tabla o un índice
– Los scan de índices pueden ser con o sin orden
• Seeks devuelve de forma eficiente las filas de
uno o más rangos de un índice
– Los seeks de un índice siempre son ordenados
Index scan vs. index seek
Select Price from Orders where OrderKey = 2
Index Scan
Where OrderKey = 2
Index Seek
Where OrderKey = 2
OrderKey Price
1 86.00
2 17.00
3 88.00
4 17.00
5 96.00
6 22.00
7 74.00
8 94.00
9 56.00
… …
1 86.00
2 17.00
3 88.00
… …
2 17.00
Nested loops join
• Algoritmo básico:
1. Obtener una fila de la entrada izquierda
2. Obtener todas filas de la entrada derecha que corresponde a la fila
de la entrada izquierda
3. Cuando ya no hay más filas que hagan match desde la entrada
derecha, obtenga la siguiente fila de la entrada izquierda y repita
• Parámetros correlacionados
– Datos de la entrada izquierda afecta los datos devuelto por la
entrada derecha (es decir, paso 2 depende de paso 1)
– Si no se tienen parámetros correlacionados cada ejecución de la
entrada derecha se produce el mismo resultado
Nested loops join example
Select C.Name, O.Price
from Cust C join Orders O
on O.CustKey = C.CustKey
where C.City = ‘Boston’
Nested
Loop Join
Index Seek
Cust
Where C.City =
‘Boston’
Index Seek
Orders
On O.CustKey =
C.CustKey
No rows match CustKey = 6
4 88.00
5 86.00
5 94.00
5 56.00
4 Boston Alice
5 Boston Bob
6 Boston Cathy
Alice 88.00
Bob 86.00
Bob 94.00
Bob 56.00
Nested loops join
• El único tipo join...
– Que soporta predicados de inequidad
• La entrada derecha puede ser un index seek o un subplan complejo
• Optimizaciones:
– Usar índices para optimizar la selección de filas que hacen match de la entrada
derecha filas (Además conocido como una índice unirse a)
– Usar lazy spool en la entrada derecha si esperamos duplicar filas de la entrada
izquierda
• Tips de desempeño:
– Costo es proporcional a la producto de la cardinalidad de las entradas izquierda y
derecha
– En general es mejor para conjuntos de datos pequeños
– Crear un índice para cambiar el producto cartersiano en un index join
– Verifique si se da gran cantidad de I/Os aleatorios
Columnas indizadas
• Key columns:
– Conjunto de columnas que puede ser utilizado en un índice
– En un índice compuesto, el orden del columnas importa:
• Determina el ordenamiento del índice
• Solo puede hacer seek en una columna si todas las columnas anteriores tienen
predicados de equidad
– Los non-unique non-clustered index en una tabla con un clustered index
incluye implícitamente el clustered index para las llaves
• Covered columns:
– Conjunto de columnas que pueden ser la salida de un seek o scan del índice
– Heap Index o Clustered Index siempre cubren todas las columnas
– Non-clustered index cubre las columnas llave del índice y si la tabla tiene
clustered index las llaves del clustered index
– Se pueden agregar más columnas durante la creación del índice
Bookmark lookup
• Pregunta:
– Lo que pasa si el non-clustered index para un seek no cubre todas
de la columnas necesarias por la consulta?
• Respuesta:
– Look up las columnas extra en el heap o clustered index
– Esta operación es conocida como bookmark lookup
• SQL Server 2000 tenía bookmark lookup iterator
• SQL Server 2005 y 2008 no tienen un bookmark lookup iterator
– En su lugar simplemente unen el non-clustered index con el clustered
index usando un nested loops join
– Parasabersiseusaunbookmark lookup, busque el keyword
“LOOKUP” en el clustered index seek
– Bookmark lookup provoca I/Os aleatorios: afecta el desempeño
Bookmark lookup example
Clustered index on OrderKey
Non-clustered index on Custkey
Select Price from Orders where CustKey = 5
Index Seek
Where
CustKey = 5
Nested
Loop Join
Clustered
Index Seek
Select Price
OrderKey CustKey Price
1 5 86.00
2 2 17.00
3 4 88.00
4 9 17.00
5 1 96.00
6 7 22.00
7 8 74.00
8 5 94.00
9 5 56.00
… … …
1 5
8 5
9 5
1 5 86.00
8 5 94.00
9 5 56.00
Merge Join
• Requiere al menos un predicado equijoin
• Datos debe estar ordenados en los join keys
– Sort Order debe ser proporcionado por un índice
– Opuede incluir un sort explícito
• Algoritmo Básico :
1. Obtener una fila de las entradas izquierda y derecha
2. Si las filas coinciden devuelva la fila unida
3. De lo contrario, obtenga una nueva fila de cualquier
entrada que sea la más pequeña y repita
Merge join
Index Seek
Cust
Where C.City =
‘Boston’
Select C.Name, O.Price
from Cust C join Orders O
on O.CustKey = C.CustKey
where C.City = ‘Boston’
Merge Join
O.CustKey =
C.CustKey
Index Scan
Orders
Cust and Orders indexes ordered by CustKey
2 17.00
4 88.00
5 86.00
5 94.00
5 56.00
7 22.00
4 Boston Alice
5 Boston Bob
6 Boston Cathy
Alice 88.00
Bob 86.00
Bob 94.00
Bob 56.00
Merge join
• Optimizaciones:
– One to many join
– Inner join terminates tan pronto como una de las entradas se
termina
• Tips de desempeño:
– Costo es proporcional a la suma de las cardinalidades de las
entradas
– Tiene buen desempeño para entradas grandes y pequeñas
especialmente si el sort order es proveído por un índice
– Si el merge join plan incluye sort explícitos, vigile que no se den
splilling
– No funciona tan bien en paralelo como un hash join
Hash join
• Requiere al menos un predicado equijoin
• Algoritmo Básico :
1. Obtener todas filas de la entrada izquierda
2. Construir un in-memory hash table utilizando filas de la
entrada izquierda
3. Obtener todas las filas de la entrada derecha
4. Utilizar el hash table para encontrar coincidencias
• Requiere memoria para construir el hash table
• Si el join se queda sin memoria, porciones las
entradas izquierdas y derechas deben ser
enviadas a disco y manejadas en pasadas distintas
Hash Table
Hash join example
Hash Join
Index Seek
Cust
Where C.City =
‘Boston’
Select C.Name,
O.Price from Cust C
join Orders O on
O.CustKey =
C.CustKey where
C.City = ‘Boston’
O.CustKey =
C.CustKey
Table Scan
Orders
Order of Cust and Orders tables does not matter
5 Boston Bob
4 Boston Alice
6 Boston Cathy
5 86.00
2 17.00
4 88.00
9 17.00
5 94.00
5 56.00
Bob 86.00
Alice 88.00
Bob 94.00
Bob 56.00
Hash join
• Fuciona como stop and go en la entrada izquierda
• Optimizaciones:
– Construir la tabla hash la entrada más pequeña
– Si el join hace splills, puede hacer switch de las entradas
– Puede utilizar bitmap para descartar entradas de la fila de derecha más
rápido
• Tips de desempeño:
– Costo es proporcional a la suma de las cardinalidades de las entradas
– Generalmente se desempeña bien para conjuntos de datos grandes
– Los parallel hash joins escalan bien
– Verifique no se dén spilling, especialmente múltiples pasadas (utilice el
SQL Profiler)
Stream aggregate
• Los datos deben estar ordenados en grupos por la
llave
• El ordenamiento agrupa las filas con llaves iguales
juntas
• Procesa los grupos de uno en uno
• No causa bloqueos o utiliza memoria
• Es eficiente si el sort order es proveído por un índice o
sí el plan incluye ordamientos
• Es la opción para scalar aggregates
Stream aggregate example
Select CustKey, sum(Price) from Orders group by CustKey
Index Scan
Stream Agg
Orders index ordered by CustKey
4 88.00
5 86.00
5 94.00
5 56.00
7 22.00
4 88.00
5 236.00
7 22.00
Hash aggregate
• Datos no tiene que estar ordenados
• Construye una tabla hash para todos los grupos
• Stop and go
• Al igual que un hash join :
– Requiere memoria, puede utilizar disco si se acaba la memoria
– Generalmente mejor para conjuntos de datos grandes
– Los Parallel hash aggregates escalan bien
• Valores con llaves duplicadas...
– Puede ser malo para un hash join porque no es posible subdividir un
hash bucket que tiene todos duplicados
– Son buenos para un hash aggregate debido a que los duplicados
colapsan dentro una única entrada de la tabla hash
Hash Table
Hash aggregate example
Select CustKey, sum(Price) from Orders group by CustKey
Table Scan
Hash Agg
Order of Orders table does not matter
7 22.00
4 88.00
5 236.00
5 86.00
4 88.00
7 22.00
5 94.00
5 56.00
Tips de desempeño
• Vigile errores en los cardinality estimates
– Los errores se propagan hacia arriba, debe buscar la raíz de la causa
– Asegúrese que las estadísticas están actualizadas y que son lo más exactas posible
– Evite el uso excesivo de predicatos complejos
• Recomendaciones generales:
– Utilice set based queries
– Evite joining columns con mismatched data types
– Evite outer joins, cross applies, complex sub-queries, dynamic index seeks, …
– Evite dynamic SQL
– Utilice SET STATISTICS IO ON para vigilar si de dan mucha cantidad de I/Os
– Utilice índices como workaround locking, concurrency, and deadlock issues
• OLTP:
– Evite iterados que consuman memoria o que causen bloqueos
– Utilice seeks no scans
• DW :
– Utilice planes paralelos
– Verifique que no se den skews in los planes paralelos
Otros planes de ejecución
• Static vs. dynamic index seeks
• Insert, update, y delete plans
– Update por row vs. por index
– Split sort collapse updates
Static vs. dynamic index seeks
• Static index seeks
– Los rangos son conocidos y no se traslapan en tiempo de
compilación
– Standalone index seek iterator
• Dynamic index seeks
– Los rangos se traslapan en tipo de de ejecución
– Típicamente se utilzian con predicados OR’ed con T-SQL
o parámetros correlacionados:
• … where State = @p1 or State = @p2
– Sort and merge (merge interval iterator) los rangos
cambian en tiempo de ejecución según sea necesario
Dynamic index seek plan
Merge interval
Select * from T
where [C] between @p1 and @p2 or
[C] between @p3 and @p4 or
[C] between @p5 and @p6
@p1 @p2
@p3 @p4
@p5 @p6
We must not scan this range twice!
Merge interval
Sort
Select * from T
where [C] between @p1 and @p2 or
[C] between @p3 and @p4 or
[C] between @p5 and @p6
@p1 @p2
@p5 @p6
@p3 @p4
We must not scan this range twice!
Merge interval
Merge
Select * from T
where [C] between @p1 and @p2 or
[C] between @p3 and @p4 or
[C] between @p5 and @p6
@p3 @p4@p1 @p6
Each unique range scanned only once!
Insert, update, and delete plans
• Todos los planes de update tienen dos partes:
– Read cursor devuelve las filas para insert, update, or delete
– Write cursor
• Ejecuta el insert, update, o delete
• Mantiene los non-clustered indexes
• También los checks constraints, indexed views, …
• La mayoría de las veces es un único update iterator
Per row vs. per index updates
• Per row plans:
– Un único update iterator mantiene todos los índices (lo cual incluye
heap o clustered index y todos los non-clustered indexes)
– Lee una fila de la entrada a la vez y después modifica todos los índices
afectados
• Per index plans:
– El plan tiene un iterador de update separado para cada índice afectado
– Cada iterador de update mantiene sólo un índice
– Lee y pone en spool todas las filas de entrada antes de modificar
cualquier índice
– Aplica todas las modificaciones en un índice a la vez
• Por qué per index?
– Para desempeño en large updates (e.g., sort on index key)
Per row update plan
Write cursor Read cursor
Per row update plan
Write cursor Read cursor
Per index update plan
Write cursor
Read cursor
Split sort collapse updates
Update T set UniqCol = UniqCol + 1
• Debe asegurarse que los update a los unique indexes
no hacen violaciones de unicidad
• Los iteradores de split, sort, y collapse iterators
reorganizan el flujos de filas a actualizar para
garantizar que no existe violaciones de unicidad
Split sort collapse
Update T set UniqCol = UniqCol + 1
Sort
Collapse
Split
Old New
Old New
UniqCol Data
1 X
2 Y
1 2 X
2 3 Y
Del 1 X
Ins 2 X
Del 2 Y
Ins 3 Y
Del 1 X
Del 2 Y
Ins 2 X
Ins 3 Y
Del 1 X
Upd 2 Y X
Ins 3 Y
SQL Server 2016 Query Store
Regresiones de
planes
Identificar a los
grandes
consumidores
Evitar riesgos de
upgrades de
SQL Server
Analizar cargas
de trabajo
Resumen
• Los iteradores son los bloques básicos del query execution y query plans
• Showplan
– Graphical
– Text
– XML
• Scan vs. seek vs. bookmark lookup
• Existen tres join iterators:
– Nested loopsjoin
– Merge join
– Hashjoin
• Dos aggregation iterators:
– Stream aggregate
– Hash aggregate
Referencias
• Libros…
– Inside SQL Server 2005: Query Tuning and Optimization
• Blogs …
– http://blogs.msdn.com/craigfr
– http://blogs.msdn.com/sqlqueryprocessing
• Otras fuentes…
– Books online
– MSDN
– Newsgroups and forums
– Web search
Evaluaciones
Evaluacion del evento
http://www.sqlsaturday.com/443/eventeval.aspx
Evaluacion de las charlas
http://www.sqlsaturday.com/443/sessions/sessionevaluation.aspx
78 |
Eduardo
Castro
ecastro@simsasys.com http://ecastrom.blogspot.com
edocastro
PREGUNTAS Y RESPUESTAS

More Related Content

What's hot

What's hot (20)

El kernel en los sistemas operativos
El kernel en los sistemas operativosEl kernel en los sistemas operativos
El kernel en los sistemas operativos
 
Modelo SPICE
Modelo SPICEModelo SPICE
Modelo SPICE
 
Modelo incremental
Modelo incrementalModelo incremental
Modelo incremental
 
Seguridad sql server
Seguridad sql serverSeguridad sql server
Seguridad sql server
 
Fundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareFundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de software
 
Diseño caso de pruebas
Diseño caso de pruebasDiseño caso de pruebas
Diseño caso de pruebas
 
Herramientas De Control, Monitoreo Y Acceso A Base De Datos
Herramientas De Control, Monitoreo Y Acceso A Base De DatosHerramientas De Control, Monitoreo Y Acceso A Base De Datos
Herramientas De Control, Monitoreo Y Acceso A Base De Datos
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
SPICE
SPICESPICE
SPICE
 
Métricas de calidad de software
Métricas de calidad de softwareMétricas de calidad de software
Métricas de calidad de software
 
Ciclo de vida del software
Ciclo de vida del softwareCiclo de vida del software
Ciclo de vida del software
 
Tema 1 Ingeniería de Requisitos
Tema 1 Ingeniería de RequisitosTema 1 Ingeniería de Requisitos
Tema 1 Ingeniería de Requisitos
 
Calidad de software
Calidad de softwareCalidad de software
Calidad de software
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
[ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition [ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition
 
Interrupciones de la bios
Interrupciones de la biosInterrupciones de la bios
Interrupciones de la bios
 
Modelo cascada
Modelo cascadaModelo cascada
Modelo cascada
 
Capítulo 18 (Técnicas de control de la concurrencia)
Capítulo 18 (Técnicas de control de la concurrencia)Capítulo 18 (Técnicas de control de la concurrencia)
Capítulo 18 (Técnicas de control de la concurrencia)
 
Clases Genéricas en Java
Clases Genéricas en JavaClases Genéricas en Java
Clases Genéricas en Java
 
tipos de pruebas.
tipos de pruebas.tipos de pruebas.
tipos de pruebas.
 

Viewers also liked (15)

SQL Server Query Processor
SQL Server Query ProcessorSQL Server Query Processor
SQL Server Query Processor
 
Optimiza tus queries desde abajo
Optimiza tus queries desde abajoOptimiza tus queries desde abajo
Optimiza tus queries desde abajo
 
Cap 7. oracle SQL fundamentals
Cap 7. oracle SQL fundamentalsCap 7. oracle SQL fundamentals
Cap 7. oracle SQL fundamentals
 
Join sql
Join sqlJoin sql
Join sql
 
Join
JoinJoin
Join
 
Join
JoinJoin
Join
 
Arquitectura sql
Arquitectura sqlArquitectura sql
Arquitectura sql
 
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTETaller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
 
Curso SQL - Leccion 7
Curso SQL - Leccion 7  Curso SQL - Leccion 7
Curso SQL - Leccion 7
 
Sql joins
Sql joinsSql joins
Sql joins
 
Lo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql serverLo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql server
 
SQL JOIN
SQL JOINSQL JOIN
SQL JOIN
 
Servicios cognitivos y su integración
Servicios cognitivos y su integraciónServicios cognitivos y su integración
Servicios cognitivos y su integración
 
Inner join
Inner joinInner join
Inner join
 
Cómo descargar presentaciones desde SlideShare
Cómo descargar presentaciones desde SlideShareCómo descargar presentaciones desde SlideShare
Cómo descargar presentaciones desde SlideShare
 

Similar to SQL Server Query Processor

Libro de recetas.pptx
Libro de recetas.pptxLibro de recetas.pptx
Libro de recetas.pptxEugenio764166
 
SQLSaturday 322 Guatemala 2014 Cubes Performance
SQLSaturday 322 Guatemala 2014 Cubes PerformanceSQLSaturday 322 Guatemala 2014 Cubes Performance
SQLSaturday 322 Guatemala 2014 Cubes PerformanceMarco Tulio Gómez Reyes
 
Optimizacion de Consultas en SQL (Base datos).ppt
Optimizacion de Consultas en SQL (Base datos).pptOptimizacion de Consultas en SQL (Base datos).ppt
Optimizacion de Consultas en SQL (Base datos).pptanali77
 
SQL Server Fundamentals 3ra Sesion
SQL Server Fundamentals 3ra SesionSQL Server Fundamentals 3ra Sesion
SQL Server Fundamentals 3ra SesionJulián Castiblanco
 
Query Store al rescate - PASS Spanish
Query Store al rescate - PASS Spanish Query Store al rescate - PASS Spanish
Query Store al rescate - PASS Spanish Javier Villegas
 
Taller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesTaller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesXavier Espinoza
 
SQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes PerformanceSQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes PerformanceMarco Tulio Gómez Reyes
 
Dimensionado y gestión del entorno virtual
Dimensionado y gestión del entorno virtualDimensionado y gestión del entorno virtual
Dimensionado y gestión del entorno virtualOmega Peripherals
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusXavier Espinoza
 
Optimizacion de Modelos Multidimensionales con Analysis Services
Optimizacion de Modelos Multidimensionales con Analysis ServicesOptimizacion de Modelos Multidimensionales con Analysis Services
Optimizacion de Modelos Multidimensionales con Analysis ServicesMarco Tulio Gómez Reyes
 
Mejores practicas sql
Mejores practicas sqlMejores practicas sql
Mejores practicas sqlnnakasone
 
Sql tuning without trying arup nanda ls
Sql tuning without trying   arup nanda lsSql tuning without trying   arup nanda ls
Sql tuning without trying arup nanda lsCJava Peru
 
Optimizacion De Consultas
Optimizacion De ConsultasOptimizacion De Consultas
Optimizacion De ConsultasOto Tumax
 
Escalabilidad Analysis Services 2012
Escalabilidad Analysis Services 2012Escalabilidad Analysis Services 2012
Escalabilidad Analysis Services 2012Eduardo Castro
 
Toolbox SQL Server para optimización
Toolbox SQL Server para optimizaciónToolbox SQL Server para optimización
Toolbox SQL Server para optimizaciónSolidQ
 
02 troubleshooting essentials sql server profiler - sql pass peru
02 troubleshooting essentials   sql server profiler - sql pass peru02 troubleshooting essentials   sql server profiler - sql pass peru
02 troubleshooting essentials sql server profiler - sql pass peruGuillermo Taylor
 
Introducción al SQL Server 2016 Query Store
Introducción al SQL Server 2016 Query StoreIntroducción al SQL Server 2016 Query Store
Introducción al SQL Server 2016 Query StoreEduardo Castro
 
Carbura tusql sesion2_slideshare
Carbura tusql sesion2_slideshareCarbura tusql sesion2_slideshare
Carbura tusql sesion2_slideshareJulián Castiblanco
 
8 creacion de sistemas de informacion
8 creacion de sistemas de informacion8 creacion de sistemas de informacion
8 creacion de sistemas de informacionAbelAbedSilvaSantaCr
 

Similar to SQL Server Query Processor (20)

Libro de recetas.pptx
Libro de recetas.pptxLibro de recetas.pptx
Libro de recetas.pptx
 
SQLSaturday 322 Guatemala 2014 Cubes Performance
SQLSaturday 322 Guatemala 2014 Cubes PerformanceSQLSaturday 322 Guatemala 2014 Cubes Performance
SQLSaturday 322 Guatemala 2014 Cubes Performance
 
Optimizacion de Consultas en SQL (Base datos).ppt
Optimizacion de Consultas en SQL (Base datos).pptOptimizacion de Consultas en SQL (Base datos).ppt
Optimizacion de Consultas en SQL (Base datos).ppt
 
SQL Server Fundamentals 3ra Sesion
SQL Server Fundamentals 3ra SesionSQL Server Fundamentals 3ra Sesion
SQL Server Fundamentals 3ra Sesion
 
Query Store al rescate - PASS Spanish
Query Store al rescate - PASS Spanish Query Store al rescate - PASS Spanish
Query Store al rescate - PASS Spanish
 
Taller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeriesTaller básico Herramientas Rendimiento DB2 en iSeries
Taller básico Herramientas Rendimiento DB2 en iSeries
 
SQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes PerformanceSQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes Performance
 
Dimensionado y gestión del entorno virtual
Dimensionado y gestión del entorno virtualDimensionado y gestión del entorno virtual
Dimensionado y gestión del entorno virtual
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
 
Optimizacion de Modelos Multidimensionales con Analysis Services
Optimizacion de Modelos Multidimensionales con Analysis ServicesOptimizacion de Modelos Multidimensionales con Analysis Services
Optimizacion de Modelos Multidimensionales con Analysis Services
 
Mejores practicas sql
Mejores practicas sqlMejores practicas sql
Mejores practicas sql
 
Sql tuning without trying arup nanda ls
Sql tuning without trying   arup nanda lsSql tuning without trying   arup nanda ls
Sql tuning without trying arup nanda ls
 
Optimizacion De Consultas
Optimizacion De ConsultasOptimizacion De Consultas
Optimizacion De Consultas
 
Escalabilidad Analysis Services 2012
Escalabilidad Analysis Services 2012Escalabilidad Analysis Services 2012
Escalabilidad Analysis Services 2012
 
ARQSQL.docx
ARQSQL.docxARQSQL.docx
ARQSQL.docx
 
Toolbox SQL Server para optimización
Toolbox SQL Server para optimizaciónToolbox SQL Server para optimización
Toolbox SQL Server para optimización
 
02 troubleshooting essentials sql server profiler - sql pass peru
02 troubleshooting essentials   sql server profiler - sql pass peru02 troubleshooting essentials   sql server profiler - sql pass peru
02 troubleshooting essentials sql server profiler - sql pass peru
 
Introducción al SQL Server 2016 Query Store
Introducción al SQL Server 2016 Query StoreIntroducción al SQL Server 2016 Query Store
Introducción al SQL Server 2016 Query Store
 
Carbura tusql sesion2_slideshare
Carbura tusql sesion2_slideshareCarbura tusql sesion2_slideshare
Carbura tusql sesion2_slideshare
 
8 creacion de sistemas de informacion
8 creacion de sistemas de informacion8 creacion de sistemas de informacion
8 creacion de sistemas de informacion
 

More from Eduardo Castro

Introducción a polybase en SQL Server
Introducción a polybase en SQL ServerIntroducción a polybase en SQL Server
Introducción a polybase en SQL ServerEduardo Castro
 
Creando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerCreando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerEduardo Castro
 
Seguridad en SQL Azure
Seguridad en SQL AzureSeguridad en SQL Azure
Seguridad en SQL AzureEduardo Castro
 
Azure Synapse Analytics MLflow
Azure Synapse Analytics MLflowAzure Synapse Analytics MLflow
Azure Synapse Analytics MLflowEduardo Castro
 
SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022Eduardo Castro
 
Novedades en SQL Server 2022
Novedades en SQL Server 2022Novedades en SQL Server 2022
Novedades en SQL Server 2022Eduardo Castro
 
Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Eduardo Castro
 
Machine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceMachine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceEduardo Castro
 
Novedades en sql server 2022
Novedades en sql server 2022Novedades en sql server 2022
Novedades en sql server 2022Eduardo Castro
 
Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Eduardo Castro
 
Introduccion a databricks
Introduccion a databricksIntroduccion a databricks
Introduccion a databricksEduardo Castro
 
Pronosticos con sql server
Pronosticos con sql serverPronosticos con sql server
Pronosticos con sql serverEduardo Castro
 
Data warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsData warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsEduardo Castro
 
Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Eduardo Castro
 
Introduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsIntroduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsEduardo Castro
 
Seguridad de SQL Database en Azure
Seguridad de SQL Database en AzureSeguridad de SQL Database en Azure
Seguridad de SQL Database en AzureEduardo Castro
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL ServerEduardo Castro
 
Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Eduardo Castro
 
Script de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesScript de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesEduardo Castro
 
Introducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesIntroducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesEduardo Castro
 

More from Eduardo Castro (20)

Introducción a polybase en SQL Server
Introducción a polybase en SQL ServerIntroducción a polybase en SQL Server
Introducción a polybase en SQL Server
 
Creando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerCreando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL Server
 
Seguridad en SQL Azure
Seguridad en SQL AzureSeguridad en SQL Azure
Seguridad en SQL Azure
 
Azure Synapse Analytics MLflow
Azure Synapse Analytics MLflowAzure Synapse Analytics MLflow
Azure Synapse Analytics MLflow
 
SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022
 
Novedades en SQL Server 2022
Novedades en SQL Server 2022Novedades en SQL Server 2022
Novedades en SQL Server 2022
 
Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Introduccion a SQL Server 2022
Introduccion a SQL Server 2022
 
Machine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceMachine Learning con Azure Managed Instance
Machine Learning con Azure Managed Instance
 
Novedades en sql server 2022
Novedades en sql server 2022Novedades en sql server 2022
Novedades en sql server 2022
 
Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022
 
Introduccion a databricks
Introduccion a databricksIntroduccion a databricks
Introduccion a databricks
 
Pronosticos con sql server
Pronosticos con sql serverPronosticos con sql server
Pronosticos con sql server
 
Data warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsData warehouse con azure synapse analytics
Data warehouse con azure synapse analytics
 
Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2
 
Introduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsIntroduccion a Azure Synapse Analytics
Introduccion a Azure Synapse Analytics
 
Seguridad de SQL Database en Azure
Seguridad de SQL Database en AzureSeguridad de SQL Database en Azure
Seguridad de SQL Database en Azure
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL Server
 
Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft
 
Script de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesScript de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure Enclaves
 
Introducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesIntroducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure Enclaves
 

Recently uploaded

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Recently uploaded (13)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

SQL Server Query Processor

  • 1. Ing. Eduardo Castro, PhD Microsoft SQL Server MVP PASS Regional Mentor PASS Global Board of Directors Advisor ecastro@simsasys.com http://www.youtube.com/eduardocastrom SQL Server Query Processor
  • 2. Patrocinadores del SQL Saturday Gold Sponsor Geek Sponsor Bronze Sponsor
  • 3. Referencias  Understanding QP. C F. Software Design Engineer. Microsoft SQL Server
  • 4. Agenda • SQL Server engine architecture • Query execution • Showplan • Iteradores de SQL
  • 5. SQL Server Engine Arquitectura de Alto Nivel Query Execution (Query Operators, Memory Grants, Parallelism, Showplan) Storage Engine (Access Methods, Buffer Pool, Locking, Transactions, …) SQL-OS (Threads, Memory Management, Synchronization, …) Query Optimization (Plan Generation, View Matching, Statistics, Costing) LanguageProcessing (Parse/Bind, Statement/Batch Execution, Plan Cache) Utilities (DBCC,Backup/Restore,BCP,…) Metadata,TypeSystem, ExpressionServices
  • 6. Introducción al Query Optimizer  En el núcleo del motor de base de datos de SQL Server hay dos componentes principales: el motor de almacenamiento motor y el procesador de consultas, también llamado el motor relacional.  El motor de almacenamiento es responsable de la lectura de datos entre el disco y la memoria de manera que se optimice concurrencia mientras mantiene la integridad de los datos.  El procesador de consultas, como sugiere el nombre, acepta todas las consultas a SQL Server, idea un plan para su óptima ejecución, y luego ejecuta el plan y ofrece los resultados requeridos. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 7. Introducción al Query Optimizer  Para cada query que recibe, el trabajo del procesador de consultas es idear un plan, tan pronto como sea posible, que describa la mejor manera posible (o, al menos, una forma eficiente) de ejecutar dicha consulta.  Su segundo trabajo es ejecutar la consulta de acuerdo con ese plan.  Cada una de estas tareas se delega en un componente separado dentro del procesador de consultas; el optimizador de consultas diseña el plan y luego lo pasa al motor de ejecución, que realmente ejecutar el plan y obtiene los resultados de la base de datos. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 9. El procesamiento de consultas  Parsing and binding - La consulta es parsed and bound. Asumiendo que la consulta es válida, la salida de esta fase es un árbol lógico  Con cada nodo en el árbol representa una operación lógica que la consulta debe llevar a cabo, como la lectura de una tabla en particular hacer un inner join.  Un planes de ejecución es, en esencia, un conjunto de operaciones físicas por ejemplo, Index Seek, a Nested Loops Join que se pueden realizar para producir el resultado deseado, tal como se describe por el árbol lógico Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 10. El procesamiento de consultas  Optimización de consultas - El árbol lógico se usa entonces para ejecutar la optimización de la consulta, que a grandes rasgos se compone de los siguientes dos pasos:  Generación de posibles planes de ejecución - Utilizando el árbol lógico, el optimizador elabora una serie de posibles formas de ejecutar la consulta, es decir, un número de posibles planes de ejecución  Evaluación de costo de cada plan - Mientras que el optimizador de consultas no genera cada posible plan de ejecución, sí evalúa el costo de los recursos y el tiempo de cada plan; el plan que el optimizador de consultas considera que tiene el menor costo es seleccionado, y lo pasa al motor de ejecución. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 11. El procesamiento de consultas  Query execution, plan caching - la consulta es ejecutada por el motor de ejecución, según el plan seleccionado; el plan puede ser almacenado en la memoria caché. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 12. El proceso de optimización  El proceso de optimización, es la generación de los planes de ejecución candidatos y la selección de los mejores de estos planes de acuerdo a su costo.  El optimizador de consultas de SQL Server utiliza un modelo de estimación de costos para estimar el costo de cada uno de los planes de candidatos. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 13. El proceso de optimización  La optimización de consultas es el proceso e mapear las operaciones lógicas del árbol original en su equivalente de operaciones físicas, las cuales serán ejecutadas por el motor de ejecución.  La funcionalidad del motor de ejecución aplicar los planes de ejecución que son creados por el optimizador de consultas.  El motor de ejecución implementa cierto número de diferentes algoritmos, y a partir de estos algoritmos que el optimizador de consultas debe elegir, cómo formula los planes de ejecución. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 14. El proceso de optimización  Se traducen las operaciones lógicas originales en el operaciones físicas que el motor de ejecución es capaz de realizar, y los planes de ejecución incluyen tanto las operaciones lógicas y físicas.  Algunos operaciones lógicas, como un Sort se traducen a la misma operación física, mientras que otras operaciones lógicas se traducen a varias operaciones físicas.  Por ejemplo, una join lógico se puede traducir en un Nested Loops Join, Merge Join, o Hash Join . Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 15. El proceso de optimización  El producto final del proceso de optimización de la consulta es un plan de ejecución: un árbol que consiste de un número de operadores físicos, que contienen los algoritmos que serán ejecutados por el motor de ejecución con el fin de obtener los resultados deseados desde la base de datos. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 16. Generación de planes de ejecución candidatos  El propósito básico del optimizador de consultas es encontrar un plan de ejecución eficiente para su búsqueda.  Incluso para las consultas relativamente simples, puede haber un gran número de diferentes caminos acceder a los datos para producir el mismo resultado final.  El Optimizador de Consultas tiene que seleccionar el mejor plan posible de un gran número planes candidatos, y es importante que haga una buena elección, ya que el tiempo necesario para volver los resultados al usuario pueden variar mucho, dependiendo de qué plan es seleccionado. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 17. Generación de planes de ejecución candidatos  El optimizador de consultas debe lograr un equilibrio entre el tiempo de optimización y calidad del plan.  Por ejemplo, si el optimizador de consultas gasta un segundo hallazgo un buen lo suficientemente plan de que ejecuta en un minuto, entonces no tiene sentido tratar de encontrar el plan perfecto o más plan óptimo, si esto va a tomar cinco minutos de tiempo de optimización, más el tiempo de ejecución.  Así que SQL Server no realiza una búsqueda exhaustiva, sino que intenta encontrar un plan eficiente tan rápidamente como sea posible. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 18. Generación de planes de ejecución candidatos  Con el fin de explorar el espacio de búsqueda, el optimizador de consultas utiliza reglas de transformación y heurística.  Los generación de planes de ejecución de candidatos se realiza dentro del optimizador de consultas usando reglas de transformación, y con el uso de heurísticas limita el número de opciones, con el fin de mantener el tiempo de optimización razonable.  Los planes candidatos son almacenado en la memoria durante la optimización, en un componente llamado Memo. Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 19. El procesamiento de consultas Inside the SQL Server Query Optimizer. Benjamin Nevarez.
  • 20. Cómo funciona el procesamiento de consultas PlanCache Generate ExecutablePlan Execute Fix Memory Grant &DoP Auto-Param Bind, ExpandViews NotFound Parse Query Optimization Return Plans toCache NewStatement LanguageProcessing (Parse/Bind, Statement/Batch Execution, PlanCache) Found Executable FoundCompiled Plan Plan QueryOptimization QueryExecution (Plan Generation,View (QueryOperators, Matching,Statistics, MemoryGrants, Costing) Parallelism,Showplan)
  • 21. Flujo de ejecución de Queries • Query plans son árboles de iteración • Iterador = unidad básica del query plan execution • Cada iterador tiene 0, 1, 2, o N hijos • Los métodos principales de cada iterador son: – Open – GetRow – Close • Los flujos de control van hacia abajo en el árbol • Data flows (se llenan) hacia arriba en el árbol
  • 22. Consulta de ejemplo SELECT l_orderkey, l_linenumber, o_orderstatus FROM lineitem JOIN orders ON l_orderkey = o_orderkey WHERE l_suppkey < 2000 AND l_partkey < 2000 lineitem l_suppkey<2000, l_partkey<2000 l_orderkey=o_orderkey orders l_orderkey, l_linenumber, o_orderstatus Obtenga toda la información acerca line-items que están filtrados por proveedores y partes
  • 23. SQL Server Query Optimizer  Basado en el Cascades Framework  Basado en transformación, enfoque top-down  Optimization = Tasks + Memo ( Programs = Algorithms + Data Structures )  Completamente basado en costos  Flexible y con extensiones  Se pueden agregar nuevos operadores y reglas SQL Query Parsing, Validation Normalization (predicate unfolding, join collapsing, view substitution, etc.) Cost-based Optimization Execution Plan
  • 24. The Memo  Search Space Memory  Compactly stores all explored alternatives (AND-OR graph)  Groups together equivalent operator trees and their plans  Provides memoization, duplicate detection, property and cost management, etc. 1) SELECT (b>20, ) b>20 S 1) SELECT (a<10, ) a<10 R 2) JOIN (x=y, , ) 1) SELECT (a<10, )a<10 b>20 R S 1) GET(S)S1) GET(R)R b>20R S 1) JOIN (x=y, , ) 2) ... 3) ... Groups Expressions
  • 25. Initialize Memo Optimize Root Group Optimize Group Explore Group Obtain enforcers and implementation rules for all expressions Apply Rules by Promise Optimize Inputs Obtain optimization context Optimize children groups Calculate costs, pick best Apply Rule Pruning checks Generate bindings, substitutes Restrict ruleset optimizing?Opt Inputs:Explore Explore Expression Apply-always rules Explore Inputs Rest of Apply-always Rules Other Rules by Promise Explore Group For each expression -Get Guidance -Explore Expression. Optimization Tasks
  • 26. Planteamiento del Problema Workload Database Configuration Physical Design Tool Conjunto de estructuras físicas (es decir, índices y vistas) que hacen que las cargas de trabajo similares ejecutar lo más rápido posible
  • 27. Database Tuning Advisor Yukon Carga de trabajo Comprimir la carga de trabajo Selección de candidatos (Por consulta) Enumeración Tiempo? Sí No La fusión Recomendación Sintonización Cliente ... Optimizador de consultas Base de datos Servidor Y si API Metadatos - Crear hipotético Índice / Vista. - Optimizar consultas con respecto a las configuraciones hipotéticas.
  • 28. Nueva Arquitectura  Instrumentación el optimizador de consultas.  Estrategia de búsqueda basado en relaxations. … Query Optimizer Database Server What-if API Metadata Relaxation Time? Yes No Recommendation Tuning Client Workload Request Identification Get Optimal Configuration (per query) Requests API
  • 29. Tipos de iteradores • Insert, update, and delete • Top • Compute scalar • Filter • Concatenation • Sequence • Scan and seek • Joins • Aggregates • Sorts • Spools • Parallelism
  • 30. Showplan • Muestra el plan de ejecución • Excelente herramienta ... – Para entender qué es lo que está haciendo SQL Server – Para diagnosticar problemas de desempeño • Un montón de Estadísticas ... – Cantidad Estimada y real de fila • Gráfica, texto, y XML versiones – XML desde SQL Servidor 2005
  • 31. Gráfico vs XML  Gráfico  Vista con base en íconos  Da una vista general  Fácil identificar los iteradores más costosos  Provee ayuda para cada iterador  XML  Vista gráfica sencilla desde SQL Server 2005  Muestra mayor detalle  Más difícil de leer que los planes gráficos | --StreamAgregado | --sort | --NestedLoops | Índice --Clustered Buscar | --indexVerk ... <RelOp NodeID= "0" ...> <StreamAggregate> <RelOp NodeID= "1" ...> <Ordenar...> ...
  • 32. Leyendo planes • Gráfico – Cada icono representa un iterador en el árbol – Estructura del árbol estructura y flujos de datos están representados por flechas que conectan los iconos – Más información es disponible en el información sobre herramientas y en el "propiedades" cristal • XML – Un elemento por iterador más los elementos adicionales para otra información – Estructura del árbol es representado por anidamiento de elementos – Flujos de datos están en los elementos más exteriores
  • 33. Showplan ejemplos DECLARE @Date DATETIME SET @Date = '1996-07-04' SELECT L_SHIPDATE, COUNT_BIG(*) FROM LINEITEM JOIN ORDERS ON L_ORDERKEY = O_ORDERKEY WHERE O_ORDERDATE = @Date GROUP BY L_SHIPDATE ORDER BY L_SHIPDATE
  • 36. Plan ejemplo |--Stream Aggregate(GROUP BY:([L_SHIPDATE]) DEFINE:([Expr1008]=Count(*))) |--Sort(ORDER BY:([L_SHIPDATE] ASC)) |--Nested Loops(Inner Join, OUTER REFERENCES:(*ORDERS+.*O_ORDERKEY+, …) …) |--Clustered Index Seek(OBJECT:(*ORDERS+.*O_ORDERDATE_CLUIDX+), SEEK:(*O_ORDERDATE+=*@Date+)…) |--Index Seek(OBJECT:(*LINEITEM+.*L_ORDERKEY_IDX+), SEEK:(*L_ORDERKEY+=*O_ORDERKEY+)…)
  • 37. <ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2" …> <StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … /> <QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …> <RelOp …> … </RelOp> <ParameterList><ColumnReference Column="@Date" ParameterCompiledValue="'1996-03-15 …'" ParameterRuntimeValue="'1996-07-04 …'" /></ParameterList> </QueryPlan> </StmtSimple> </Statements> </Batch> </BatchSequence> </ShowPlanXML> XML Plan
  • 38. <ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2" …> <StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … /> <QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …> <RelOp …> … </RelOp> <ParameterList> <ColumnReference Column="@Date" ParameterCompiledValue="'1996-03-15 …'" ParameterRuntimeValue="'1996-07-04 …'" /> </ParameterList> </QueryPlan> </StmtSimple> </Statements> </Batch> </BatchSequence> </ShowPlanXML> <RelOp NodeId="0" PhysicalOp="Stream Aggregate" LogicalOp="Aggregate" …> <StreamAggregate> <RelOp NodeId="1" PhysicalOp="Sort" LogicalOp="Sort" …> <MemoryFractions Input="0.782609" Output="1" /> <Sort Distinct="0"> <RelOp NodeId="2" PhysicalOp="Nested Loops" LogicalOp="Inner Join" …> <NestedLoops Optimized="1" WithUnorderedPrefetch="1"> <RelOp NodeId="5" PhysicalOp="Clustered Index Seek" …> <IndexScan Ordered="1" ScanDirection="FORWARD" …> <Object … Table="[ORDERS]" Index="[O_ORDERDATE_CLUIDX]" … /> </IndexScan> </RelOp> <RelOp NodeId="6" PhysicalOp="Index Seek" …> <IndexScan Ordered="1" ScanDirection="FORWARD" …> <Object … Table="[LINEITEM]" Index="[L_ORDERKEY_IDX]" … /> </IndexScan> </RelOp> </NestedLoops> </RelOp> </Sort> </RelOp> </StreamAggregate> </RelOp> XML Plan
  • 39. <ShowPlanXML xmlns="http://schemas.microsoft.com/…" Version="1.0" Build="10.0.…"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="SELECT …" StatementId="1" StatementCompId="2" …> <StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" … /> <QueryPlan DegreeOfParallelism="1" MemoryGrant="1392" …> <RelOp …> … </RelOp> <ParameterList> <ColumnReference Column="@Date" ParameterCompiledValue="'1996-03-15 …'" ParameterRuntimeValue="'1996-07-04 …'" /> </ParameterList> </QueryPlan> </StmtSimple> </Statements> </Batch> </BatchSequence> </ShowPlanXML> XML Plan Seek" <RelOp NodeId="5" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index EstimateRows="623.462" …> <OutputList> <ColumnReference … Table="[ORDERS]" Column="O_ORDERKEY" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="629" … ActualExecutions="1" /> </RunTimeInformation> <IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" NoExpandHint="0"> <DefinedValues> <DefinedValue> <ColumnReference … Table="[ORDERS]" Column="O_ORDERKEY" /> </DefinedValue> </DefinedValues> <Object … Table="[ORDERS]" Index="[O_ORDERDATE_CLUIDX]" IndexKind="Clustered" /> <SeekPredicates> … </SeekPredicates> </IndexScan> </RelOp>
  • 40. Text/XML plan options SQL Profiler y DMVs también muestran los planes Command Execute Query? Display Estimated Row Counts & Stats Display Actual Row Counts Text plan SET SHOWPLAN_TEXT ON No No No SET SHOWPLAN_ALL ON No Yes No SET STATISTICS PROFILE ON Yes Yes Yes XML plan SET SHOWPLAN_XML ON No Yes No SET STATISTICS XML ON Yes Yes Yes
  • 41. Iteradores comunes • Scans and seeks • Join iterators – Nested loops join – Merge join – Hash join • Aggregation iterators – Stream aggregrate – Hash aggregate • Los iteradores no son buenos ni males • No existe “el mejor” join o tipo de agregación • Cada iterador funciona bien dependiendo del escenario
  • 42. Scans and seeks • Scans devuelve toda una tabla o un índice – Los scan de índices pueden ser con o sin orden • Seeks devuelve de forma eficiente las filas de uno o más rangos de un índice – Los seeks de un índice siempre son ordenados
  • 43. Index scan vs. index seek Select Price from Orders where OrderKey = 2 Index Scan Where OrderKey = 2 Index Seek Where OrderKey = 2 OrderKey Price 1 86.00 2 17.00 3 88.00 4 17.00 5 96.00 6 22.00 7 74.00 8 94.00 9 56.00 … … 1 86.00 2 17.00 3 88.00 … … 2 17.00
  • 44. Nested loops join • Algoritmo básico: 1. Obtener una fila de la entrada izquierda 2. Obtener todas filas de la entrada derecha que corresponde a la fila de la entrada izquierda 3. Cuando ya no hay más filas que hagan match desde la entrada derecha, obtenga la siguiente fila de la entrada izquierda y repita • Parámetros correlacionados – Datos de la entrada izquierda afecta los datos devuelto por la entrada derecha (es decir, paso 2 depende de paso 1) – Si no se tienen parámetros correlacionados cada ejecución de la entrada derecha se produce el mismo resultado
  • 45. Nested loops join example Select C.Name, O.Price from Cust C join Orders O on O.CustKey = C.CustKey where C.City = ‘Boston’ Nested Loop Join Index Seek Cust Where C.City = ‘Boston’ Index Seek Orders On O.CustKey = C.CustKey No rows match CustKey = 6 4 88.00 5 86.00 5 94.00 5 56.00 4 Boston Alice 5 Boston Bob 6 Boston Cathy Alice 88.00 Bob 86.00 Bob 94.00 Bob 56.00
  • 46. Nested loops join • El único tipo join... – Que soporta predicados de inequidad • La entrada derecha puede ser un index seek o un subplan complejo • Optimizaciones: – Usar índices para optimizar la selección de filas que hacen match de la entrada derecha filas (Además conocido como una índice unirse a) – Usar lazy spool en la entrada derecha si esperamos duplicar filas de la entrada izquierda • Tips de desempeño: – Costo es proporcional a la producto de la cardinalidad de las entradas izquierda y derecha – En general es mejor para conjuntos de datos pequeños – Crear un índice para cambiar el producto cartersiano en un index join – Verifique si se da gran cantidad de I/Os aleatorios
  • 47. Columnas indizadas • Key columns: – Conjunto de columnas que puede ser utilizado en un índice – En un índice compuesto, el orden del columnas importa: • Determina el ordenamiento del índice • Solo puede hacer seek en una columna si todas las columnas anteriores tienen predicados de equidad – Los non-unique non-clustered index en una tabla con un clustered index incluye implícitamente el clustered index para las llaves • Covered columns: – Conjunto de columnas que pueden ser la salida de un seek o scan del índice – Heap Index o Clustered Index siempre cubren todas las columnas – Non-clustered index cubre las columnas llave del índice y si la tabla tiene clustered index las llaves del clustered index – Se pueden agregar más columnas durante la creación del índice
  • 48. Bookmark lookup • Pregunta: – Lo que pasa si el non-clustered index para un seek no cubre todas de la columnas necesarias por la consulta? • Respuesta: – Look up las columnas extra en el heap o clustered index – Esta operación es conocida como bookmark lookup • SQL Server 2000 tenía bookmark lookup iterator • SQL Server 2005 y 2008 no tienen un bookmark lookup iterator – En su lugar simplemente unen el non-clustered index con el clustered index usando un nested loops join – Parasabersiseusaunbookmark lookup, busque el keyword “LOOKUP” en el clustered index seek – Bookmark lookup provoca I/Os aleatorios: afecta el desempeño
  • 49. Bookmark lookup example Clustered index on OrderKey Non-clustered index on Custkey Select Price from Orders where CustKey = 5 Index Seek Where CustKey = 5 Nested Loop Join Clustered Index Seek Select Price OrderKey CustKey Price 1 5 86.00 2 2 17.00 3 4 88.00 4 9 17.00 5 1 96.00 6 7 22.00 7 8 74.00 8 5 94.00 9 5 56.00 … … … 1 5 8 5 9 5 1 5 86.00 8 5 94.00 9 5 56.00
  • 50. Merge Join • Requiere al menos un predicado equijoin • Datos debe estar ordenados en los join keys – Sort Order debe ser proporcionado por un índice – Opuede incluir un sort explícito • Algoritmo Básico : 1. Obtener una fila de las entradas izquierda y derecha 2. Si las filas coinciden devuelva la fila unida 3. De lo contrario, obtenga una nueva fila de cualquier entrada que sea la más pequeña y repita
  • 51. Merge join Index Seek Cust Where C.City = ‘Boston’ Select C.Name, O.Price from Cust C join Orders O on O.CustKey = C.CustKey where C.City = ‘Boston’ Merge Join O.CustKey = C.CustKey Index Scan Orders Cust and Orders indexes ordered by CustKey 2 17.00 4 88.00 5 86.00 5 94.00 5 56.00 7 22.00 4 Boston Alice 5 Boston Bob 6 Boston Cathy Alice 88.00 Bob 86.00 Bob 94.00 Bob 56.00
  • 52. Merge join • Optimizaciones: – One to many join – Inner join terminates tan pronto como una de las entradas se termina • Tips de desempeño: – Costo es proporcional a la suma de las cardinalidades de las entradas – Tiene buen desempeño para entradas grandes y pequeñas especialmente si el sort order es proveído por un índice – Si el merge join plan incluye sort explícitos, vigile que no se den splilling – No funciona tan bien en paralelo como un hash join
  • 53. Hash join • Requiere al menos un predicado equijoin • Algoritmo Básico : 1. Obtener todas filas de la entrada izquierda 2. Construir un in-memory hash table utilizando filas de la entrada izquierda 3. Obtener todas las filas de la entrada derecha 4. Utilizar el hash table para encontrar coincidencias • Requiere memoria para construir el hash table • Si el join se queda sin memoria, porciones las entradas izquierdas y derechas deben ser enviadas a disco y manejadas en pasadas distintas
  • 54. Hash Table Hash join example Hash Join Index Seek Cust Where C.City = ‘Boston’ Select C.Name, O.Price from Cust C join Orders O on O.CustKey = C.CustKey where C.City = ‘Boston’ O.CustKey = C.CustKey Table Scan Orders Order of Cust and Orders tables does not matter 5 Boston Bob 4 Boston Alice 6 Boston Cathy 5 86.00 2 17.00 4 88.00 9 17.00 5 94.00 5 56.00 Bob 86.00 Alice 88.00 Bob 94.00 Bob 56.00
  • 55. Hash join • Fuciona como stop and go en la entrada izquierda • Optimizaciones: – Construir la tabla hash la entrada más pequeña – Si el join hace splills, puede hacer switch de las entradas – Puede utilizar bitmap para descartar entradas de la fila de derecha más rápido • Tips de desempeño: – Costo es proporcional a la suma de las cardinalidades de las entradas – Generalmente se desempeña bien para conjuntos de datos grandes – Los parallel hash joins escalan bien – Verifique no se dén spilling, especialmente múltiples pasadas (utilice el SQL Profiler)
  • 56. Stream aggregate • Los datos deben estar ordenados en grupos por la llave • El ordenamiento agrupa las filas con llaves iguales juntas • Procesa los grupos de uno en uno • No causa bloqueos o utiliza memoria • Es eficiente si el sort order es proveído por un índice o sí el plan incluye ordamientos • Es la opción para scalar aggregates
  • 57. Stream aggregate example Select CustKey, sum(Price) from Orders group by CustKey Index Scan Stream Agg Orders index ordered by CustKey 4 88.00 5 86.00 5 94.00 5 56.00 7 22.00 4 88.00 5 236.00 7 22.00
  • 58. Hash aggregate • Datos no tiene que estar ordenados • Construye una tabla hash para todos los grupos • Stop and go • Al igual que un hash join : – Requiere memoria, puede utilizar disco si se acaba la memoria – Generalmente mejor para conjuntos de datos grandes – Los Parallel hash aggregates escalan bien • Valores con llaves duplicadas... – Puede ser malo para un hash join porque no es posible subdividir un hash bucket que tiene todos duplicados – Son buenos para un hash aggregate debido a que los duplicados colapsan dentro una única entrada de la tabla hash
  • 59. Hash Table Hash aggregate example Select CustKey, sum(Price) from Orders group by CustKey Table Scan Hash Agg Order of Orders table does not matter 7 22.00 4 88.00 5 236.00 5 86.00 4 88.00 7 22.00 5 94.00 5 56.00
  • 60. Tips de desempeño • Vigile errores en los cardinality estimates – Los errores se propagan hacia arriba, debe buscar la raíz de la causa – Asegúrese que las estadísticas están actualizadas y que son lo más exactas posible – Evite el uso excesivo de predicatos complejos • Recomendaciones generales: – Utilice set based queries – Evite joining columns con mismatched data types – Evite outer joins, cross applies, complex sub-queries, dynamic index seeks, … – Evite dynamic SQL – Utilice SET STATISTICS IO ON para vigilar si de dan mucha cantidad de I/Os – Utilice índices como workaround locking, concurrency, and deadlock issues • OLTP: – Evite iterados que consuman memoria o que causen bloqueos – Utilice seeks no scans • DW : – Utilice planes paralelos – Verifique que no se den skews in los planes paralelos
  • 61. Otros planes de ejecución • Static vs. dynamic index seeks • Insert, update, y delete plans – Update por row vs. por index – Split sort collapse updates
  • 62. Static vs. dynamic index seeks • Static index seeks – Los rangos son conocidos y no se traslapan en tiempo de compilación – Standalone index seek iterator • Dynamic index seeks – Los rangos se traslapan en tipo de de ejecución – Típicamente se utilzian con predicados OR’ed con T-SQL o parámetros correlacionados: • … where State = @p1 or State = @p2 – Sort and merge (merge interval iterator) los rangos cambian en tiempo de ejecución según sea necesario
  • 64. Merge interval Select * from T where [C] between @p1 and @p2 or [C] between @p3 and @p4 or [C] between @p5 and @p6 @p1 @p2 @p3 @p4 @p5 @p6 We must not scan this range twice!
  • 65. Merge interval Sort Select * from T where [C] between @p1 and @p2 or [C] between @p3 and @p4 or [C] between @p5 and @p6 @p1 @p2 @p5 @p6 @p3 @p4 We must not scan this range twice!
  • 66. Merge interval Merge Select * from T where [C] between @p1 and @p2 or [C] between @p3 and @p4 or [C] between @p5 and @p6 @p3 @p4@p1 @p6 Each unique range scanned only once!
  • 67. Insert, update, and delete plans • Todos los planes de update tienen dos partes: – Read cursor devuelve las filas para insert, update, or delete – Write cursor • Ejecuta el insert, update, o delete • Mantiene los non-clustered indexes • También los checks constraints, indexed views, … • La mayoría de las veces es un único update iterator
  • 68. Per row vs. per index updates • Per row plans: – Un único update iterator mantiene todos los índices (lo cual incluye heap o clustered index y todos los non-clustered indexes) – Lee una fila de la entrada a la vez y después modifica todos los índices afectados • Per index plans: – El plan tiene un iterador de update separado para cada índice afectado – Cada iterador de update mantiene sólo un índice – Lee y pone en spool todas las filas de entrada antes de modificar cualquier índice – Aplica todas las modificaciones en un índice a la vez • Por qué per index? – Para desempeño en large updates (e.g., sort on index key)
  • 69. Per row update plan Write cursor Read cursor
  • 70. Per row update plan Write cursor Read cursor
  • 71. Per index update plan Write cursor Read cursor
  • 72. Split sort collapse updates Update T set UniqCol = UniqCol + 1 • Debe asegurarse que los update a los unique indexes no hacen violaciones de unicidad • Los iteradores de split, sort, y collapse iterators reorganizan el flujos de filas a actualizar para garantizar que no existe violaciones de unicidad
  • 73. Split sort collapse Update T set UniqCol = UniqCol + 1 Sort Collapse Split Old New Old New UniqCol Data 1 X 2 Y 1 2 X 2 3 Y Del 1 X Ins 2 X Del 2 Y Ins 3 Y Del 1 X Del 2 Y Ins 2 X Ins 3 Y Del 1 X Upd 2 Y X Ins 3 Y
  • 74. SQL Server 2016 Query Store Regresiones de planes Identificar a los grandes consumidores Evitar riesgos de upgrades de SQL Server Analizar cargas de trabajo
  • 75. Resumen • Los iteradores son los bloques básicos del query execution y query plans • Showplan – Graphical – Text – XML • Scan vs. seek vs. bookmark lookup • Existen tres join iterators: – Nested loopsjoin – Merge join – Hashjoin • Dos aggregation iterators: – Stream aggregate – Hash aggregate
  • 76. Referencias • Libros… – Inside SQL Server 2005: Query Tuning and Optimization • Blogs … – http://blogs.msdn.com/craigfr – http://blogs.msdn.com/sqlqueryprocessing • Otras fuentes… – Books online – MSDN – Newsgroups and forums – Web search
  • 77. Evaluaciones Evaluacion del evento http://www.sqlsaturday.com/443/eventeval.aspx Evaluacion de las charlas http://www.sqlsaturday.com/443/sessions/sessionevaluation.aspx