Delete e timeout

martedì 25 luglio 2006 - 16.18

adima80 Profilo | Junior Member

Ciao sto facendo la DELETE di una mia tabella contenente circa 30000 record e continua ad andare in timeout il comando. Se provo a lanciare il comando da c# va in temout, usando il management studio di SQL Server 2005 invece non mi da nessun problema.

Il comando che uso è questo.

[code]DELETE FROM Accessori
[\code]

Il db è su di un server sql server 2005 Express Edition.



Grazie dell'attenzione ciao

lbenaglia Profilo | Guru

>Ciao sto facendo la DELETE di una mia tabella contenente circa
>30000 record e continua ad andare in timeout il comando. Se provo
>a lanciare il comando da c# va in temout, usando il management
>studio di SQL Server 2005 invece non mi da nessun problema.

Ciao adima80,

si vede che il tempo di esecuzione del comando supera il valore di default di 30 secondi.
Puoi intervenire su questo valore tramite la proprietà CommandTimeout dell'oggetto SqlCommand:

"Proprietà SqlCommand.CommandTimeout"
http://msdn2.microsoft.com/it-it/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

>Grazie dell'attenzione ciao
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

adima80 Profilo | Junior Member


>
>"Proprietà SqlCommand.CommandTimeout"



Scusa ma ho dimenticato di indicarlo nel post precedente, ho impostato la proprietà TimeOut a 0, così da renderlo infinito.



Grazie per l'attenzione ciao

lbenaglia Profilo | Guru

>>"Proprietà SqlCommand.CommandTimeout"
>
>Scusa ma ho dimenticato di indicarlo nel post precedente, ho
>impostato la proprietà TimeOut a 0, così da renderlo infinito.

Boh, allora con le informazioni che abbiamo non ne ho la più pallida idea

>Grazie per l'attenzione ciao
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Keyser Profilo | Newbie

Il problema è il file 'LDF' xkè l'engine sposta le righe da eliminare nel file ldf, cosi se l'operazione viene interrotta o da errore,
può ripristinarle.
Di solito per migliorare questo problema (non risolvere perchè la certezza non te la so dare,visti i comportamenti a volte assurdi di sql server)
è quello di avere un file ldf abbastanza grande,o almeno dimensionato rispetto all'mdf.
L'assurdo è che se setti il file ldf che può crescere indefinitivamente il problema non dovrebbe mai sorgere,al massimo dovrebbe metterci di più perchè
deve far crescere spesso il file e quindi causare un timeout, ma dando timeout infinito il problema si presenta lo stesso.
Io penso che a volte non riesce a far crescere il file a causa della frammentazione visto che qualche volta da l'errore e altre no.

Cmq per esperienza il database funziona meglio se l'ldf ha una dimensione considerevole, e un coefficente di crescita elevato; per esempio
ho un database di 1,2GB, tengo l'ldf al minimo (1mb) perchè faccio solo operazioni di lettura, ogni tanto invece lancio una procedura di aggiornamento
che modifica 3000/4000 righe (quindi cancella le vecchie e inserisce le nuove), prima di lanciare la procedura allargo l'ldf a 100mb con valore di accrescimento di 100mb,
cosi vado sul sicuro xkè
1) quando la procedura cancella e inserisce le righe non deve accrescere il file,ma scrive direttamente nell'ldf
2) la procedura occupa circa 15/20 mb del file quindi c'è spazio in abbondanza (serve un valore più alto nel caso sia già in parte pieno)
3) nel caso deve accrescere il file lo fa a "botte" di 100mb a volte, e non cento accrescimenti da 1mb (che secondo me lo mandano in tilt)
Dopo la procedura lancio uno shrink per avere mdf e ldf puliti.

la query per settare la dimensione dell'ldf è questa:
alter database DATABASENAME modify file (name=DATABASENAME _LOG,size=100,maxsize=unlimited,FILEGROWTH=100)

Bye Bye
S'moove Software
Software per Farmacie
Tariffazione automatica ricette farmaceutiche
http://www.smoovesoftware.com

adima80 Profilo | Junior Member

Grazie per la dritta. In questo caso ho risolto con un bel TRUNCATE TABLE perchè in realtà la tabella la dovevo svuotare.



Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5