100% encontró este documento útil (1 voto)
166 vistas7 páginas

4 Plan de Ejecucion SQL

El documento describe diferentes tipos de operaciones de plan de ejecución en SQL Server como table scan, clustered index scan, index scan, nested loop join, hash join y stream aggregate. Explica cuándo se producen cada una de estas operaciones y cómo mejorar el rendimiento optimizando el uso de índices y reduciendo operaciones ineficientes.

Cargado por

Dara Avelino
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
166 vistas7 páginas

4 Plan de Ejecucion SQL

El documento describe diferentes tipos de operaciones de plan de ejecución en SQL Server como table scan, clustered index scan, index scan, nested loop join, hash join y stream aggregate. Explica cuándo se producen cada una de estas operaciones y cómo mejorar el rendimiento optimizando el uso de índices y reduciendo operaciones ineficientes.

Cargado por

Dara Avelino
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

PLAN DE EJECUCION ENERO - JUNIO 2015

Plan de ejecucin de SQL Server


Para realizar SQL Tunning a nuestras bases de datos, en la mayora de los casos
necesitaremos paciencia y tiempo para analizar con detenimiento como est funcionando
todo, as en base a eso, determinar medidas de accin para la optimizacin.
Para ver el plan de ejecucin de un query es muy sencillo en SSMS, podemos ver el
Estimado y el Real:
Plan de Ejecucin Estimado: Desde el Men Consultas -> Mostrar Plan de Ejecucin
Estimado o con la combinacin de teclas Ctrl + L. Esto no ejecutar la query sino ms bien
lo analizar y mostrar una aproximacin del costo de su ejecucin.
Plan de Ejecucin Real: Desde el Men Consultas -> Incluir Plan de Ejecucin Real o con
la combinacin de teclas Ctrl + M. Con esta opcin podremos ver el costo real de una
query, pero a diferencia del anterior, se muestra al terminar la ejecucin de la misma.
Tambin otra opcin es ejecutar esto, que nos mostrar en modo texto el plan de
ejecucin.

Table Scan
Esto indica que el motor necesita leer completamente la tabla sin utilizar un ndice. En la
mayora de los casos su aparicin quiere decir que estamos haciendo mal las cosas, y
necesitamos urgente crear un ndice o reestructurarlo si ya existe alguno. Aunque no
siempre es as, el motor siempre intenta predecir los costos de ejecucin basados en
las estadsticas que va almacenando, si el estima que va ser ms rpido leer toda la tabla en
vez de leer un ndice, usar ese mtodo. Esto suele suceder con tablas poco pobladas y la
query en cuestin no conlleva ningn filtro, ya que reduce considerablemente el overhead.
Ejemplo:
SELECT * FROM tabla;

ADMINISTRACION DE BASE DE DATOS | Table Scan

PLAN DE EJECUCION ENERO - JUNIO 2015

Clustered Index Scan


Es semejante al Table Scan, ya que recorre completamente la tabla pero utilizando sta vez
alguno de los ndices clustered del que dispone. Aparece normalmente en tablas
que estn pobladas considerablemente. Ejemplo:
SELECT * FROM tabla;

Clustered Index Seek


Ver esto es sntoma de un correcto uso de los ndices clustered en la base de datos, para
verlo en accin simplemente tenemos que trabajar con los campos que tiene ndices,
Ejemplo:
SELECT * FROM tabla WHERE columna = 44;

ADMINISTRACION DE BASE DE DATOS | Clustered Index Scan

PLAN DE EJECUCION ENERO - JUNIO 2015

Index Scan
Este es muy parecido al Table Scan y Clustered Index Scan, la principal diferencia radica
en que ste utiliza un ndice Non-Clustered para recorrer la tabla. Justamente para esta
seccin y las que vienen ms abajo hace unos das escrib un artculo que les ayudar a
diferenciar entre un Indice Agrupado y uno No-Agrupado. Aunque muchas veces suele ser
sntoma de un mal uso de los ndices, tambin aparece cuando usamos las clusulas
ORDER BY, JOIN o GROUP BY. Ejemplo
SELECT columnaNonClustered FROM tabla ORDER BY columnaNonClustered desc

Index Seek
Ya va siendo obvio que hace el index seek, trabaja igual que el Clustered Index Seek,
pero trabajar con un Indice Non-Clustered. Si Ejemplo:

Bookmark Lookup
ADMINISTRACION DE BASE DE DATOS | Index Scan

PLAN DE EJECUCION ENERO - JUNIO 2015


