in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

SQLServer2005 - StoredProcedure - Timeout expired

Last post 03-03-2008 13.10 by bianco. 15 replies.
Page 1 of 2 (16 items) 1 2 Next >
Sort Posts: Previous Next
  • 02-28-2008 11.31

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    SQLServer2005 - StoredProcedure - Timeout expired

    Ciao a tutti,

    a) Ho un server win2003 - 64 bit con su installato sqlserver 2005 64bit

    b) Ho un altro server win2003 - 32 bit con i soli strumenti client di connettività

    Se eseguo una stored procedure da a) impiego circa 4.30 minuti ad ottenere il recordset (90 righe)

    Se eseguo la stessa stored procedure da b) dopo 30 secondi mi va in timeout.

    Se copio il contenuto della stored procedure e la eseguo come query normale sia da a) che da b) ottengo le mie belle 90 righe in un secondo.

    Ci sto impazzando, qualcuno ha idea di cosa possa essere?

     Grazie ciao marco

     

    • Post Points: 35
  • 02-28-2008 15.01 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    se può aiutare:

    all'interno della sotred procedure, prima di fare la select cè un controllo sui parametri di input:

    if @variabile<=0 set @variabile=NULL

    eseguendo la query con

    execute nomeprocedura 0,0,0

    impiega 4 minuti, o va in timeout

    se invece eseguo execute nomeprocedura null,null,null

    è istantanea... idee??

     

    ciao marco

    • Post Points: 20
  • 02-28-2008 15.59 In reply to

    • sgovoni
    • Top 10 Contributor
      Male
    • Joined on 10-18-2007
    • Posts 171
    • Points 2.625

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    Marco Ciao,

    puoi postare la definizione della procedura e un esempio di lancio ?

    Come è definita la variabile locale @variabile ?

    Ciao !

    Sergio

    • Post Points: 20
  • 02-28-2008 16.34 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    ciao, e grazie in anticipo per l'interessamento

    inizialmente la procedura era definita cosi: 

     ALTER PROCEDURE [dbo].[S_INDICATORI_P2_1](@TipoSelezione int,@Anno int,@Mese int,@UtenteCapocommessa int,@IDTipoProgetto int,

    @IDAsa int,@iUtente_ResponsabileASA int,@gUtente_supervisor int) AS

     IF @IDAsa<=0 set @IDAsa=NULL

    IF @Utente_ResponsabileASA<=0 set @Utente_ResponsabileASA=NULL

    IF @UtenteCapocommessa<=0 set @UtenteCapocommessa=NULL

    IF @IDTipoProgetto<=0 set @IDTipoProgetto=NULL

    if @gUtente_supervisor<=0 set @gUtente_supervisor=NULL

    IF @TipoSelezione=1

    BEGIN

    ....

    END

    ELSE IF @TipoSelezione=2

    ....

     

    la eseguo con execute  dbo.S_INDICATORI_P2_1 5,2008,2,0,0,0,0,0

    all'interno dei blocchi if ci sono differenti query di selezione che ritornano recordset con colonne e dati diversi

    ora ho modificato la storedprocedure in questo modo (sto facendo tentativi, ma senza capire cosa cambia):

    in pratica ho modificato il nome dei parametri facoltativi, ho dichiarato le variabili internamente alla sp e il tempo di esecuzione della sp è tornato < di un secondo... ma è solo una banale 'pezza' vorrei capire dove/cosa sbaglio, o meglio cosa han cambiato riespetto alla versione 2000 di sql server, che non non mi ha mai dato problemi.. 

    ALTER PROCEDURE [dbo].[S_INDICATORI_P2_1](

    @TipoSelezione int,

    @Anno int,

    @Mese int,

    @iUtenteCapocommessa int,

    @iIDTipoProgetto int,

    @iIDAsa int,

    @iUtente_ResponsabileASA int,

    @igUtente_supervisor int

    ) AS

    SET NOCOUNT ON

    declare @UtenteCapocommessa int

    declare @IDTipoProgetto int

    declare @IDAsa int

    declare @Utente_ResponsabileASA int

    declare @gUtente_supervisor int

    set @UtenteCapocommessa =@iUtenteCapocommessa

    set @IDTipoProgetto =@iIDTipoProgetto

    set @IDAsa =@iIDAsa

    set @Utente_ResponsabileASA =@iUtente_ResponsabileASA

    set @gUtente_supervisor =@igUtente_supervisor

     

    IF @IDAsa<=0 set @IDAsa=NULL

    IF @Utente_ResponsabileASA<=0 set @Utente_ResponsabileASA=NULL

    IF @UtenteCapocommessa<=0 set @UtenteCapocommessa=NULL

    IF @IDTipoProgetto<=0 set @IDTipoProgetto=NULL

    if @gUtente_supervisor<=0 set @gUtente_supervisor=NULL

     ....

     

     

    • Post Points: 20
  • 02-28-2008 19.17 In reply to

    • sgovoni
    • Top 10 Contributor
      Male
    • Joined on 10-18-2007
    • Posts 171
    • Points 2.625

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    bianco:

    in pratica ho modificato il nome dei parametri facoltativi, ho dichiarato le variabili internamente alla sp e il tempo di esecuzione della sp è tornato < di un secondo... ma è solo una banale 'pezza' vorrei capire dove/cosa sbaglio, o meglio cosa han cambiato riespetto alla versione 2000 di sql server, che non non mi ha mai dato problemi.. 

    Marco Ciao,

    premetto che non ho mai fatto prove sulla versione di SQL Server 2005 a 64 bit.

    Nella prima versione della [dbo].[S_INDICATORI_P2_1] i paramentri di input (passati come costanti) vengono modificati all'interno della stored procedure stessa... dopo questa modifica la lettura del paramentro probabilmente provoca il time out (ma è una ipotesi Smile). Io proverei a modificare a prima versione lasciando un solo parametro e dopo l'assegnazione con il SET proverei a stampare con PRINT il valore del parametro...

    Faccio un po' di ricerche e se scopro qualcosa ti scrivo...

    Ciao!

    Filed under:
    • Post Points: 20
  • 02-29-2008 11.45 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    ciao, il parametro assume il valore null come voluto.

    il tempo di esecuzione della sp aumenta all'aumentare del numero delle variabili assegnate.

    cmq credo che tu abbia ragione, sembra che al 2005 non piaccia che gli vengano cambiati i valori dei parametri..

    • Post Points: 5
  • 02-29-2008 12.40 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    ..però è strano che a tutte le altre storedprocedure (anche piu complesse di quella in questione) non dia fastidio, le selezioni dove ho parametri facoltativi le ho impostate tutte in modo simile es:

    select .... from ... join ...

    where (@parametro1 is null or colonna=@parametro1) and

    (@parametro2 is null or colonna2 like @parametro2) and

    ...

    sto sollecitando il buon vecchio sistemista ad installare tutte le servicepack e hotfix disponibili; non ha senso questo errore....

    • Post Points: 5
  • 02-29-2008 13.48 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    installato tutto l'installabile. niente da fare...

    • Post Points: 20
  • 02-29-2008 15.57 In reply to

    • sgovoni
    • Top 10 Contributor
      Male
    • Joined on 10-18-2007
    • Posts 171
    • Points 2.625

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    Marco,

    prova con questa tecnica, che ho imparato dal nostro presidente: mentre la query è in esecuzione, in un'altra connessione, esegui il comando

    SELECT * FROM sys.dm_os_waiting_tasks WHERE session_id = <session_id della connessione su cui hai eseguito la stored procedure>

    Cosa leggi nel campo wait_type ?

    Altrimenti si potrebbe eseguire la stored procedure in debug utilizzando visual studio.

    Ciao !

    • Post Points: 20
  • 02-29-2008 16.18 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    Ciao, ho applicato il database engine tuning advisor,

    ho applicato ciecamente quanto mi ha consigliato... e al momento il problema non appare piu, l'esecuzione di sta benedetta storedproc è tornata velocissima ( < 1 secondo).

    ora il campo wait_type è = OLEDB, ma come ho detto, ha ripreso a funzionare perfettamente..

    ho capito che ho bisogno di un buon corso, o almeno di un buon libro su sql server.

    Anche se sembra risolto, vorrei capire il perchè ha risolto. se mancavano degli indici e delle statistiche, la stored proc sarebbe dovuta essere sempre lenta, e non variare il comportamento in base ai parametri passati, no?

    ti ringrazio per il tempo che mi hai dedicato, spero di poter ricambiare in qualche modo.

    ciao marco

     

     

    • Post Points: 20
  • 02-29-2008 18.04 In reply to

    • sgovoni
    • Top 10 Contributor
      Male
    • Joined on 10-18-2007
    • Posts 171
    • Points 2.625

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    bianco:
    ho applicato il database engine tuning advisor

    mmm... ma il Database Engine Tuning Advisor ha suggerito l'applicazione di qualche indice che hai creato ? Se sì il miglioramento potrebbe essere dovuto all'utilizzo dei nuovi indici applicati.

    Ciao!

    • Post Points: 20
  • 03-01-2008 18.25 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.164
    • Points 15.245

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    bianco:

    Ci sto impazzando, qualcuno ha idea di cosa possa essere?

    E' un problema conosciuto come "Parameter Sniffing". In SQL Server 2005 è molto meno presente che in SQL 2000, ma in casi rari ancora si presenta.

    Un modo per risolvere il problema è quello di dichiarare delle variabili nella stored procedure e quindi di assegnare a tali variabili i valori dei parametri. Nel codice utilizzerai le variabili e non i parametri.

    Un pò di link sull'argomento:

    http://blogs.msdn.com/khen1234/archive/2005/06/02/424228.aspx

    http://blogs.msdn.com/queryoptteam/archive/2006/03/31/565991.aspx 

    http://nflanagan.blogspot.com/2006/07/parameter-sniffing.html

     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    Filed under:
    • Post Points: 20
  • 03-01-2008 18.26 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.164
    • Points 15.245

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    bianco:

    Se eseguo una stored procedure da a) impiego circa 4.30 minuti ad ottenere il recordset (90 righe)

    Se eseguo la stessa stored procedure da b) dopo 30 secondi mi va in timeout.

    Questa diverso comportamente dipende dal fatto che su "b" hai impostato un valore di timeout per l'esecuzione delle query nel Management Studio, mentre invece su "a" no.

     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 5
  • 03-03-2008 10.13 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    è vero, mi sembra solo un pò strano che prima (quando girava su un server 32 bit) non avesse mai dato problemi, e che in base al valore dei parametri cambiassero cosi tanto i tempi di risposta, e che tutte le altre (centinaia) di stored procedure che hanno la stessa logica nel confronti dei parametri di input, non abbiano dato problemi.. mah..

    • Post Points: 5
  • 03-03-2008 10.14 In reply to

    • bianco
    • Top 50 Contributor
    • Joined on 02-28-2008
    • Posts 15
    • Points 225

    Re: SQLServer2005 - StoredProcedure - Timeout expired

    grazie mille, li leggo subito

    • Post Points: 5
Page 1 of 2 (16 items) 1 2 Next >
(C) 2007 User Group Italiano di SQL Server