Estoy haciendo la reconstrucción de índice en la base de datos. Necesito verificar si está hecho o no. ¿Puede alguien guiarme por favor? Estoy usando SQL Server 2008 R2Reconstrucción de índice en el servidor sql
Respuesta
Si ha vuelto a indexar correctamente sus tablas, la fragmentación del índice será cero (o cerca de si tiene tablas activas). Se puede utilizar esta secuencia de comandos para comprobar el nivel de fragmentación
DECLARE
@IndexID int,
@TableID int,
@IndexName varchar(256)
--Enter index name here
SELECT @IndexName = '<index name>'
--Enter table name here
SET @TableID = OBJECT_ID('<table name>')
SELECT @IndexID = IndID
FROM sysindexes
WHERE
id = @TableID
AND name = @IndexName
DBCC SHOWCONTIG (@id, @IndexID)
Lo que está buscando en la salida es la propiedad llamada densidad de digitalización. Esto debería estar cerca del 100%. Si no es así, entonces su re-indexación no se ha completado/exitosa
Si usted tiene un montón de tablas/índices, esto puede resultar tedioso, por lo que un corto circuito que por auto-generar el guión de esta manera:
SELECT 'DBCC SHOWCONTIG ' +
'('
+ CONVERT(varchar(32), si.id) + ','
+ CONVERT(varchar(32), si.indid) +
')--' + so.name
FROM sysobjects so
INNER JOIN sysindexes si
ON (so.id = si.id)
WHERE (
so.type = 'U' AND
si.indid < 2 AND
si.id = object_id(so.name)
)
Si busca detalles sobre todos los índices y tablas de su base de datos, puede usarlos.
SELECT OBJECT_NAME(object_id),*
FROM sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'SAMPLED')
Se me acaba de ocurrir que también podría estar preguntando cómo saber el progreso de la reindexación. Para ello se puede utilizar
SELECT percent_complete
from sys.dm_exec_requests
where session_id= <spid of interest>
Tengo un trabajo de reconstrucción de índice ejecutado durante 12 horas. La ejecución de la consulta de porcentaje completado y el resultado devuelto fue 0. LOL. – MaDDoG
@MaDDoG - En realidad, al mirar los documentos parece que esta columna solo está poblada para 'ALTER INDEX REORGANIZE'. Los documentos también solían decir que 'CREATE INDEX' actualizó esta columna, pero parece que [esa afirmación ya se eliminó] (https://connect.microsoft.com/SQLServer/feedback/details/641790/doc-sys- dm-exec-requests-topic-is-inconsistent-between-versions) –
Un punto clave sería la de ejecutar el informe "Índice de Estadística físicas" y "Uso del disco por Top Tablas", informa antes y después de reconstruir los índices.
En el informe "Estadísticas físicas del índice", puede ver qué tan fragmentado es cada índice.
Para ver estos informes ... * Haga clic con el botón derecho en la base de datos en Sql Server Management Studio * Pase el mouse sobre "Informes", luego "Informes estándar", luego seleccione el informe que desee.
Para un script puede configurar para identificar índices fragmentados y reconstruir ellos (y para más información), mira esto:
http://www.foliotek.com/devblog/sql-server-optimization-with-index-rebuilding/
Usted puede intentar este procedimiento. Se reconstruirá el índice de todas las tablas en la base de datos e imprimir el resultado a medida que avanza el panel de mensajes del Estudio de Gestión:
CREATE PROCEDURE [dbo].[ReIndexDatabase]
AS
DECLARE @MyTable VARCHAR(255)
DECLARE myCursor
CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'base table'
OPEN myCursor
FETCH NEXT
FROM myCursor INTO @MyTable
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT 'Reindexing Table: ' + @MyTable
EXEC('ALTER INDEX ALL ON '[email protected]+'
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = OFF,
STATISTICS_NORECOMPUTE = ON)');
FETCH NEXT FROM myCursor INTO @MyTable
END
CLOSE myCursor
DEALLOCATE myCursor
EXEC sp_updatestats
se puede ver este link para más información sobre la indexación de nuevo o este link.
Nota la información en la parte superior de la página.
- 1. Reorganizar índice vs Reconstruir índice en el plan de mantenimiento de servidor SQL
- 2. Índice filtrados del servidor SQL
- 3. Reconstrucción de índices SQL - ¿Cuándo?
- 4. ¿Cuál es la diferencia entre la reconstrucción del índice OFFLINE y ONLINE en SQL Server?
- 5. Evite la eliminación del índice Lucene.NET actual durante la reconstrucción
- 6. Obtener fecha de creación de índice del servidor SQL
- 7. Partición del servidor SQL - Error de índice único
- 8. ¿Cuándo se actualiza el índice de texto completo en el servidor sql?
- 9. ¿La clave única del servidor Sql también es un índice?
- 10. Missing Índice detalles SQL
- 11. ¿Cuál es la diferencia en la reconstrucción de un índice en una tabla organizada por índice y una tabla común?
- 12. ¿la clave principal siempre está indexada en el servidor sql?
- 13. almacenamiento de imágenes en el servidor sql
- 14. columna de identidad en el servidor Sql
- 15. Servidor SQL: el tamaño total de un índice o clave principal no puede exceder 900 bytes
- 16. Reconstrucción de paquete HTTP
- 17. Actualizar la columna de autoincremento en el servidor SQL
- 18. Servidor SQL - NO EN
- 19. Columna DateCreated en el servidor Sql?
- 20. Inserción masiva en el servidor Sql
- 21. Tablas temporales en el servidor sql
- 22. aprendizaje XQuery() en el servidor SQL
- 23. columna para remar en el servidor sql?
- 24. Scalar Max en el servidor Sql
- 25. Tablas temporales en el servidor sql?
- 26. Parámetro opcional en el servidor SQL
- 27. Redondeo decimal en el servidor sql
- 28. Índices de SQL Server: ¿qué columnas incluir en el índice?
- 29. SQL Server: Planta una fecha en el servidor SQL, pero permanecer determinista
- 30. ¿Cómo evitar las "estadísticas de reconstrucción" de SQL Server cuando se realizan pruebas de rendimiento?
Gracias Seth.Tengo 100 tablas en DB y no sé el nombre del índice para cada una de las tablas. Así que cualquier otra forma de hacerlo – Pradeep
Agregué un script de autogen que debería darle el mismo script que el anterior para cada tabla e índice. – Seth
Alias de tabla corregidos. Y agregué el 'so.name' al final como un comentario, me ayudó a localizar rápidamente a qué objeto se refiere. Podría lanzar un 'ORDER BY so.name' y la lista se ordenará por el nombre de los objetos. Guión útil de hecho. – Yaroslav