Le statistiche del database obsolete riducono le prestazioni di SharePoint Server

Informazioni sulle statistiche del database

Le statistiche per l'ottimizzazione delle query sono oggetti che contengono informazioni statistiche sulla distribuzione dei valori in una o più colonne di una tabella o di una vista indicizzata. Query Optimizer usa queste statistiche per stimare la cardinalità o il numero di righe nel risultato della query. Queste stime di cardinalità consentono a Query Optimizer di creare un piano di query di alta qualità.

Ad esempio, Query Optimizer può migliorare le prestazioni delle query usando stime di cardinalità per selezionare l'operatore index seek anziché l'operatore di analisi dell'indice a elevato utilizzo di risorse. In caso contrario, le statistiche obsolete possono ridurre le prestazioni delle query usando piani di query inefficienti.

Le distribuzioni di SharePoint aziendali di grandi dimensioni devono avere piani di manutenzione del database per aggiornare le statistiche del database nei database del contenuto che risiedono in Microsoft SQL Server. I clienti non devono basarsi solo sui processi di manutenzione del database basati su SharePoint per eseguire queste attività. Per ulteriori informazioni, vedere Procedure consigliate per SQL Server in una server farm di SharePoint.

Sintomi

Quando le statistiche del database diventano obsolete, le installazioni di SharePoint Server possono riscontrare uno o più dei sintomi seguenti:

  • Tempi di caricamento lenti e riduzione delle prestazioni che possono generare un errore HTTP 500 quando si apre una pagina del sito

  • Prestazioni più lente che generano messaggi di errore come l'esempio seguente:

    Service unavailable  
    Unknown SQL Exception 53  
    Server Error in '/' Application Runtime Error
    
  • L'esecuzione di ricerche per indicizzazione causa prestazioni impreviste di SQL Server, blocco del database e blocco

  • Processi timer a esecuzione prolungata, ad esempio i processi di elaborazione dei dati di utilizzo di Microsoft SharePoint Foundation che richiedono progressivamente più tempo per terminare durante ogni iterazione.

  • Impossibilità di aprire un sito di SharePoint e un messaggio di errore simile al seguente:

    Unexpected System.Web.HttpException: Request timed out   
    
  • Timeout del rendering del sito durante il caricamento della navigazione e il seguente messaggio di errore:

    PortalSiteMapProvider was unable to fetch children for node   
    
  • Utilizzo elevato della CPU nel server che esegue SQL Server quando elabora query di SharePoint

Motivo

Questi problemi possono essere causati da statistiche di database obsolete. SharePoint esegue un processo timer ogni giorno per aggiornare le statistiche del database usando la procedura SQL proc_updatestatistics. Tuttavia, per vari motivi, questo processo timer potrebbe non essere completato o potrebbe non aggiornare tutte le tabelle in modo coerente. Ad esempio, se un backup viene eseguito sul database del contenuto da SQL Server contemporaneamente al processo timer di SharePoint, il processo non continuerà.

Quando viene completato il processo timer di SharePoint che aggiorna le statistiche, è possibile scrivere gli eventi seguenti nei log ULS:

  • e9bf "Si è verificato un errore durante l'aggiornamento delle statistiche nel database, {0}"
  • cm1y "Aggiornamento delle statistiche nel database, {0}"
  • dbl2 "Ignorare l'aggiornamento delle statistiche del database {0} perché il relativo stato è {1}"
  • cm1x "Aggiornamento delle statistiche in tutti i database in {0}"

Se queste condizioni non vengono monitorate attentamente e se non vengono eseguite azioni correttive, le statistiche del database diventano obsolete e si verificano problemi di prestazioni di SharePoint.

Risoluzione

Per evitare questi sintomi e potenziali interruzioni del servizio, è necessario implementare i piani di manutenzione di SQL Server per mantenere aggiornate le statistiche del database del contenuto di SharePoint usando l'opzione FULLSCAN. Per altre informazioni, vedere Statistiche sugli indici.

