SQLServerITA

SQL Server e non solo

  • marzo: 2012
    L M M G V S D
    « Feb   Apr »
     1234
    567891011
    12131415161718
    19202122232425
    262728293031  
  • Blog Stats

    • 16,179 hits
  • Inserisci il tuo indirizzo e-mail per iscriverti a questo blog e ricevere notifiche di nuovi messaggi per e-mail.

    Segui assieme ad altri 6 follower

SQL Server 2008: velocizzare la cancellazione di milioni di righe disabilitando gli indici

Posted by belthazor78 su 18 marzo 2012


Si sa che in alcune fasi (specialmente di inserimento dati) la rimozione degli indici può portare ad enormi incrementi di performance. Non tutti sanno che è possibile ottenere quasi gli stessi miglioramenti anche disabilitando gli indici su una tabella.

E questo vale anche nelle fasi di cancellazione di molti dati di una tabella. In questo piccolo post vedremo come è possibile migliorare le perfromance di cancellazione. Vi ricordo che effettuare il classico DELETE su una tabella con milioni di righe può essere un’operazione molto lunga: per ovviare a questo problema c’è il classico comando TRUNCATE…ma non sempre può essere utilizzato (per esempio se ci sono delle chiavi referenziate).

Che fare? Ecco che ci viene in soccorso la possibilità, tra tante, di disabilitare gli indici.

Supponiamo di avere una tabella con un bel numero di dati: circa 15 milioni di record.

Durante le fasi di test si è soliti provare svariate volte le query di popolamento; ma dopo il popolamento serve anche la possibilità di cancellare i dati…vediamo come si comporta una DELETE normale su una tabella di 15 milioni di righe con 4/5 indici:

Bhè come vedete dopo 15 minuti la query è ancora in esecuzione. Il test è stato fatto su un PC modesto quindi nulla di strano.

Ora, invece, proviamo ad eseguire la stessa cancellazione ma disabilitando gli indici che si possono disabilitare (alcuni non vengono disabilitati se utilizzati dal motore di SQL che ritornerà a video un errore del tipo “The query processor is unable to produce a plan because….etc…etc…”).

Il comando sarà semplice: disabilitare gli indici, eseguire la cancellazione e riabilitare gli indici.

Dopo solo 1 minuto e 26 secondi la tabella con 15 milioni di righe è stata ripulita senza problemi.

Come avete visto la disabilitazione di alcuni indici può portare ad enormi vantaggi senza dover ricorrere al comando TRUNCATE che richiede, in alcuni casi, la rimozione di tutte le chiavi referenziate…il che potrebbe non essere molto comodo. Unica accortezza sarà quella di riabilitare gli indici disabilitati e prevederla anche  in caso di errori nell’esecuzione dei vari script.

Una Risposta to “SQL Server 2008: velocizzare la cancellazione di milioni di righe disabilitando gli indici”

  1. Greate post. Keep posting such kind of info on your blog.
    Im really impressed by it.
    Hello there, You’ve done an incredible job. I will definitely digg
    it and for my part suggest to my friends. I am sure they’ll be benefited from
    this web site.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: