È possibile eseguire due comandi DBCC INDEXDEFRAG contemporaneamente, ciascuno su una tabella diversa?


9

Attualmente sto eseguendo uno script che esegue un DBCC INDEXDEFRAG su ogni tabella in un database SQL Server 2005, una tabella alla volta. L'uso di DBCC DBREINDEX anziché INDEXDEFRAG non è un'opzione, a causa di vincoli di spazio e requisiti di uptime.

Ho notato che ci vuole molto tempo per deframmentare alcune tabelle. Ad esempio, se esamino la vista di gestione dinamica "sys.dm_exec_requests", vedo che il seguente INDEXDEFRAG sta sfornando l'indice cluster di una tabella che ha un table_id di 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

So che ci vorrà molto tempo prima che il processo di deframmentazione venga completato. Tralasciando il fatto che lo script attualmente in esecuzione alla fine deframmenterà tutte le tabelle, c'è qualche danno in me che eseguo manualmente un altro DBCC INDEXDEFRAG sull'indice cluster di un'altra tabella mentre viene eseguito il comando corrente? Entrambe le tabelle verranno effettivamente deframmentate contemporaneamente se lo faccio?

Risposte:


15

Sì, puoi farlo per più tabelle. Non puoi farlo per più indici sulla stessa tabella: ho inventato un nuovo sottobresource di blocco dell'indice per impedirlo. Stesso comportamento in ALTER INDEX ... RIORGANIZZARE con cui l'ho sostituito nel 2005.

Grazie


2
Non puoi ottenere una risposta più accurata di quella della persona che l'ha scritta! Non dimenticare il carico di I / O associato all'esecuzione di più ricostruzioni o rimbalzi contemporaneamente e assicurati di utilizzare ALTER INDEX anziché il comando DBCC in futuro.
AndrewSQL,

D'accordo, non so come sarebbe possibile ottenere una risposta più accurata su questo particolare problema rispetto a quella di Paul Randal. Grazie Paolo
RelentlessMike

6

Si noti che DBCC INDEXDEFRAG e DBREINDEX sono obsoleti e sostituiti da ALTER INDEX:

Importante

Questa funzionalità verrà rimossa in una versione futura di Microsoft SQL Server. Non utilizzare questa funzione nel nuovo lavoro di sviluppo e modificare le applicazioni che attualmente utilizzano questa funzionalità il più presto possibile. Utilizzare invece ALTER INDEX. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

Per quanto riguarda l'esecuzione simultanea di due, dipende dal layout del file. Se si trovano tutti sullo stesso / i disco / i, probabilmente rallenterai l'uno con l'altro perché combatteranno l'uno contro l'altro per l'I / O. Sarebbe meglio REORG o REVISIONE solo quando necessario. Dai un'occhiata allo script di Michelle Ufford qui per una soluzione automatizzata: http://sqlfool.com/2010/04/index-defrag-script-v4-0/


Grazie Eric. In questo caso particolare, il database è distribuito su più file di dati, su partizioni diverse e su una SAN IBM DS8300. Quindi penso che starò bene per quanto riguarda l'I / O.
RelentlessMike
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.