Con lo ya visto en el articulo anterior comprenderemos mejor como funciona el Bookmark
Lookup. Debemos comprender que no podremos evitar tener este tipo de operacin en la
BD, lo que si se debe buscar es que sea mnima su aparicin y cuando lo hace, lo haga con
un costo bajo.
Este aparece cuando se requiere hacer un salto del apuntador del ndice non-clustered a la
pginas de datos real. Una de las maneras para evitar su aparicin excesiva es limitar los
campos requeridos en la query, slo solicitar los que estn incluidos en el ndice, sta es la
principal razn por la que habrn escuchado ms de una vez, no escribas querys SELECT
* FROM...
En algunos casos extremos (repito, muy extremos) se podra considerar la inclusin de
todas las columnas de la tabla dentro del ndice.

Una de las mejoras que se introdujo a partir de SQL Server 2005, es que en los ndices
Non-Clustered se pueden agregar o copiar el contenido de las columnas, sin que estas sean
parte del ndice en s, es decir, que no servirn para realizar bsquedas ni filtros pero si
cuando los necesite mostrar tendr una copia a mano de los datos, sin tener la necesidad
de usar el puntero para buscar en la tabla el dato. Esta caracterstica es un arma de doble
filo, si bien es cierto que si se lo usa bien podra reducir considerablemente el costo de las
consultas, pero su lado contraproducente, es que al tener ms datos los ndices, estos crecen
rpidamente porque ocupan ms espacio y por ende se tienen menos claves por cada pgina
de ndice lo que podra llegar a aumentar el nivel de I/O. As que, deben considerar el
contexto para utilizarlo.

RID Lookup
Este operador no es muy frecuente de ver, y normalmente aparece cuando el motor intenta
optimizar por su cuenta la query y no tenemos un ndice agrupado (Clustered) entonces
buscar a travs del ndice nico ROW ID (de ah el nombre RID). Si requiere solucin
este tipo de operaciones es muy dependiente de caso. Ejemplo

ADMINISTRACION DE BASE DE DATOS | RID Lookup

PLAN DE EJECUCION ENERO - JUNIO 2015


SELECT columna1, columna2 FROM tabla WHERE columna 1 < 100000;

Sort
Esta operacin veremos cuando el motor requiere ordenar algn campo que no est
indizado, por ejemplo cuando aplicamos la clusula ORDER BY, GROUP BY, TOP, etc.
Normalmente cuando aparece debemos echar ojo, para saber si falta algn ndice en alguna
tabla, pero no siempre es as, llenar de ndices la BD no es sano tampoco, y
existen ocasiones que debemos ejecutar querys poco frecuentes que no ameritan la creacin
de otro ndice ms.
SELECT * FROM tabla ORDER BY columna;

JOIN
ADMINISTRACION DE BASE DE DATOS | Sort

PLAN DE EJECUCION ENERO - JUNIO 2015


El operador JOIN se divide en tres tipos de JOIN nuevamente. Entran en accin cuando
justamente se hacen uso de las clusulas JOIN para unir dos o ms tablas en la query y est
determinado normalmente por el volumen de datos con el que se trabajar para que SQL
Server elija usar uno u otro.

Nested Loop Join


Normalmente vemos este operador cuando el volumen de datos con el que se trabajar es
relativamente pequeo. Ejemplo.
SELECT * FROM tabla1 t1 INNER JOIN tabla2 t2 ON
WHERE t2.columna = 77;

t1.columna = t2.columna

Merge Join
Este operador al igual que el anterior se hace su aparicin en la unin de tablas, pero
cuando el volumen de datos es considerablemente ms grande, hablamos de cientos de
miles comunmente
SELECT * FROM tabla1 t1 INNER JOIN tabla2 t2 ON

t1.columna = t2.columna;

ADMINISTRACION DE BASE DE DATOS | Nested Loop Join

PLAN DE EJECUCION ENERO - JUNIO 2015

Hash Join
Este tipo de JOIN es muy especifico para grandes volmenes de datos, especialmente si no
estn indizados. Si nos aparece en nuestra BD OLTP, deberamos preocuparnos ya que est
pensado en funcionar mejor en sobre los diseos OLAP, as que si no estn trabajando con
algn DATA WAREHOUSING, es muy poco probable que les sea til. El Hash Join es
todo un mundo a parte, y merece un artculo dedicado netamente a l, as que extenderemos
el tema ms adelante.

Hash Match
Cuando ven este operador es porque el motor est compando contenido, puede aparecer en
un JOIN, WHERE y son lugares donde no deberan estar, lo hacen por falta de indices
principalmente. Donde si son muy tiles es cuando incluimos la clusula DISTINCT,
UNION, UNION ALL, en donde no solo se compara el valor de un campo, sino de todo
un conjunto de columnas o incluso filas y columnas.

Stream Aggregate
Aparece principalmente cuando agrupamos los datos, y mezclamos con funciones
agregadas como MIN, SUM, AVG, tambin con la clusula HAVING. Tambin es
frecuente ver que este operador lleva acompaado a SORT, a quien utiliza para ordenar
primeramente los datos antes de agrupar.
ADMINISTRACION DE BASE DE DATOS | Hash Join

También podría gustarte