SQLServerITA

SQL Server e non solo

  • gennaio: 2012
    L M M G V S D
    « Dic   Feb »
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
  • Blog Stats

    • 16,159 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 performance quick tips: TABLOCK

Posted by belthazor78 su 15 gennaio 2012


Un piccolo post a cui ne seguiranno degli altri riguardo a piccoli consigli da applicare ad una vostra query per migliorarne le performance. Non parlerò, come vedrete, dei soliti indici e statistiche (quelli già devono esserci e devono essere già deframmentati e aggiornati) e il database engine preso in considerazione è il 2008 R2.

Supponiamo di avere una semplice query che copia dei dati prelevati da più tabelle su un’unica tabella con un volume di dati pari a 5 milioni di righe.

L’esecuzione delle query allo stato “normale” richiede circa 4 minuti e 32 secondi. Un tempo considerevole anche se la query è stata eseguita su un computer abbastanza lento ma un “moving” di 5 milioni di righe da 4 tabelle in join con 15 milioni di dati su un’altra tabella dovrebbe essere un pò più veloce.

La query preleva e sposta circa 30 colonne di vario tipo e, in linea di massima, è come la seguente:

Ovviamente non ho potuto mettere tutti i campi con i loro reali nomi per sicurezza, ma la sostanza non cambia.

Ora, aggiungendo un semplice HINT come il WITH (TABLOCK) al comando di INSERT (quindi alla tabella dove dovranno essere inseriti i dati) le performance ne hanno risentito in positivo.

In pratica trasformando il comando INSERT INTO CIVICI… in INSERT INTO CIVICI WITH (TABLOCK)… ecco il risultato:

3 minuti e 20 secondi, cioè circa 1 minuto e 10 secondi più veloce con un semplice HINT aggiunto alla query senza dover modificare a livello di database alcun dato.

Un bel risparmio ovviamente, ma c’è da pagare qualche cosa in termini di usabilità della tabella in cui inseriamo i dati; l’Hint “WITH (TABLOCK)” infatti, crea un blocco totale della tabella di tipo “shared” in cui stiamo per copiare dei dati e questo ovviamente facilita gli inserimenti dei dati ma allo stesso tempo blocca eventuali operazioni di altre transazioni su quella tabella.

Maggior info per gli hint: http://msdn.microsoft.com/en-us/library/ms187373.aspx

Nelle prossime “puntate” vi descriverò altri piccole tips da applicare per poter ridurre i tempi di esecuzione di una query.

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: