Manutenzione dei database per SharePoint Foundation 2010

SharePoint 2010
 

Si applica a: SharePoint Foundation 2010

Ultima modifica dell'argomento: 2016-11-30

Riepilogo: vengono fornite informazioni su come gestire i database che ospitano dati e configurazioni per Prodotti Microsoft SharePoint 2013. Sono inclusi descrizioni ed esempi relativi alle attività e strategie di manutenzione dei database consigliate.

Si applica a: Microsoft SharePoint Server 2010, Microsoft SharePoint Foundation 2010

Autori: Bill Baer e Bryan Porter

Revisore tecnico: Paul S. Randal (SQLskills.com (le informazioni potrebbero essere in lingua inglese))

Sommario

NotaNote
Prima di implementare attività di manutenzione del database o modificare i database di SharePoint 2010, leggere l'articolo Supporto per le modifiche ai database utilizzati dai prodotti server di Office e da Windows SharePoint Services.

Per garantire il funzionamento corretto dei database di Microsoft SharePoint 2010 è essenziale eseguirne la manutenzione di routine.

Le attività di manutenzione consigliate per i database SharePoint 2010 includono le operazioni seguenti:

  • Verificare l'integrità del database.

  • Deframmentare gli indici riorganizzandoli o ricostruendoli.

  • Impostare il fattore di riempimento per un server.

NotaNote
In questo articolo viene illustrata la manutenzione dei database, senza esaminare aspetti quali la pianificazione delle capacità o le prestazioni. Per informazioni sulle capacità o la pianificazione delle capacità, vedere Pianificazione e configurazione dell'archiviazione e della capacità di SQL Server (SharePoint Server 2010).

Sebbene le versioni precedenti di Prodotti e tecnologie SharePoint richiedano l'intervento manuale per eseguire la deframmentazione dell'indice e la manutenzione delle statistiche, alcune regole dell'analizzatore dell'integrità di SharePoint automatizzano questo processo in SharePoint 2010. Tali regole valutano l'integrità degli indici e delle statistiche di database ogni giorno e gestiscono automaticamente tali aspetti per i database seguenti:

  • Database di configurazione

  • Database del contenuto

  • Database profili per applicazioni di servizio profili utente

  • Database di social networking per applicazioni di servizio profili utente

  • Database di report per l'applicazione di servizio Web Analytics

  • Database dell'area di gestione temporanea per l'applicazione di servizio Web Analytics

  • Database di Word Automation Services

È possibile eseguire le attività di manutenzione dei database utilizzando i comandi Transact-SQL o la procedura guidata per la manutenzione del database. In questo articolo vengono descritti i comandi Transact-SQL pertinenti e come creare piani di manutenzione dei database utilizzando la procedura guidata per la manutenzione del database Microsoft SQL Server (gli esempi dettagliati riguardano Microsoft SQL Server 2008 R2 e Microsoft SQL Server 2005).

È consigliare iniziare le operazioni di manutenzione di routine con verifiche della coerenza per garantire che i dati e gli indici non siano danneggiati. È possibile utilizzare l'istruzione CHECKDB dei comandi DBCC (Database Console Command) per eseguire una verifica della coerenza interna dei dati e delle pagine dell'indice.

La maggior parte dei problemi di coerenza dei database è legata a errori del sottosistema di I/O. Esistono tuttavia altri fattori ed eventi che possono influire sulla coerenza, ad esempio un arresto irregolare di un server di database o un errore nell'unità disco. Anche i problemi di prestazioni e disponibilità possono in alcuni casi essere dovuti a problemi di coerenza dei database sottostanti. È pertanto consigliabile eseguire verifiche della coerenza dei database almeno una volta a settimana nei database di SharePoint 2010 e quando si verificano eventi quali errori del server di database o del sottosistema di I/O.

L'istruzione DBCC CHECKDB consente di verificare l'integrità logica e fisica di tutti gli oggetti nel database specificato eseguendo le operazioni seguenti:

  • Esegue l'equivalente di DBCC CHECKALLOC per verificare le strutture di allocazione nel database.

  • Esegue l'equivalente di DBCC CHECKTABLE su ogni tabella e visualizzazione del database per verificarne l'integrità logica e fisica.

  • Esegue l'equivalente di DBCC CHECKCATALOG sul database per verificare la coerenza dei metadati nel database.

È consigliabile eseguire DBCC CHECKDB anziché le singole operazioni (i comandi DBCC CHECKALLOC, DBCC CHECKTABLE e DBCC CHECKCATALOG) poiché l'istruzione DBCC CHECKDB identifica il più ampio intervallo possibile di errori ed è pertanto più appropriata a un ambiente di produzione.

L'istruzione DBCC CHECKDB richiede una gran quantità di memoria, I/O e risorse CPU. Anziché eseguire DBCC CHECKDB nel sistema di produzione, è possibile eseguire questa istruzione in una copia di backup ripristinata dei database di SharePoint su un server diverso, in modo da scaricare il carico di lavoro legato alla verifica della coerenza dal sistema di produzione.

È consigliabile eseguire innanzitutto l'istruzione DBCC CHECKDB e successivamente, se vengono rilevati errori, ripristinare il database interessato utilizzando le copie di backup più recenti.

