none
TIMEOUT ALLA MODIFICA TABELLA RRS feed

  • Domanda

  • Ho un database sql 2005. In una tabella ho un campo di tipo nvarchar(20). Provo a modificare la lunghezza a nvarchar(25) e salvo ma mi da timeout. Non è problema di server perché per il resto funziona tutto correttamente e senza problemi. Dov'è il problema?
    mercoledì 27 luglio 2011 15:42

Risposte

  • Operazioni come quella di modificare un campo o inserire un campo nel mezzo della struttura di una tabella dal SQL Server Management Studio "dietro le quinte" si traducono nell'esecuzione di una serie di comandi T-SQL che, in relazione alla dimensione della tabella o al tipo di operazione, possono comportare anche tempi molto lunghi o addirittura timeout, come succede a te.

    Se provi ad utilizzare SQL Server Profiler per vedere cosa fa SSMS dietro le quinte, vedrai che per la sola operazione di modifica della lunghezza del campo vengono eseguite una serie di istruzioni che leggono i metadati, creano una tabella temporanea con la nuova struttura, ci copiano dentro i dati della vecchia struttura (con blocco esclusivo della tabella), eliminano la vecchia tabella e rinominano la nuova... E se ci sono tanti dati nella tabella è facile che vada in timeout...

    Per risolvere il problema puoi modificare la struttura della tabella con l'istruzione ALTER TABLE in questo modo:

    ALTER TABLE tabella ALTER COLUMN campo nvarchar(25).

    Altra considerazione: non usare campi unicode (quelli con la n davanti al nome) se non hai la necessità di memorizzare caratteri diversi dal set latino: occupano il doppio dei caratteri normali e quindi impattano su memoria e spazio disco...

    HTH


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD ..::.. Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    • Contrassegnato come risposta Stefano Fox venerdì 29 luglio 2011 09:29
    mercoledì 27 luglio 2011 16:13

Tutte le risposte

  • Operazioni come quella di modificare un campo o inserire un campo nel mezzo della struttura di una tabella dal SQL Server Management Studio "dietro le quinte" si traducono nell'esecuzione di una serie di comandi T-SQL che, in relazione alla dimensione della tabella o al tipo di operazione, possono comportare anche tempi molto lunghi o addirittura timeout, come succede a te.

    Se provi ad utilizzare SQL Server Profiler per vedere cosa fa SSMS dietro le quinte, vedrai che per la sola operazione di modifica della lunghezza del campo vengono eseguite una serie di istruzioni che leggono i metadati, creano una tabella temporanea con la nuova struttura, ci copiano dentro i dati della vecchia struttura (con blocco esclusivo della tabella), eliminano la vecchia tabella e rinominano la nuova... E se ci sono tanti dati nella tabella è facile che vada in timeout...

    Per risolvere il problema puoi modificare la struttura della tabella con l'istruzione ALTER TABLE in questo modo:

    ALTER TABLE tabella ALTER COLUMN campo nvarchar(25).

    Altra considerazione: non usare campi unicode (quelli con la n davanti al nome) se non hai la necessità di memorizzare caratteri diversi dal set latino: occupano il doppio dei caratteri normali e quindi impattano su memoria e spazio disco...

    HTH


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD ..::.. Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    • Contrassegnato come risposta Stefano Fox venerdì 29 luglio 2011 09:29
    mercoledì 27 luglio 2011 16:13
  • Grazie per il suggerimento. Comunque alla fine era un problema del server. A lavoro c'è una versione del server un po' datata ovvero la 2000 personal edition che ha workload governor che degrada le prestazioni del database in caso di più di 8 query concorrenti.

    La cosa strana è che di solito quando entra in funzione il workload governor si blocca completamente il database invece questa volta permetteva di effettuare ricerche sul database ma non di fare operazioni di inserimento e modifica.

    Da cosa dipende?

    giovedì 28 luglio 2011 07:33
  • Grazie per il suggerimento. Comunque alla fine era un problema del server. A lavoro c'è una versione del server un po' datata ovvero la 2000 personal edition che ha workload governor che degrada le prestazioni del database in caso di più di 8 query concorrenti.

    La cosa strana è che di solito quando entra in funzione il workload governor si blocca completamente il database invece questa volta permetteva di effettuare ricerche sul database ma non di fare operazioni di inserimento e modifica.

    Da cosa dipende?


    Ciao Stefano,

    Danilo ha spiegato perfettamente come si comportano i tool grafici offerti da SQL Server (EM o SSMS).

    Il comando di ALTER TABLE che ti ha proposto evita tutto questo inutile lavoro e viene eseguito in un battibaleno.

    Tu come eseguivi l'estensione della colonna? Via Enterprise Manager o via Query Analyzer tramite ALTER TABLE?

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    giovedì 28 luglio 2011 19:38
    Moderatore
  • Via enterprise manager
    venerdì 29 luglio 2011 09:28
  • Via enterprise manager


    Ecco, fallo via QA tramite ALTER TABLE...ALTER COLUMN e vedrai che non oterrai alcun timeout.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    venerdì 29 luglio 2011 11:58
    Moderatore