Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
30 de Abril, 2011 · Missing-Indexes-Query-Optimizer

Query Optimizer. Missing Indexes. SQL Server. Tema: V

 Hay una nueva información que SQL Server proporciona, desde la versión de SQL Server 2005 en adelante, se llama Missing Indexes. Cuando el Optimizador esta optimizando la consulta, puede indicarnos, si a esa consulta le falta o se beneficiaría de algún índice. El Optimizador proporciona esta información y la deja disponible en el plan de ejecución.

 

  Es aconsejable para el buen entendimiento de este “Tema:IV” que se lea o repase los enlaces: Query Optimizer. Parameter Sniffing. SQL Server. Tema: I y el enlace: Query Optimizer. Cardinality Estimation Error. SQL Server. Tema: II

 

 

 Una advertencia obligada, es que veamos y utilicemos la información proporcionada por Missing Indexes, pero no siempre sigamos las indicaciones que nos proporciona. Básicamente, cuando nosotros nos encontremos con estas advertencias, hemos de pensar que QUIZAS tengamos un problema donde se nos indica. Pero no siempre es la mejor opción implementarla. Nosotros seremos quien tomemos la decisión de crear o no, ese índice.

 

  Hay una pequeña limitación de Missing Indexes, ya que no funcionaría cuando tenemos un plan de ejecución denominado como Trivial. Normalmente no nos tenemos que preocupar por este tipo de planes, pues casi todas las consultas que tenemos en nuestros servidores de producción, serán mas complicadas y no serán un plan trivial.

 

 Como plan trivial entenedemos: si presentamos una consulta simple (por ejemplo, en consultas sobre una sola tabla sin índices y sin campos agregados o cálculos) que en lugar de perder tiempo tratando de calcular el plan óptimo, el Optimizador simplemente aplicará un único plan trivial para ese tipo de consultas. Una forma simple de evitar estos planes triviales es creándonos un índice en la tabla que no tenga nada que ver con nuestra consulta, después estudiar nuestros plan de ejecución con los Missing Indexes sugeridos si los hubiere, y finalmente eliminar ese índice.

 

 Si la consulta no es trivial, el Optimizador llevará a cabo un cálculo basado en las estadísticas, y gracias a estas, hará una estimación de los registros a devolver por la consulta, punto de partida para iniciar la creación del plan de ejecución de la consulta.

 Ahora bien, si nos fijamos en un plan de ejecución gráfico, podemos encontrar el Missing Index, como muestro en un ejemplo:


 Si pinchamos sobre el, con el botón derecho del ratón y seleccionamos “Missing Index Detail”, se nos mostrará el comando a ejecutar o la sentencia CREATE exacta del índice que se nos aconseja crear.

 Tendremos que valorar, o las reglas de negocio de nuestra empresa, cuan critica o importante es la consulta, para invertir tiempo y recursos en optimizar la consulta y conseguir que el tiempo de su respuesta sea el mínimo posible. Partiendo de esto, podremos probar los consejos de crear nuevos índices y verificar si efectivamente las consultas devuelven los datos con mayor rapidez.

 No es aconsejable cargar las tablas de índices, pues cuanto mas se tengan en una tabla, habrá operaciones que se verán afectadas y tarden mas, por poner un ejemplo, cuando se hacen inserciones sobre registros o campos índice, estos índices se han de actualizar en memoria, lo que conlleva un coste, imagina que tienes cientos de inserciones en una hora, lo que puede afectar al rendimiento… Tenemos que tratar de tener siempre los mínimos índices indispensables en nuestras tablas, y que estos sean los correctos, y asegurarnos que los usan aquellos planes de ejecución de las consultas de la aplicación que los necesiten.

 

 Se aconseja leer: Actualización de estadísticas síncronas o asíncronas mejoran la respuesta del optimizador de consultas. SQL Server 

 

 

 

Fuentes:

Microsoft, MSDN, Benjamin Nevares

Apunte y recopilación por Norman M. Pardell

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.

 

 

 

 

publicado por normanmpardell a las 19:47 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Tomo I. Memoria RAM. Optimización de sistemas de 32 y 64 bits. SQL Server 2008.
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad