Mejora de rendimiento en SQL Server con Ax3 Optimus I

LogoOptimus_nuevo

En esta ocasión vamos a ver como mejorar el rendimiento de nuestras bases de datos con Optimus. En este artículo hablaremos de como realizar esas mejoras mediante la creación de nuevos índices y como estos aumentan el rendimiento de nuestras bases de datos.

Las bases de datos con el tiempo van conteniendo cada vez más información, las tablas van creciendo y por tanto las consultas sobre ellas se hacen más lentas. Para ello es conveniente la creación de índices para que el acceso a esa información se realice de forma rápida.

Hay que tener en cuenta que no debemos abusar de la creación de índices, ya que no siempre vamos a obtener el resultado deseado.

Entonces… ¿cómo sé que índices crear?

Ax3 Optimus nos da esa información, y nos propone una serie de índices para mejorar el rendimiento considerablemente.

Para este ejemplo, parto de una base de datos con una tabla de movimientos de clientes llamada CustomerTrans con un índice cluster creado. Desde Ax3 Optimus vamos a consultar si la herramienta nos propone la creación de un nuevo índice, para ello seleccionando la base de datos, nos vamos a la pestaña de Queries/Index

optimusdemo1

Como vemos no nos propone ningún índice y para forzarlo lo que hacemos es ejecutar una consulta sobre esa tabla.

SELECT * FROM CustomerTrans WHERE AccountNum <> '0'

Lo que hacemos aquí es aplicarle un filtro cualquiera para que realice una búsqueda “pesada”. Vemos que la consulta tarda 20 segundos para 320.299 registros.

image

Si volvemos a comprobar en Optimus los índices propuestos, vemos que ahora si que nos propone algo.

image

Nos muestra el coste total de la consulta, la tabla afectada, el porcentaje de impacto 65.12% y como construir ese nuevo índice.
En el campo Inequality Usage vemos que el campo es
AccountNum, justo el que hemos usado en el WHERE de la consulta.

Crearemos entonces un índice de tipo NONCLUSTERED para el campo AccountNum y añadiremos la clausula INCLUDE tal y como propone la herramienta, añadiendo los campos mostrados.
Con la sentencia INCLUDE, añadimos campos que no serán indexados, pero si una consulta los requiere podrá recuperarlos directamente del índice sin necesidad de hacer una búsqueda sobre la tabla.

CREATE NONCLUSTERED INDEX IX_CustomerTrans    ON CustomerTrans (AccountNum)   
INCLUDE ([RecId], [VOUCHER], [INVOICE], [TRANSDATE], [TXT], [AMOUNTCUR], [AMOUNTMST]);

Una vez creado volvemos a ejecutar la misma consulta.

SELECT * FROM CustomerTrans WHERE AccountNum <> '0'

image

Como vemos, hemos pasado de 20 segundos a 6 segundos.

Si volvemos a Optimus a ver que nos cuenta, vemos que ya no nos propone el índice anteriormente mostrado

image

Como veis podemos mejorar mucho el rendimiento de nuestras bases de datos con la creación de nuevos índices.

Espero que os haya sido de utilidad.

Para descargar la nueva versión. [Descargar]

Visitas: 12

Etiquetas: ax3, labs, optimus, rendimiento, server, sql

Comentar

¡Necesitas ser un miembro de El Rincón Dynamics para añadir comentarios!

Participar en El Rincón Dynamics

© 2012   Creado por Antonio Gilabert.

Emblemas  |  Reportar un problema  |  Términos de servicio