Quando si implementa il piano di manutenzione di SQL Server per aggiornare le statistiche nei database di SharePoint, non è necessario disabilitare il processo da SharePoint. Tuttavia, dal momento che queste attività di manutenzione eseguono funzioni simili da entrambe le origini, è consentito disabilitare la regola "database usati da SharePoint hanno statistiche sugli indici obsolete" dell'analizzatore dello stato di salute dalla farm di SharePoint se i database vengono gestiti da SQL. Per altre informazioni su come gestire il processo di aggiornamento dell'indice da SharePoint Server, vedere Database utilizzati da SharePoint con statistiche sugli indici obsolete (SharePoint 2013).

Altre informazioni

L'aggiornamento delle statistiche dei database del contenuto di SharePoint, usando l'opzione FULLSCAN, su base giornaliera da SQL Server è una procedura consigliata. Per altre informazioni, vedere Procedure consigliate per SQL Server in una farm di SharePoint Server e manutenzione del database per SharePoint Foundation 2010.

Tuttavia, se la farm di SharePoint riscontra problemi di prestazioni a causa di statistiche obsolete, è possibile usare le informazioni seguenti come passaggio di mitigazione una tantum per risolvere questo problema.

Per visualizzare le informazioni sulle statistiche del database da un database specifico, eseguire la query seguente:

-- Checking the DB Stats  
select a.id as 'ObjectID', isnull(a.name,'Heap') as 'IndexName', b.name as 'TableName',   
stats_date (id,indid) as stats_last_updated_time   
from sys.sysindexes as a   
inner join sys.objects as b   
on a.id = b.object_id   
where b.type = 'U'  

Per altre informazioni sulla revisione delle statistiche del database, vedere DBCC SHOW_STATISTICS.

Per aggiornare le statistiche del database in un database singolo che usa l'opzione FULLSCAN, eseguire la query seguente:

-- Update DB Stats  
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'  

Nota importante L'opzione "sp_MSforeachtable" è una procedura non documentata fornita "così come è" e deve essere usata solo per attenuare il problema immediato. Non è consigliabile utilizzare questa procedura come parte di un piano di manutenzione regolare. Vedere invece la documentazione UPDATE STATISTICS (Transact-SQL) su come implementare un piano per UPDATE STATISTICS, usando l'opzione FULLSCAN.

A seconda del modo in cui sono diventate obsolete le statistiche del database, potrebbe essere necessario cancellare la cache del piano di query eseguendo il comando DBCC FREEPROCCACHE dopo aver aggiornato le statistiche del database. La sintassi e gli argomenti per questa procedura sono disponibili in DBCC FREEPROCCACHE (Transact-SQL). In questo modo, le nuove query usano il piano di esecuzione ottimale dopo l'aggiornamento delle statistiche del database. Ad esempio, vedere la query seguente:

-- Remove all elements from the plan cache  
DBCC FREEPROCCACHE  

Importante

L'esecuzione del comando DBCC FREEPROCCACHE cancella la cache per tutti i piani di query nell'istanza di SQL. Questo comando deve essere ben compreso prima di eseguirlo durante l'orario di produzione.

Se il comando DBCC FREEPROCCACHE non è stato eseguito dopo l'aggiornamento delle statistiche del database obsolete, le query con piani di esecuzione inefficienti possono comunque risiedere nella cache e essere usate. In questo caso, forzare una ricompilazione sulla stored procedure specificata utilizzando la stored procedure (vedere sp_recompile (Transact-SQL)). Ad esempio, consulta la seguente query:

USE SP2013_Content_DB  
GO  
sp_recompile proc_getwebnavstruct  

L'esecuzione del comando sp_recompile insieme ai parametri di routine, funzione o tabella è destinata a un singolo elemento nella cache per la rimozione senza influire sull'istanza.

Hai ancora bisogno di aiuto? Passare alla community di SharePoint.