2012-01-16 20 views
7

Ho pensato di avere un errore sql leccato in un post here solo un po 'di tempo fa ... (Messaggio di errore: Timeout scaduto. al completamento dell'operazione o il server non risponde. ") Sto cercando di eseguire questo con gli strumenti di database in Visual Studio ... non in studio di gestione, e non tramite codice client/ADO (ancora). Ho riscritto un equo query semplice che utilizza un paio di funzioni personalizzate ... le funzioni e le parti della query sono state testate e tutte funzionano bene, ma la query di seguito è scaduta .. ciò avviene esattamente come digitato in Management Studio, e dura circa 4 minuti. Come ho accennato nel mio altro post, ho cambiato l'impostazione in Strumenti> Opzioni> Designer> "Sovrascrivi il valore di timeout della stringa di connessione" a 120 secondi come da questo post, ma ... è ancora scaduto dopo 30 secondi Aggiungi l'ISNULL in questa ultima versione è la modifica che lo ha eseguito in Management Studio.Il server SQl continua a ricevere l'errore "Timeout scaduto. Il periodo di timeout è scaduto"

SELECT Symbol, LatestDate 
FROM (SELECT Symbol, ISNULL(dbo.LatestDateInDailyPricingVolBySymbol(Symbol), '1/1/1900') AS LatestDate FROM tblSymbolsMain) AS T2 
WHERE (LatestDate < dbo.RecentTradingDateByNumber(3)) 

L'idea generale è quella di tornare un sottoinsieme di simboli di borsa che non hanno un corrispondente punto di dati nel mio listino al giorno per almeno 3 giorni. Qualche acquirente? Ringrazia tutti.

risposta

10

Senza riguardo al tuo timeout;

Si sta utilizzando la console di gestione sql per eseguire la query? In tal caso, quando ci si connette al database c'è un pulsante opzioni che consente di impostare i timeout.

Connection Options

Inoltre, se nella finestra di query, fare clic destro e scegliere Opzioni query ....

0, significa illimitato, vorrei controllare questi. 4 minuti sono lunghi, forse la query può essere sottoposta a refactoring per funzionare più velocemente?

enter image description here

Se si esegue questo all'interno di Visual Studio tramite C# il timeout di comando predefinito è di 30 secondi. Alterarlo impostando il timeout del comando:

SqlCommand comm= new SqlCommand(); 
comm.CommandTimeout = 300; 
+0

Come ho mentorato viene eseguito in Management Studio ma richiede un po 'di tempo ... Sto cercando di eseguirlo con gli strumenti sql in Visual Studio 2010. – StatsViaCsh

+0

@StatsViaCsh - Deve essere un'impostazione all'interno di VS2010 che è simile alla console di gestione di SQL Server. Se è stato generato del codice, può essere risolto tramite codice, ma forse fare clic con il tasto destro sulla schermata della query o sulle opzioni da qualche parte? Spiacente, non utilizzo VS2010 per eseguire query, solo la console di gestione di SQL Server, quindi non conosco tali schermate. –

+0

@StatsViaCsh - Guardato un po 'intorno al VS2010, posso impostare il timeout della connessione, ma non riesco a trovare il timeout del comando. Vorrei provare con il codice invece di usare lo strumento, sembra che stia usando un default che non può essere facilmente modificato. –

1

Mi interessa che la routine impieghi 4 minuti per iniziare. Sembra una query piuttosto semplice assumendo che le funzioni facciano quello che sembrano fare, e con l'indicizzazione e il design appropriato della tabella, dovrebbe tornare molto più rapidamente di quello.

hai guardato il piano di esecuzione per la query:

SELECT Symbol, MAX(TradeDate) 
FROM tblSymbolsMain 
GROUP BY Symbol 
HAVING MAX(TradeDate) < dbo.RecentTradingDateByNumber(3) 

funzioni scalari possono essere problemi di prestazioni quando viene chiamato più volte sul set con un gran numero di righe, e sargability anche male.

+0

Grazie per la risposta. Sembra davvero molto lungo! Non ho guardato il mio piano di esecuzione ... non so come. Mi è venuta l'idea di rendere questa una stored procedure in grado di impostare il valore della funzione: dbo.RecentTradingDateByNumber (3) solo una volta, ma non so che un cambiamento sottile potrebbe farlo cadere in linea. Se hai un'altra spinta, sono tutto orecchie. – StatsViaCsh

+0

@StatsViaCsh In Management Studio è disponibile un'opzione di menu per la visualizzazione del piano di esecuzione. C'è un ebook gratuito che ti dirà come capire come si presenta un piano di cattiva esecuzione: http://www.simple-talk.com/books/sql-books/sql-server-execution-plans/ –

2

Se una query richiede molto tempo, probabilmente è qualcosa di sbagliato. Vorrei dichiarare una variabile per memorizzare il RecentTradingDateByNumber. Così si presenta così:

DECLARE @RecentTrandingDateByNumber DATETIME 
SET @RecentTrandingDateByNumber=dbo.RecentTradingDateByNumber(3) 

SELECT 
    tblSymbolsMain.Symbol, 
    MAX(tblSymbolsMain.TradeDate) 
FROM 
    tblSymbolsMain 
GROUP BY 
    Symbol 
HAVING 
    MAX(TradeDate) < @RecentTrandingDateByNumber 

Per vedere l'esecuzione in studio gestione andare a "Query/Includi piano di esecuzione effettivo". Se si desidera vedere anche il traffico della query, i numeri di selezione ecc. È anche possibile includere le statistiche del cliente."Query/includere statistiche client"

Se volete saperne di più informazioni sulla esaminando l'esecuzione di query vedere here

+1

Grazie per quello, è la prima cosa che farò oggi .. – StatsViaCsh

Problemi correlati