Deframmentazione degli indici per i database di Project Server 2007

Aggiornamento: settembre 2008

 

Ultima modifica dell'argomento: 2015-02-27

Le attività di manutenzione dei database possono essere eseguite mediante istruzioni Transact-SQL oppure mediante la procedura guidata per la manutenzione del database. In questo articolo vengono fornite informazioni dettagliate su entrambi gli approcci.

Le attività di manutenzione consigliate per i database di Microsoft Office Project Server 2007 comprendono:

  • Controllo dell'integrità del database

  • Deframmentazione degli indici tramite riorganizzazione o rigenerazione

  • Impostazione del fattore di riempimento per un server

  • Monitoraggio delle dimensioni per compattare i database o aumentarne le dimensioni

  • Eliminazione del contenuto della cronologia

  • Aggiornamento delle statistiche

Deframmentazione degli indici tramite riorganizzazione o ricostruzione

La frammentazione si verifica quando l'allocazione dello spazio di archiviazione logica e fisica di un database contiene molte aree di archiviazione disperse, che risultano insufficienti, non fisicamente contigue oppure troppo frammentate per un utilizzo efficiente. La frammentazione può essere il risultato dell'esecuzione di molte operazioni di inserimento, aggiornamento o eliminazione su una tabella. Quando un tabella diventa frammentata, risultano frammentati anche gli indici definiti su di essa.

Office Project Server 2007 utilizza i tipi di GUID come chiavi di clustering. Ciò evita che operazioni di inserimento simultanee competano per le stesse pagine di dati (aree di inserimento critiche), ma può provocare la frammentazione di tabelle e indici. La frammentazione può verificarsi perché i nuovi record possono essere inseriti ovunque nell'albero B piuttosto che solo alla fine, provocando una maggiore tendenza alle divisioni di pagina (indice e dati) e dunque alla frammentazione. Tale tendenza è mitigata dal clustering su chiavi composite che utilizzano l'UID progetto per verificare che le pagine di dati contengano dati correlati, ma la deframmentazione regolare delle tabelle più grandi migliorerà le prestazioni, in particolare nelle distribuzioni di grandi dimensioni di Office Project Server 2007.

Nel tempo, la frammentazione del database può causare una riduzione delle prestazioni (attività non necessaria del disco) e un utilizzo inefficiente dello spazio. Per ridurre la frammentazione e la frequenza con cui questa si verifica, impostare manualmente i database del contenuto sulle dimensioni maggiori possibili in base ai requisiti aziendali e all'architettura di database. Ad esempio, se i requisiti prevedono di limitare i database del contenuto a 100 gigabyte (GB), dopo aver creato i database del contenuto impostarne le dimensioni su 100 GB in SQL Server Management Studio.

Sebbene sia possibile deframmentare le tabelle, la deframmentazione degli indici è più vantaggiosa per le prestazioni del database ed è molto più veloce. In questo articolo viene descritta solo la deframmentazione degli indici.

Prima di implementare un piano di manutenzione per prevenire la frammentazione del database, determinare quali siano le tabelle e gli indici più frammentati e quindi creare un piano di manutenzione per ricostruire o riorganizzare tali indici.

È possibile eseguire la misurazione della frammentazione nei modi seguenti:

  • In SQL Server 2005, utilizzare la vista a gestione dinamica sys.dm_db_index_physical_stats

  • In SQL Server 2000, utilizzare DBCC SHOWCONTIG

Si noti che l'algoritmo per il calcolo della frammentazione è più preciso in sys.dm_db_index_physical_stats rispetto a DBCC SHOWCONTIG. Di conseguenza, in sys.dm_db_index_physical_stats verranno visualizzati valori di frammentazione superiori.

Misurazione della frammentazione con sys.dm_db_index_physical_stats (SQL Server 2005)

In SQL Server 2005, utilizzare la vista a gestione dinamica sys.dm_db_index_physical_stats per determinare la frammentazione degli indici di una tabella o vista specificata.

Per la misurazione della frammentazione, è consigliabile monitorare la colonna avg_fragmentation_in_percent. Il valore di avg_fragmentation_in_percent deve essere il più possibile prossimo a zero per ottenere le massime prestazioni. Tuttavia, i valori compresi tra 0% e 10% possono essere accettabili.

