Saltar al contenido

Diario de un DBA

Problemas y soluciones para SQL Server

Menú
  • Inicio
  • Consultoria gratuita
  • tempdb
  • Curso Azure DP-300
  • Rendimiento
  • Seguridad
  • Sobre Mi
Menú

Comprobar fragmentación en SQL Server

Publicada el junio 23, 2024junio 24, 2024 por solracamo

Contenido del post:

Toggle
  • ¿Por qué es importante comprobar la fragmentación de los índices?
  • Script para comprobar la fragmentación de los índices en SQL Server
  • Cómo reorganizar y reconstruir índices en SQL Server
    • Reorganización de Índices
    • Reconstrucción de Índices
  • Mejores prácticas para mantener índices saludables
  • ¿Todavía tienes dudas?

La fragmentación en los índices es una de las causas más comunes del mal rendimiento en las instancias SQL Server. Cuando los índices se fragmentan, el tiempo de respuesta de las consultas aumenta y el rendimiento general del servidor puede verse significativamente afectado. En este post os daré un script que os permitirá detectar los indices más fragmentados de vuestra instancia SQL Server.

¿Por qué es importante comprobar la fragmentación de los índices?

La fragmentación se produce cuando las páginas de datos de un índice no están almacenadas una detrás de la otra en el disco. Esto puede ocurrir debido a la inserción, actualización o eliminación de datos. Una alta fragmentación puede llevar a un aumento en los tiempos de lectura y escritura, afectando negativamente el rendimiento de las consultas y operaciones de la base de datos.

Es crucial comprobar la fragmentación regularmente para mantener un rendimiento óptimo. Con el script que te proporcionaré en este artículo, podrás verificar fácilmente la fragmentación de tus índices y tomar las medidas necesarias para reorganizarlos o reconstruirlos, aunque esto es mejor hacerlo con jobs de mantenimiento cómo los de Ola Hallengren.

Script para comprobar la fragmentación de los índices en SQL Server

Ejecutando el siguiente script obtendreis los indices que tiene una fragmentación igual o mayor al 5% y que tengan un númer de páginas mayor a 100. Esto es el mínimo que yo considero relevante para que la fragmentación pueda afectar realmente a la instancia.

USE Device
GO
PRINT 'This table displays all indexes that currently have fragmentation of 5% or above, and also have a page count of 100 or above, on the ' + DB_NAME() + ' database.';
SELECT  OBJECT_NAME(IDX.OBJECT_ID) AS Table_Name, 
IDX.name AS Index_Name, 
IDXPS.index_type_desc AS Index_Type, 
IDXPS.avg_fragmentation_in_percent  Fragmentation_Percentage,
IDXPS.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) IDXPS 
INNER JOIN sys.indexes IDX  ON IDX.object_id = IDXPS.object_id 
AND IDX.index_id = IDXPS.index_id 
WHERE IDXPS.avg_fragmentation_in_percent >= 5
AND IDXPS.page_count >= 100
AND IDXPS.index_type_desc <> 'HEAP'
ORDER BY Table_Name;
GO

PRINT CHAR(13);

El resultado de este script se ve tal que así:

Cómo reorganizar y reconstruir índices en SQL Server

Cómo ya dije anteriormente, hacer esta tarea de forma manual no es lo recomendable e incluso os insto a que no lo hagais. Es mucho más fácil hacerlo de forma automática usando los jobs de mantenimiento, pero en caso de que necesiteis hacerlo a mano, aquí teneis los códigos necesarios.

Reorganización de Índices

Reorganizar un índice implica ordenar las páginas de índice para que estén en un orden lógico continuo, sin requerir un bloqueo exclusivo. Puedes usar el siguiente comando para reorganizar un índice:

ALTER INDEX [IndexName] ON [TableName]
REORGANIZE;

Reconstrucción de Índices

Reconstruir un índice es una operación más intensiva que crea una nueva copia del índice, eliminando completamente la fragmentación. Utiliza el siguiente comando para reconstruir un índice:

ALTER INDEX [IndexName] ON [TableName]
REBUILD;

Mejores prácticas para mantener índices saludables

  • Revisar la fragmentación regularmente: Programa tareas automáticas para verificar la fragmentación de índices.
  • Mantén estadísticas actualizadas: Asegúrate de que las estadísticas de tus índices estén siempre actualizadas para un rendimiento óptimo.
  • Analiza patrones de uso: Observa cómo se utilizan las tablas y los índices para ajustar las estrategias de mantenimiento.

¿Todavía tienes dudas?

Si este post no ha solucionado tu problema o todavía tienes dudas sobre este o cualquier otro asunto relacionado con SQL Server, puedes enviarme un mensaje o solicitar una consultoría gratuita haciendo clic aquí.

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Consultoria Gratis

¿Tienes un problema o una consulta sobre tu servidor SQL Server? ¿Necesitas hacer algún tipo de mantenimiento o tarea en tu instancia, pero no tienes claro cómo hacerlo?

Envíame un email con tu caso y te contestaré lo antes posible de forma totalmente gratuita.

Puedes utilizar el formulario que encontrarás haciendo click aquí.

Sobre mi

Efectivamente, soy un muñeco de slack con la camiseta de Fernando Alonso en Renault, pero también soy una DBA mid level que vive y trabaja en inglaterra como consultor SQL Server.

El objetivo de este blog es escribir los problemas con los que me he ido encontrando y cómo los solucioné. Si estas soluciones han servido para mí, es posible que también lo hagan para ti, ¿no?

Otras soluciones

  • Recuperar la password de la cuenta SA en SQL Serveroctubre 5, 2024
  • Always On en SQL Server. Todo lo que necesitas saberagosto 24, 2024
  • Recuperar una tabla borrada en SQL Serveragosto 18, 2024
  • Mover bases de datos a otro disco en SQL Serveragosto 11, 2024
  • Comprobar los últimos backups tomados en una instancia SQL Serverjunio 29, 2024
  • Comprobar fragmentación en SQL Serverjunio 23, 2024

Curso Azure DP-300 Gratis

  • Azure DP-300 curso en Español – Parte 1noviembre 17, 2022
  • Crear una máquina virtual con SQL server en Azurenoviembre 17, 2022
  • Crear un servidor SQL Server en Azure.noviembre 22, 2022
  • Azure DP-300 curso en Español – Parte 2noviembre 24, 2022
  • Azure DP-300 curso en Español – Parte 3diciembre 1, 2022
  • Azure DP-300 curso en Español – Parte 4diciembre 14, 2022

Consulta las páginas que nadie consulta:
Privacidad
Cookies

Escríbeme!
Contacto

© 2025 Diario de un DBA
x