ImportanteImportant
Non è possibile eseguire DBCC CHECKDB WITH REPAIR_ALLOW_DATA_LOSS, bensì è possibile eseguire DBCC_CHECKDB WITH REPAIR_FAST e REPAIR_REBUILD poiché tali comandi aggiornano solo gli indici del database associato.

Di seguito è riportato l'output di esempio di DBCC CHECKDB.

DBCC results for 'Contoso_Content_1'.
Service Broker Msg 9675, State 1: Message Types analyzed: 14.
Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
Service Broker Msg 9667, State 1: Services analyzed: 3.
Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
DBCC results for 'sys.sysrowsetcolumns'.
There are 2663 rows in 21 pages for object "sys.sysrowsetcolumns".
DBCC results for 'sys.sysrowsets'.
There are 309 rows in 4 pages for object "sys.sysrowsets".

...more

CHECKDB found 0 allocation errors and 0 consistency errors in database 'Contoso_Content_1'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Per ulteriori informazioni su come utilizzare DBCC CHECKDB con SQL Server 2008, vedere DBCC CHECKDB (Transact-SQL).

È consigliabile eseguire le verifiche della coerenza durante i periodi non dedicati alla produzione poiché l'istruzione DBCC CHECKDB richiede un utilizzo intensivo di risorse (I/O, CPU, memoria e spazio in tempdb). Si crede erroneamente che l'istruzione DBCC CHECKDB sia causa di blocchi, ma ciò non è più vero già da prima di SQL Server 2000. Per ulteriori informazioni sul fatto che l'istruzione DBCC CHECKDB sia causa di blocchi, vedere l'articolo A SQL Server DBA myth a day: (2/30) DBCC CHECKDB causes blocking (le informazioni potrebbero essere in lingua inglese).

Se l'esecuzione di DBCC CHECKDB richiede una quantità eccessiva di risorse per il sistema di produzione, non eseguire verifiche della coerenza per una tabella alla volta. Il modo migliore per ridurre l'overhead di una verifica dell'integrità sul sistema di produzione consiste nell'utilizzare le opzioni seguenti:

  • Utilizzare l'opzione WITH PHYSICAL_ONLY per ridurre l'utilizzo di CPU e di memoria.

  • Ripristinare una copia di backup del database in un'istanza separata di SQL Server ed eseguire le verifiche della coerenza su tale copia del database.

Per ulteriori informazioni sulle opzioni per verificare la coerenza, vedere l'intervento sul blog di Paul S. Randal, CHECKDB From Every Angle: Consistency Checking Options for a VLDB (le informazioni potrebbero essere in lingua inglese).