Per informazioni sull'utilizzo di sys.dm_db_index_physical_stats, vedere sys.dm_db_index_physical_stats (https://go.microsoft.com/fwlink/?linkid=128479\&clcid=0x410)

Misurazione della frammentazione mediante DBCC SHOWCONTIG (SQL Server 2000)

Per verificare la frammentazione delle tabelle di database, gli amministratori possono utilizzare la funzione DBCC SHOWCONTIG per creare una relazione sulla frammentazione di scansione logica e di scansione extent. Per una spiegazione dettagliata dei risultati di DBCC SHOWCONTIG, vedere DBCC SHOWCONTIG (informazioni in lingua inglese) (https://go.microsoft.com/fwlink/?linkid=110841\&clcid=0x410) (informazioni in lingua inglese).

Per misurare la frammentazione, si consiglia di monitorare il valore della densità di scansione restituito da DBCC SHOWCONTIG. Nelle tabelle in cui tutti gli elementi sono contigui, il valore è 100.

Riduzione della frammentazione di un database

Per ridurre il livello di frammentazione dell'indice, eseguire la stored procedure in Come deframmentare i database di Windows SharePoint Services 3.0 e SharePoint Server 2007 (https://go.microsoft.com/fwlink/?linkid=110843\&clcid=0x410) nella Microsoft Knowledge Base.

Dopo aver determinato il livello di frammentazione dei database, è possibile pianificare la stored procedure per l'esecuzione giornaliera, settimanale o mensile, in base alle proprie esigenze e al tasso complessivo di modifica dell'ambiente. In generale, è consigliabile pianificare almeno una deframmentazione a settimana. È inoltre consigliabile pianificare le operazioni di deframmentazione dopo l'esecuzione di operazioni di correzione con DBCC CHECKDB.

Questa stored procedure modifica degli indici dei database del contenuto. Le modifiche alla stored procedure non sono supportate. Per ulteriori informazioni sulle modifiche supportate per i database del contenuto per Prodotti e tecnologie SharePoint, vedere Supporto delle modifiche ai database utilizzati dai prodotti server di Office e da Windows SharePoint Services (https://go.microsoft.com/fwlink/?linkid=110844\&clcid=0x410) nella Microsoft Knowledge Base.

Riduzione della frammentazione di una specifica tabella e dei relativi indici

Se si desidera eseguire la deframmentazione dell'indice associato a una specifica tabella invece che di un intero database, è possibile riorganizzare o ricostruire l'indice. Per ulteriori informazioni, vedere Strutture degli indici cluster (https://go.microsoft.com/fwlink/?linkid=128480\&clcid=0x410).

Nella riorganizzazione viene riorganizzato il livello foglia dell'indice. Questa operazione deframmenta e compatta gli indici cluster e non-cluster in viste e tabelle e può migliorare considerevolmente le prestazioni di scansione. Viene sempre eseguita in linea, pertanto la tabella sottostante resta disponibile per gli utenti. La riorganizzazione equivale all'istruzione DBCC INDEXDEFRAG di SQL Server 2000.

Nella ricostruzione, l'indice viene ricostruito utilizzando le stesse colonne, lo stesso tipo di indice, lo stesso attributo di unicità e lo stesso tipo di ordinamento. La ricostruzione migliora le prestazioni di scansione e ricerca nell'indice. È possibile ricostruire l'indice con una tabella sia in linea che non in linea. La ricostruzione equivale all'istruzione DBCC DBREINDEX di SQL Server 2000.

Il livello di frammentazione di un indice determina il metodo da utilizzare per la deframmentazione, nonché se l'operazione può essere eseguita o meno in linea.

Livello di frammentazione Metodo di deframmentazione

Fino al 10 %

Riorganizzazione (in linea)

10 – 75%

Ricostruzione (in linea)

75 % o più

Ricostruzione (non in linea)

Si noti che l'utilizzo dei comandi DROP INDEX e CREATE INDEX non è supportato nei database per Prodotti e tecnologie SharePoint.

È possibile riorganizzare e ricostruire gli indici utilizzando l'istruzione ALTER INDEX di SQL Server 2005, la manutenzione guidata di SQL Server 2005, le istruzioni DBCC INDEXDEFRAG e DBCC DBREINDEX di SQL Server 2000, oppure la manutenzione guidata di SQL Server 2000. In questo argomento vengono illustrate in dettaglio solo le opzioni di SQL Server 2005. Per ulteriori informazioni sulle opzioni di SQL Server 2000, vedere le risorse seguenti:

Utilizzo di ALTER INDEX

ALTER INDEX consente agli amministratori di database di eseguire operazioni di manutenzione su un indice di tabella o di vista esistente. Consente di disattivare, ricostruire e riorganizzare gli indici o, facoltativamente, di impostare opzioni per l'indice. ALTER INDEX sostituisce le istruzioni DBCC DBREINDEX e DBCC INDEXDEFRAG.

Nella maggior parte dei casi è possibile ricostruire gli indici mentre il database è in linea, perché non esistono vantaggi significativi in una ricostruzione degli indici non in linea. Tuttavia, è importante tenere presente che, durante la ricostruzione dell'indice, la tabella acquisisce un blocco condiviso che impedisce tutte le operazioni ad eccezione di quelle SELECT. I database per Prodotti e tecnologie SharePoint utilizzano indici cluster. Quando viene ricostruito un indice cluster, la tabella acquisisce un blocco esclusivo, che impedisce qualsiasi accesso alla tabella da parte degli utenti finali.

È possibile personalizzare lo script di esempio seguente per ricostruire tutti gli indici di una tabella.

USE Contoso_Content_1
GO
ALTER INDEX ALL ON [database_name. [ schema_name ] . | schema_name. ]table_or_view_name
REBUILD WITH (FILLFACTOR = 70, SORT_IN_TEMPDB = ON, ONLINE = ON,
STATISTICS_NORECOMPUTE = ON)
GO

Considerazioni speciali per il database delle relazioni

Poiché è prevista l'implementazione da parte dei clienti di relazioni personalizzate basate sui campi e i dati disponibili nel database delle relazioni, per garantire la scalabilità e le prestazioni della soluzione di creazione delle relazioni è consigliabile attenersi alle procedure consigliate seguenti per la scrittura di istruzioni T-SQL e la creazione degli indici. In Office Project Server 2007 queste tabelle (generate in modo dinamico) non vengono indicizzate oltre la chiave primaria. L'aggiornamento dell'infrastruttura per Microsoft Office Server offre funzionalità aggiuntive. Per ulteriori informazioni, vedere la sezione "Ottimizzazioni del servizio di segnalazione dei dati (RDS, Reporting Data Service) per i campi personalizzati" nell'articolo scaricabile Rilascio dell'aggiornamento dell'infrastruttura Project 2007 per Server e Client (https://go.microsoft.com/fwlink/?linkid=121912\&clcid=0x410).

Quando ci si rivolge al Servizio Supporto Tecnico Clienti Microsoft, è possibile che il responsabile del supporto chieda la rimozione degli indici aggiuntivi eventualmente creati, o delle colonne aggiunte agli indici esistenti. Il motivo è che gli indici aggiuntivi possono modificare i percorsi di accesso ai dati e, in alcuni casi, provocare comportamenti imprevisti e problemi di blocco/deadlock.

Impostazione del fattore di riempimento per un server

L'impostazione del fattore di riempimento consente di ottimizzare l'archiviazione dei dati dell'indice e le prestazioni. Quando si crea o ricostruisce un indice, il valore del fattore di riempimento (1–100) determina la percentuale di spazio da riempire con dati in ogni pagina di livello foglia. Lo spazio rimanente viene riservato per l'aumento delle dimensioni successivo. In molte situazioni risulta ottimale il fattore di riempimento predefinito a livello di server, pari a 0. Per Microsoft Office SharePoint Server 2007 tuttavia, per supportare l'aumento di dimensioni e minimizzare la frammentazione risulta ottimale un valore a livello di server pari a 70.

Sebbene sia possibile, non è consigliabile impostare il fattore di riempimento per singole tabelle o indici.

Per visualizzare il valore del fattore di riempimento di uno o più indici, eseguire una query sulla vista del catalogo sys.indexes. Per ulteriori informazioni sulla vista, vedere sys.indexes (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=128510\&clcid=0x410).

Per configurare il valore del fattore di riempimento a livello di server, utilizzare la stored procedure di sistema sp_configure. Per ulteriori informazioni, vedere spconfigure (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=128512\&clcid=0x410).