Alcuni problemi di query time-out possono essere riconducibili ad una alta frammentazione degli indici del database: una frammentazione superiore al 50% può causare un sensibile calo delle prestazioni.
Per capire se gli indici sono frammentati e poi ricostruirli, eseguire i passi sotto elencati:
-- Per visualizzare la
frammentazione degli indici del db
SELECT OBJECT_NAME(OBJECT_ID),
index_id,index_type_desc,index_level,avg_fragmentation_in_percent,avg_page_space_used_in_percent,page_count
FROM sys.dm_db_index_physical_stats
(DB_ID(N'OrangeFidelity'), NULL, NULL, NULL , 'SAMPLED')
ORDER BY avg_fragmentation_in_percent DESC
-- Per una query più specifica che comprenda il nome delle tabelle presenti nel db in esame
SELECT OBJECT_NAME(a.OBJECT_ID) Tabella, index_id,index_type_desc,index_level,
avg_fragmentation_in_percent,avg_page_space_used_in_percent,page_count
FROM sys.dm_db_index_physical_stats
(DB_ID(N'OrangeServer'), NULL, NULL, NULL , 'SAMPLED') a INNER JOIN sys.objects b on a.object_id = b.object_id
WHERE b.type_desc = 'USER_TABLE'
ORDER BY Tabella, avg_fragmentation_in_percent DESC
-- ESEGUIRE PRIMA UN
BACKUP !!! ---
-- Ricostruisce gli
indici della tabella DocumentReference in OrangeFidelity
USE OrangeFidelity
ALTER INDEX ALL ON DocumentReference
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,STATISTICS_NORECOMPUTE = ON);
-- Ricostruisce gli
indici della tabella FidelityHandling in OrangeFidelity
USE OrangeFidelityALTER INDEX ALL ON FidelityHandling
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
Naturalmente queste istruzioni possono essere eseguite per
tutte le tabelle dei vari db.