La frammentazione dell'indice si verifica quando l'ordine logico delle pagine in una tabella o un indice (come definito dalla chiave dell'indice) è diverso dall'ordine fisico delle pagine nei file di dati. Può anche essere causata da una bassa densità dei dati nelle pagine del file di dati, che determina uno spreco di spazio su disco, memoria e I/O. La frammentazione dell'indice può essere il risultato di numerosi inserimenti, aggiornamenti o eliminazioni in una tabella. Nelle figure seguenti sono messi a confronto un nuovo indice non frammentato e un indice frammentato dopo numerosi inserimenti, aggiornamenti o eliminazioni. La freccia rossa indica l'ordine fisico dell'indice, mentre le frecce nere mostrano l'ordine logico delle pagine di indice.

Figura 1. Indice non frammentato (origine immagine: Paul S. Randal)

Indice non frammentato

 

Figura 2. Indice frammentato (origine immagine: Paul S. Randal)

Indice frammentato

 

Poiché gli inserimenti, gli aggiornamenti e le eliminazioni non vengono distribuiti uniformemente tra le righe della tabella e gli indici, il riempimento (o densità dei dati) di ogni pagina può variare nel tempo. Nel caso di query che analizzano una parte o tutti gli indici di una tabella, la frammentazione può causare letture di pagina aggiuntive, conseguenza che impedisce l'analisi parallela dei dati e può incidere significativamente sulle prestazioni della ricerca.

La frammentazione dell'indice può determinare un calo delle prestazioni e lo spreco di spazio. La frammentazione può inoltre verificarsi rapidamente in database caratterizzati solo da un uso moderato.

Prima di implementare un piano di manutenzione per la frammentazione dell'indice, è necessario innanzitutto stabilire quali tabelle e indici siano maggiormente frammentati, quindi creare un piano di manutenzione per ricostruire o riorganizzare tali indici.

Ad esempio, in SharePoint 2010, una tabella che spesso diventa frammentata è AllDocs, che contiene raccolte documenti, i relativi documenti, elenchi e voci di elenco, nonché i relativi metadati.

Il livello di frammentazione di un indice è la percentuale di pagine di indice che non seguono lo stesso ordine logico e fisico.

La ricostruzione dell'indice online è possibile solo in SQL Server Enterprise Edition, Developer Edition ed Evaluation Edition. I metodi descritti in questo articolo prendono in considerazione tali restrizioni. Qualora la versione di SQL Server che ospita uno specifico database non supporti le ricostruzioni dell'indice online oppure se l'indice da ricostruire non è idoneo alla ricostruzione online, le procedure illustrate nell'articolo verranno adattate a un processo offline. Un indice può non essere idoneo alla ricostruzione online a causa della presenza di colonne LOB, ad esempio colonne con tipo di dati NVARCHAR(MAX), IMAGE e così via.

Per informazioni sulle ricostruzioni dell'indice online, vedere Funzionamento delle operazioni sugli indici in linea. Quando si esegue la ricostruzione di un indice offline, i blocchi a livello di tabella vengono acquisiti durante il processo di ricostruzione, pertanto è possibile che la scrittura nella tabella venga impedita o perfino l'accesso alla tabella stessa. Molti degli indici nei database di SharePoint vengono ricostruiti sempre con un processo offline a causa delle colonne LOB.

Anche se si utilizza la ricostruzione dell'indice online, sono presenti comunque due punti durante l'operazione in cui i blocchi di tabella vengono applicati momentaneamente e possono causare problemi. È pertanto consigliabile pianificare sempre le attività di ricostruzione degli indici durante i periodi di scarsa attività.

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

Per misurare la frammentazione, è consigliabile monitorare la colonna avg_fragmentation_in_percent. Il valore di avg_fragmentation_in_percent deve essere quanto più possibile vicino allo zero per garantire prestazioni ottimali. I valori dallo 0 al 10% sono tuttavia accettabili. Per ulteriori informazioni, vedere sys.dm_db_index_physical_stats.

Nella tabella seguente vengono mostrati risultati di esempio di sys.dm_db_index_physical_stats, con un valore di 9,375 per avg_fragmentation_in_percent in una riga.

 

database_id

index_type_desc

alloc_unit_type_

desc

avg_fragmentation_

in_percent

10

CLUSTERED INDEX

IN_ROW_DATA

0

10

NONCLUSTERED INDEX

IN_ROW_DATA

0

10

NONCLUSTERED INDEX

IN_ROW_DATA

0

10

CLUSTERED INDEX

IN_ROW_DATA

0

10

NONCLUSTERED INDEX

IN_ROW_DATA

0

10

CLUSTERED INDEX

IN_ROW_DATA

9.375

Per utilizzare la vista a gestione dinamica sys.dm_db_index_physical_stats
  1. Sulla barra delle applicazioni fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server 2008 e quindi SQL Server Management Studio.

    Per utilizzare sys.dm_db_index_physical_stats con un oggetto di database, è necessario conoscere l'ID del database e l'ID dell'oggetto.

  2. Selezionare il database del contenuto in Esplora oggetti e quindi fare clic su Nuova query. Eseguire lo script seguente.

    SELECT DB_ID() AS [Database ID];

    NotaNote
    Se si utilizza DB_ID senza specificare un nome di database, il livello di compatibilità del database corrente deve essere 100 (per un database SQL Server 2008) o 90 (per un database SQL Server 2005). Se è stato eseguito l'aggiornamento da una versione precedente di SQL Server, è necessario specificare un nome di database nell'istruzione DB_ID. Per ulteriori informazioni sui livelli di compatibilità, vedere sp_dbcmptlevel (Transact-SQL).
  3. Eseguire sys.dm_db_index_physical_stats sul database o l'oggetto selezionato. È possibile specificare il database e anche una tabella o un indice.

    Utilizzare la sintassi seguente quando si esegue sys.dm_db_index_physical_stats.

    sys.dm_db_index_physical_stats ( 
        { database_id | NULL | 0 | DEFAULT }
        , { object_id | NULL | 0 | DEFAULT }
        , { index_id | NULL | 0 | -1 | DEFAULT }
        , { partition_number | NULL | 0 | DEFAULT }
        , { mode | NULL | DEFAULT }
    )
    

    Prestare attenzione quando si utilizza la vista a gestione dinamica sys.dm_db_index_physical_stats poiché può richiedere un utilizzo intensivo delle risorse. Per una descrizione completa dei vari modi in cui utilizzare questa vista, vedere Inside sys.dm_db_index_physical_stats (le informazioni potrebbero essere in lingua inglese).

Utilizzare le informazioni seguenti per ridurre il livello di frammentazione dell'indice.

SharePoint 2010 include il framework di regole dell'analizzatore dell'integrità, il quale dispone numerose regole che consentono di monitorare l'integrità e lo stato di un ambiente SharePoint e, in alcuni casi, intervenire per correggere determinati tipi di problemi.

SharePoint 2010 include numerose regole specifiche per la manutenzione dei database del contenuto. Si tratta di regole che consentono di ridurre automaticamente la frammentazione dell'indice per alcuni database di SharePoint e di regole che consentono di controllare statistiche obsolete, eventualmente aggiornandole se necessario. Le regole dell'analizzatore dell'integrità sostituiscono il processo Statistiche database aggiornato, introdotto nel Service Pack 2 per Prodotti e tecnologie SharePoint. Per impostazione predefinita, tali regole sono configurate in modo da essere eseguite in base a una pianificazione che può essere giornaliera, settimanale o su richiesta, in base al destinatario della regola.

Tutte le regole dell'analizzatore dell'integrità configurate per l'esecuzione giornaliera che siano associate a uno specifico servizio di SharePoint vengono eseguite dallo stesso processo timer. Se si modifica la pianificazione di tale processo timer, si modificherà pertanto il momento in cui le regole dell'analizzatore dell'integrità configurate per l'esecuzione giornaliera e associate a tale servizio verranno eseguite durante il giorno. Tutte le regole esaminate in questo articolo sono associate al servizio Timer di SharePoint.

Alle regole dell'analizzatore dell'integrità configurate per l'esecuzione in un diverso intervallo di tempo, ad esempio settimanale, o associate a un servizio diverso saranno assegnati processi timer separati. Se si configura una regola dell'analizzatore dell'integrità per l'esecuzione settimanale, essa verrà eseguita con il processo timer configurato per l'esecuzione settimanale per il servizio specifico a cui è associata tale regola dell'analizzatore dell'integrità. In altre parole, la regola viene eseguita in base alla pianificazione definita per tale processo timer.

È possibile eseguire manualmente le regole dell'analizzatore dell'integrità facendo clic su Esegui nella barra multifunzione presente nella pagina dedicata a tali regole in Amministrazione centrale. L'esecuzione di queste regole consente di valutare l'integrità degli indici e delle statistiche, nonché di ricostruire e ricalcolare l'indice a seconda dei casi.

I database utilizzati da SharePoint contengono indici frammentati. Se si esegue questa regola, vengono eseguite le attività seguenti:

  • La regola segnala indici frammentati. Poiché la valutazione dell'integrità dell'indice è un'operazione dispendiosa, dopo l'esecuzione della regola dell'analizzatore dell'integrità, vengono sempre segnalati indici frammentati per attivare l'azione correttiva.

  • Per ogni database SharePoint, la regola cerca e, se la trova, esegue la stored procedure proc_DefragmentIndices, che crea un elenco di tutti gli indici del database. Il livello esistente di frammentazione viene valutato in ogni indice. Qualsiasi indice con una frammentazione superiore al 30% viene preso in considerazione per la ricostruzione.

  • Se la versione di SQL Server supporta le ricreazioni degli indici online, per ogni indice viene tentata la ricreazione online. Se ha esito negativo, ad esempio se l'indice sottostante non supporta le ricostruzioni online a causa della presenza di colonne LOB, viene eseguita una ricostruzione dell'indice offline.

Come accennato in precedenza, questa regola non si applica a tutti i database in un ambiente SharePoint. Alcuni database utilizzano regole diverse per eseguire attività di manutenzione analoghe.

Ricerca - Uno o più database delle proprietà contengono indici frammentati. Questa regola esegue la manutenzione degli indici nel database delle proprietà di ricerca di SharePoint 2010 Enterprise. Per impostazione predefinita, questa regola è configurata per l'esecuzione settimanale su qualsiasi server della farm. Tutta l'elaborazione per questa regola, incluse le azioni correttive, si svolgono durante la fase Check. Se quindi si desidera gestire le ricreazioni degli indici per il database delle proprietà di ricerca Enterprise, non è sufficiente configurare semplicemente questa regola in modo da non ricostruire automaticamente gli indici. È invece necessario disabilitare completamente la regola per impedire che SharePoint 2010 esegua automaticamente le operazioni di manutenzione degli indici.

Se si esegue Search - One or more property databases have fragmented indices, vengono eseguite le operazioni seguenti:

  • La regola verifica che l'ambiente sia in uno stato appropriato all'esecuzione di una ricostruzione dell'indice.

  • Per ogni database delle proprietà configurato per le applicazioni di ricerca nella farm locale, la regola esegue la stored procedure proc_MSS_DefragSearchIndexes, che crea un elenco di tutti gli indici con una frammentazione media superiore al 10%.

  • Ogni indice nell'elenco che influisce sulle prestazione del database delle proprietà viene ricostruito. Se la versione di SQL Server supporta le ricostruzioni degli indici online, viene eseguita una ricostruzione online. Se il processo ha esito negativo, l'indice viene ricostruito offline.

Ricerca - Uno o più database di ricerca per indicizzazione possono contenere indici frammentati. Questa regola esegue la manutenzione degli indici nel database delle proprietà di ricerca di SharePoint 2010 Enterprise. Per impostazione predefinita, questa regola è configurata per l'esecuzione settimanale su qualsiasi server della farm. Tutta l'elaborazione per questa regola, incluse le azioni correttive, si svolgono durante la fase Check. Se quindi si desidera gestire le ricreazioni degli indici per il database delle proprietà di ricerca Enterprise, non è sufficiente configurare semplicemente questa regola in modo da non ricostruire automaticamente gli indici. È invece necessario disabilitare completamente la regola per impedire che SharePoint 2010 esegua automaticamente le operazioni di manutenzione degli indici.

Se si esegue Search - One or more property databases have fragmented indices, vengono eseguite le operazioni seguenti:

  • La regola verifica che l'ambiente sia in uno stato appropriato all'esecuzione di una ricostruzione dell'indice.

  • Per ogni database delle proprietà configurato per le applicazioni di ricerca nella farm locale, la regola esegue la stored procedure proc_MSS_DefragSearchIndexes, che crea un elenco di tutti gli indici con una frammentazione media superiore al 10%.

  • Ogni indice nell'elenco che influisce sulle prestazione del database delle proprietà viene ricostruito. Se la versione di SQL Server supporta le ricostruzioni degli indici online, viene eseguita una ricostruzione online. Se il processo ha esito negativo, l'indice viene ricostruito offline.

Ricerca - Uno o più database di ricerca per indicizzazione possono contenere indici frammentati. Questa regola esegue la manutenzione degli indici nel database di ricerca per indicizzazione di SharePoint 2010 Enterprise. Per impostazione predefinita, questa regola è configurata per l'esecuzione solo su richiesta e può essere eseguita da qualsiasi server della farm.

La regola segnala gli indici nel database di ricerca per indicizzazione come frammentati poiché la verifica della frammentazione in un database è un'operazione dispendiosa. Se si disabilita semplicemente l'attività di riparazione per questa regola, verrà segnalato che tutti i database di ricerca per indicizzazione non sono integri, anche se i relativi indici sono stati ricostruiti di recente.

Per eseguire la manutenzione manuale degli indici nei database di ricerca per indicizzazione, disabilitare completamente la regola Search - One or more crawl databases may have fragmented indices.

Se si esegue Search - One or more crawl databases may have fragmented indices, vengono eseguite le operazioni seguenti:

  • La regola verifica che l'ambiente sia in uno stato appropriato all'esecuzione di una ricostruzione dell'indice.

  • Per ogni database di ricerca per indicizzazione configurato per le applicazioni di ricerca nella farm locale, la regola esegue la stored procedure proc_MSS_DefragGathererIndexes.

  • Ogni indice nel database di ricerca per indicizzazione presente nell'elenco viene ricostruito. Se la versione di SQL Server supporta le ricostruzioni degli indici online, viene eseguita una ricostruzione online. Se il processo ha esito negativo, l'indice viene ricostruito offline.

ImportanteImportant
La regola Search - One or more crawl databases may have fragmented indices ricostruisce ogni indice in tutti i database di ricerca per indicizzazione indipendentemente dal livello di frammentazione. Consente inoltre la compressione dei dati a livello di pagina, se supportata dalla versione di SQL Server che ospita il database di ricerca per indicizzazione.

In virtù della natura stessa del database di ricerca per indicizzazione, in genere non è necessario deframmentare frequentemente questo database. Eseguire questa regola dopo aver eseguito una ricerca per indicizzazione sul contenuto. Monitorare quindi gli indici nel database di ricerca per indicizzazione per controllarne la frammentazione ed eseguire questa regola quando la frammentazione dell'indice aumenta. La frammentazione dell'indice può verificarsi a causa dell'improvvisa aggiunta o rimozione di una grande quantità di contenuto sottoposto a ricerca per indicizzazione; ad esempio durante l'espulsione del contenuto risultante da una pulizia dell'ambiente oppure dopo l'acquisizione di una nuova origine di contenuto, quale una condivisione file o un'applicazione Web di SharePoint di grandi dimensioni.

I database seguenti non dispongono di un meccanismo di manutenzione automatico e in genere non sono caratterizzati da una significativa frammentazione. Monitorare questi database per controllarne la frammentazione e ricostruirne gli indici quando la frammentazione supera il 30%.

  • Database di amministrazione della ricerca

  • Database di archiviazione sicura

  • Database del servizio informazioni sullo stato

  • Database di sincronizzazione dei profili

  • Database del servizio di utilizzo

  • Database dei metadati gestiti

  • Database di Servizi di integrazione applicativa

  • Database di PerformancePoint Services

Per ulteriori informazioni sulle modifiche supportate per i database di SharePoint 2010, vedere Supporto per le modifiche ai database utilizzati dai prodotti server di Office e da Windows SharePoint Services nella Microsoft Knowledge Base.

Se le prestazioni di un database o di una tabella fortemente frammentati non vengono significativamente migliorate dalla frequente deframmentazione, è necessario controllare le prestazioni del sottosistema di I/O.

Se si desidera deframmentare un indice associato a una determinata tabella anziché l'intero database, è possibile riorganizzare o ricostruire l'indice.

  • La riorganizzazione di un indice specifica che il livello foglia dell'indice è stato riorganizzato. Inoltre deframmenta e compatta gli indici cluster e non cluster nelle tabelle e visualizzazioni, e può significativamente migliorare le prestazioni di analisi dell'indice. La riorganizzazione di un indice utilizza lo spazio esistente allocato per l'indice e viene sempre eseguita online in modo che la tabella sottostante sia disponibile per gli utenti.

  • La ricostruzione di un indice specifica che è stata creata una copia completamente nuova dell'indice e, pertanto, l'operazione richiede uno spazio aggiuntivo sufficiente per creare la nuova copia dell'indice prima di rimuovere l'indice frammentato preesistente. La ricostruzione migliora le prestazioni delle analisi e delle ricerche dell'indice. È possibile ricostruire l'indice con una online o offline.

Il metodo appropriato da utilizzare per deframmentare un indice dipende dal livello di frammentazione dell'indice e dalla possibilità o meno di procedere online. Nella tabella seguente vengono descritti i metodi di deframmentazione consigliati per i diversi livelli di frammentazione.

 

Livello di frammentazione Metodo di deframmentazione

Fino al 10%

Riorganizzazione (online)

Dal 10 al 75%

Ricostruzione (online)

75%

Ricostruzione (offline)

NotaNote
L'uso dei comandi DROP INDEX e CREATE INDEX non è supportato nei database di SharePoint 2010.

È possibile riorganizzare e ricostruire gli indici utilizzando l'istruzione ALTER INDEX di SQL Server 2008 o SQL Server 2005, oppure la Creazione guidata piano di manutenzione di SQL Server 2008 o SQL Server 2005. In questo articolo vengono illustrate solo le opzioni di SQL Server 2008 o SQL Server 2005 in dettaglio.

ALTER INDEX consente all'amministratore del database di eseguire operazioni di manutenzione per un indice di una tabella o visualizzazione. È possibile utilizzare questa istruzione per disabilitare, ricostruire e riorganizzare gli indici, nonché per impostare opzioni per l'indice. Nella maggior parte dei casi è possibile ricostruire gli indici mentre il database è online, per garantire agli utenti una maggiore disponibilità dei dati rispetto a una ricostruzione degli indici offline.

ImportanteImportant
In SQL Server 2000 sono supportati i comandi DBCC DBREINDEX e DBCC INDEXDEFRAG per la manutenzione degli indici. Questi comandi sono invece stati deprecati a partire da SQL Server 2005 e verranno rimossi in una versione futura di SQL Server. Non utilizzare questi comandi per eseguire la manutenzione dell'indice in un database di SharePoint 2010.
NotaNote
Quando si ricostruisce un indice offline, alla tabella viene applicato un blocco condiviso per impedire tutte le operazioni ad eccezione di SELECT. I database di SharePoint 2010 utilizzano in particolar modo gli indici cluster. Quando si ricostruisce un indice cluster offline, alla tabella viene applicato un blocco esclusivo per impedirne l'accesso agli utenti.

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

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

Per migliorare ulteriormente l'archiviazione dei dati e le prestazioni dell'indice, utilizzare il fattore di riempimento. Quando si creano o si ricostruiscono gli indici, il valore del fattore di riempimento (da 1 a 100) determina la percentuale di spazio che può essere riempita con dati in ogni pagina del livello foglia. Lo spazio restante viene riservato alla crescita futura. In molti casi, il livello del fattore di riempimento predefinito 0 valido per l'intero server (ogni pagina può essere riempita fino al 100%) è ottimale. Per SharePoint 2010 è tuttavia ottimale un'impostazione valida per l'intero server di 80 per supportare la crescita e ridurre al minimo la frammentazione.

NotaNote
Non è consigliabile impostare il fattore di riempimento per singole tabelle o indici. Sebbene questo sia il metodo consigliato per i database SQL Server non di SharePoint, i test dimostrano che i database di SharePoint funzionano meglio con un fattore di riempimento del 80%.

Per visualizzare il valore del fattore di riempimento per uno o più indici, eseguire una query nella vista del catalogo sys.indexes. Per ulteriori informazioni sulla vista, vedere sys.indexes (Transact-SQL).

Per configurare il valore del fattore di riempimento per l'intero server, utilizzare la stored procedure sp_configure. Per ulteriori informazioni, vedere spconfigure (Transact-SQL).

In SQL Server 2008 e SQL Server 2005, è possibile ridurre ogni file in un database (con estensioni .mdf, .ldf e .ndf) per rimuovere le pagine inutilizzate e recuperare spazio su disco. I database di SharePoint 2010 non riducono automaticamente i file di dati, sebbene molte attività creino spazio inutilizzato nel database. Tra le attività che possono creare spazio inutilizzato è inclusa l'esecuzione del comando Move-SPSite di Windows PowerShell e l'eliminazione di documenti, raccolte di documenti, elenchi, voci di elenco e siti.

Figura 3. Allocazione del database

Allocazione di database

 

Lo spazio libero viene rilasciato solo dalla fine del file, ad esempio, un database del contenuto di 60 GB con una dimensione di destinazione specificata pari a 40 GB libera quanto più spazio possibile dai 20 GB finali del file di database. Se nei 20 GB finali sono incluse pagine in uso, essere verranno successivamente riposizionate nei 40 GB iniziali del file che verranno conservati. È possibile ridurre singoli file del database o in gruppo.

Eseguire le operazioni di riduzione solo raramente dopo aver eseguito un'operazione che rimuove una significativa quantità di dati da un database e se non si prevede di utilizzare tale spazio libero in futuro. Le operazioni di riduzione dei file di dati causano una notevole frammentazione dell'indice e richiedono un uso molto intensivo delle risorse. Alcuni esempi in cui può essere necessario ridurre i file del database sono quando si riposiziona un numero elevato di raccolte siti da un database del contenuto a un altro o quando si elimina un elenco di grandi dimensioni. Queste operazioni possono creare grandi quantità di spazio inutilizzato. I file di database possono essere ridotti solo fino al punto in cui non rimane altro spazio libero. Di conseguenza un database del contenuto in cui raramente si eliminano dati potrebbe non trarre un vantaggio significativo da una riduzione e probabilmente registrerà un calo delle prestazioni quando dovrà crescere per accogliere altri dati senza disposizioni specifiche. Per ulteriori informazioni, vedere Inizializzazione di file di database.

Poiché la riduzione causa la frammentazione dell'indice, è sconsigliabile ridurre i file del database regolarmente. È invece consigliabile ridurre tali file solo se sono presenti grandi quantità di spazio inutilizzato dovute a operazioni che incidono significativamente sulla quantità relativa di spazio utilizzato in un database. Se possibile, evitare di ridurre un database.

Se è tuttavia necessario ridurre un database, utilizzare le istruzioni seguenti:

  • Non ridurre automaticamente i database o configurare un piano di manutenzione che preveda la riduzione a livello di programmazione dei database.

  • Ridurre un database solo quando gli utenti o gli amministratori rimuovono almeno il 50% del contenuto e non si prevede di riutilizzare lo spazio inutilizzato.

  • Ridurre solo i database del contenuto. Gli utenti e gli amministratori non eliminano una quantità di dati sufficiente dal database di configurazione, dal database del contenuto amministrativo e dai vari database delle applicazioni di servizio tale da lasciare uno spazio libero significativo.

  • La riduzione dei database è un'operazione che richiede un uso molto intensivo delle risorse. Se pertanto è assolutamente necessario ridurre un database, valutare attentamente quando pianificare tale operazione.

  • Dopo aver ridotto un database, gli indici in esso inclusi vengono frammentati. Utilizzare ALTER INDEX… REORGANIZE per risolvere la frammentazione. Se il sistema non è configurato per consentire l'inizializzazione immediata del file, ridurre il database a una dimensione che consenta di gestire la crescita a breve termine prevista. Per ulteriori informazioni, vedere Inizializzazione di file di database.

È possibile ridurre manualmente database e file di database per recuperare spazio eseguendo le istruzioni DBCC SHRINKFILE e DBCC SHRINKDATABASE in SQL Server 2008 o SQL Server 2005 Management Studio.

Per ulteriori informazioni sui motivi per cui la riduzione di un database peggiora le prestazioni e deve essere evitata a meno che non sia assolutamente necessaria, vedere Why you should not shrink your data files (le informazioni potrebbero essere in lingua inglese).

Il comando DBCC SHRINKDATABASE riduce i file di dati e di registro per un database specifico. Per ridurre singoli file, utilizzare DBCC SHRINKFILE.

Il comando DBCC SHRINKDATABASE utilizza la sintassi seguente.

DBCC SHRINKDATABASE 
( 'database_name' | database_id | 0 
     [ ,target_percent ] 
     [ , { NOTRUNCATE | TRUNCATEONLY } ] 
)
[ WITH NO_INFOMSGS ]

database_name | database_id | 0 specifica il nome o l'ID del database. Per selezionare il database corrente, utilizzare 0.

target_percent indica la percentuale di spazio libero che si desidera mantenere dopo la riduzione del database.

NOTRUNCATE compatta i dati nei file di dati spostando le pagine allocate dalla fine del file alle pagine non allocate nella parte iniziale del file.

TRUNCATEONLY rilascia tutto lo spazio libero alla fine del file al sistema operativo senza spostare alcuna pagina nel file.

NotaNote
L'utilizzo dell'opzione TRUNCATEONLY non è supportato per i database del contenuto di SharePoint 2010.

Per ulteriori informazioni, vedere DBCC SHRINKDATABASE (Transact-SQL).

Il comando DBCC SHRINKFILE utilizza la sintassi seguente.

DBCC SHRINKFILE 
(
     { 'file_name' | file_id } 
    { [ , EMPTYFILE ] 
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
    }
)
[ WITH NO_INFOMSGS ]

file_name | file_id specifica il nome o l'ID del file.

EMPTYFILE esegue la migrazione di tutti i dati dal file specificato ad altri fine nello stesso gruppo.

ImportanteImportant
L'utilizzo dell'opzione EMPTYFILE non è supportato per i file di database di SharePoint 2010.

target_size è la dimensione di destinazione per il file in MB, indicata come un numero intero.

NOTRUNCATE compatta i dati nei file di dati spostando le pagine allocate dalla fine del file alle pagine non allocate nella parte iniziale del file.

TRUNCATEONLY rilascia tutto lo spazio libero alla fine del file al sistema operativo senza spostare alcuna pagina nel file.

ImportanteImportant
L'utilizzo dell'opzione TRUNCATEONLY non è supportato per i database del contenuto di SharePoint 2010.

Per ulteriori informazioni, vedere DBCC SHRINKFILE (Transact-SQL).

Eseguire la procedura seguente.

Per ridurre un database utilizzando SQL Server 2008 Management Studio
  1. Sulla barra delle applicazioni fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server 2008 e quindi SQL Server Management Studio.

  2. In Esplora oggetti connettersi a un'istanza del Motore di database di SQL Server 2008 e quindi espandere tale istanza.

  3. Espandere Database, fare clic con il pulsante destro del mouse sul database che si desidera ridurre e scegliere Attività, Compatta, File.

  4. Selezionare il tipo di file e il nome del file.

  5. Selezionare Riorganizza i file prima di rilasciare lo spazio inutilizzato. È inoltre necessario impostare il valore Compatta file. Selezionare questa opzione per rilasciare eventuale spazio inutilizzato nel file al sistema operativo e riposizionare righe nelle pagine non allocate.

  6. Fare clic su OK.

È possibile applicare a livello di programmazione molte delle operazioni di manutenzione del database esaminate in questo articolo implementando piani di manutenzione di SQL Server. I piani di manutenzione possono automatizzare e pianificare le attività essenziali per proteggere i dati. Utilizzando i piani di manutenzione in SQL Server 2008 o SQL Server 2005, un amministratore può pianificare operazioni quali le verifiche di coerenza dei database, la riorganizzazione di indici o la ricreazione degli indici. Per ulteriori informazioni, vedere le risorse seguenti:

Per configurare un piano di manutenzione di un database di SQL Server 2008
  1. Sulla barra delle applicazioni fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server 2008 e quindi SQL Server Management Studio.

  2. In Esplora oggetti connettersi a un'istanza del Motore di database di SQL Server 2008 e quindi espandere tale istanza.

  3. Scegliere Gestione, fare clic con il pulsante destro del mouse su Piani di manutenzione e quindi scegliere Creazione guidata piano di manutenzione.

  4. Fare clic su Avanti fino a raggiungere la pagina Selezione proprietà piano.

    Figura 4. Pagina Selezione proprietà piano

    Pagina Selezione proprietà piano
  5. Nei campi Nome e Descrizione specificare un nome e una descrizione.

  6. Scegliere se configurare uno o più piani di manutenzione.

    • Per configurare un singolo piano di manutenzione, selezionare Singola pianificazione per l'intero piano o nessuna pianificazione.

    • Per configurare più piani di manutenzione con attività specifiche, selezionare Pianificazioni separate per ogni attività.

    Se si dispone di un ambiente contenente almeno 10 database del contenuto o oltre 200 GB di contenuto, è consigliabile configurare piani di manutenzione separati per garantire specificità appropriate e ottimizzare la manutenzione ordinaria.

    Se si configurano più piani di manutenzione per un database, specificare un nome o una descrizione che consente di differenziare i piani e i relativi scopi, incluse le rispettive pianificazioni.

  7. Fare clic su Modifica per impostare una pianificazione per uno o più piani.

    Verrà visualizzata la finestra di dialogo Proprietà pianificazione processo.

    Figura 5. Finestra di dialogo Proprietà pianificazione processo

    Finestra di dialogo Proprietà pianificazione processo
  8. Completare la pianificazione, fare clic su OK e quindi su Avanti.

  9. Nella pagina Selezione attività di manutenzione selezionare le attività di manutenzione da includere nel piano e quindi fare clic su Avanti.

    Figura 6. Pagina Selezione attività di manutenzione

    Pagina Selezione attività di manutenzione

    Tenere presente quanto segue:

    • Un piano di manutenzione deve includere la riorganizzazione o la ricostruzione dell'indice, non entrambe le operazioni.

    • Un piano di manutenzione non deve mai includere la riduzione di un database.

    • Per determinare la durata di ogni attività, verificare le singole attività prima di combinarle in un unico piano. Potrebbe essere necessario definire vari piani di manutenzione su pianificazioni separate per consentire il completamento delle attività in orari che non influiscano negativamente sugli utenti.

    • L'attività Elimina file manutenzione rimuove i file rimasti dopo una manutenzione pianificata.

  10. Nella pagina Selezione ordine attività di manutenzione modificare l'ordine delle attività del piano di manutenzione, se necessario. Selezionare un'attività e quindi fare clic su Sposta su o Sposta giù. Dopo aver ordinato le attività, fare clic su Avanti.

    NotaNote
    Se i database sono molto estesi, può essere utile creare un piano di manutenzione separato che verifichi l'integrità del database con una frequenza minore rispetto alla manutenzione dell'indice.

    Figura 7. Pagina Selezione ordine attività di manutenzione

    Pagina Selezione ordine attività di manutenzione
  11. La procedura guidata illustra quindi come impostare i dettagli per ogni attività. Nella pagina Definizione attività Controlla integrità database selezionare i database di cui verificare l'integrità e fare clic su Avanti.

    NotaNote
    È possibile verificare senza problemi l'integrità di tutti i database di SharePoint 2010.

    Figura 8. Pagina Definizione attività Controlla integrità database

    Pagina Definizione attività Controlla integrità database
  12. Nell'elenco Database della pagina Definizione attività Riorganizza indice specificare i database di cui si desidera riorganizzare gli indici, selezionare la casella di controllo Compatta oggetti di grandi dimensioni e fare clic su Avanti.

    Figura 9. Pagina Definizione attività Riorganizza indice

    Pagina Definizione attività Riorganizza indice
  13. Nella pagina Definizione attività Ricostruisci indice, se si è scelto di ricostruire gli indici anziché riorganizzarli, specificare i database nell'elenco Database.

  14. Selezionare Modifica percentuale di spazio disponibile per pagina, immettere 80 e quindi fare clic su Avanti.

    Modifica percentuale di spazio disponibile per pagina imposta il fattore di riempimento per il database.

    Figura 10. Pagina Definizione attività Ricompila indice

    Pagina Definizione attività Ricompila indice
  15. Nella pagina Definizione attività Elimina file manutenzione specificare i valori richiesti e quindi fare clic su Avanti.

    SuggerimentoTip
    È consigliabile eliminare i report in formato testo del piano di manutenzione.

    Figura 11. Pagina Definizione attività Pulizia file manutenzione

    Pagina Definizione attività Pulizia file manutenzione
  16. Nella pagina Selezione opzioni report selezionare Scrivi report in un file di testo, scegliere una posizione per i file e quindi fare clic su Avanti fino a completare la procedura guidata.

    Figura 12. Selezione opzioni report

    Selezione opzioni report

Una manutenzione coerente dei database che ospitano SharePoint 2010 può migliorare in modo significativo l'integrità e le prestazioni del sistema.

Prima di implementare le operazioni e i piani di manutenzione, verificare di disporre di copie di backup affidabili per tutti i database.

Prima di implementare un piano di manutenzione o specifiche operazioni di manutenzione da eseguire coerentemente, verificare l'impatto delle operazioni sul sistema e il tempo necessario per eseguirle.

Per quanto possibile, impostare l'esecuzione di qualsiasi operazione o piano di manutenzione durante periodi di scarsa attività in modo da ridurre le conseguenze in termini di prestazioni per gli utenti.

Mostra: