Aggiornamento delle statistiche parallele


14

In SQL Server 2008 o versioni successive, è UPDATE STATISTICS WITH FULLSCANun'operazione a thread singolo o può utilizzare il parallelismo? Che ne dici di aggiornare le statistiche con il campionamento predefinito - può usare il parallelismo? Non vedo un'opzione che specifica MAXDOPcon le statistiche di aggiornamento.

Risposte:


22

L'aggiornamento delle statistiche parallele è disponibile dal SQL Server 2005. È documentato nell'articolo TechNet "Statistiche utilizzate dallo Strumento per ottimizzare le query in Microsoft SQL Server 2005" :

Estratto dell'articolo

Quando viene eseguita una scansione completa (esplicitamente richiesta o meno) la query interna generata per la raccolta dei dati ha la forma generale:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Nota il MAXDOPsuggerimento lì (anche se un utente non può specificare il suggerimento manualmente). Quando vengono raccolte statistiche campionate, la query interna utilizza la TABLESAMPLEclausola, che impedisce il parallelismo. Il motore genera anche un MAXDOP 1suggerimento sulla query interna, che è un po 'ridondante.

Se è necessario ridurre il parallelismo, è MAXDOPpossibile sostituire il suggerimento nella query interna utilizzando Resource Governor (solo Enterprise).

SQL Server 2016 aggiunge parallelo campionato aggiornamento delle statistiche.


1

A partire da SQL Server 2016 SP2 è possibile utilizzare l' MAXDOPopzione.

L'aggiornamento aggiunge il supporto per l'opzione MAXDOP per le istruzioni CREATE STATISTICS e UPDATE STATISTICS :

Questo aggiornamento aggiunge il supporto per l'opzione MAXDOP per le istruzioni CREATE STATISTICS e UPDATE STATISTICS in Microsoft SQL Server 2016 e 2017. Ciò consente di sovrascrivere l'impostazione predefinita per il massimo grado di parallelismo (MAXDOP) specificato a livello di database o server.

Nota: il grado di parallelismo risultante è limitato dall'impostazione MAX_DOP del gruppo di carico di lavoro se si utilizza Resource Governor.

Ad esempio, supponiamo che la tabella Sales.SalesOrderDetail sia utilizzata e su di essa siano già state create diverse statistiche. In questo caso, il seguente script aggiorna ogni statistica con un grado di parallelismo pari a 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICS non ha alcun tipo di parallelismo interno. Non importa se si esegue con FULLSCAN o CAMPIONAMENTO. Ovviamente, è possibile eseguire contemporaneamente più comandi UPDATE STATISTICS, ciascuno su una connessione diversa, attraverso più processi SQL Agent o altri congegni. A seconda della tua situazione esatta con hardware e dati, potresti scoprire che semplicemente reindicizzare le tabelle è più veloce di AGGIORNARE LE STATISTICHE con FULLSCAN e forse un'opzione migliore.


Mi scuso per il mark down ma non hai idea di cosa stai parlando. Da questo white paper msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "Raccolta di statistiche parallele per fullscan: Per le statistiche raccolte con fullscan, la creazione di un singolo oggetto statistico può essere eseguita in parallelo per tabelle non partizionate e partizionate ". Tuttavia non riesco a vedere il parallelismo quando uso UPDATE STATISTICS con la scansione completa sulla tabella di 30 milioni di righe
SQL Learner

Inoltre, update stat accetta il blocco della stabilità dello schema, quindi se si eseguono altre statistiche di aggiornamento attenderà il completamento di uno precedente.
SQL Learner

4
@SQLLearner: nessuna offesa, ma indipendentemente dalla correttezza di questa risposta, perché fai questa domanda se hai letto quel white paper? Ti dà una risposta a tutto ciò che hai chiesto. Se non vedi parallelismo per il tuo scenario specifico, modifica la domanda per affermarlo e ogni altro dettaglio pertinente.
Jon Seigel,

Jon Seigel, dopo aver pubblicato la domanda, ha trovato e letto il white paper, tuttavia, non è sicuro se l'aggiornamento statico possa utilizzare il parallelismo.
SQL Learner

4
Hai ragione, rispetto al libro bianco e al sql2008. Ho appena letto quel libro bianco; le informazioni nella mia testa non sono aggiornate. Ho avuto molti problemi con sql2005 o forse anche sql2000 per quanto riguarda la reindicizzazione, AGGIORNAMENTO STATISTICHE, FULLSCAN vs. SAMPLE, tempo richiesto per i lavori e qualità stocastica dei dati nelle pagine delle statistiche. Immagino che tutto quel dolore sia l'acqua sotto il ponte ora. Direi che potresti eseguire STATISTICHE DI AGGIORNAMENTO su diverse tabelle in parallelo, ma questo sembra avere più problemi di quanti ne valga la pena e potresti avere troppa contesa I / O perché ne valga la pena.
darin strait
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.