Welcome to Sign in | Help

problema cu Connection Timeout

  •  12-19-2006, 1:58 AM

    problema cu Connection Timeout

    Am o mare problema cu un sql a carui executie dureaza prea mult, asa ca vin cu 2 intrebari capitale la dumneavoastra. Mentionez ca foloesc VB din vs2005 CU SQL Server 2005 Developper edition

    1) Cum setez timeout-ul unei conexiuni sql ? Pe net am gasit urmatoarele metode, niciuna nu rezolva problema:
                    a) setarea Connection LifeTime sau/si Connection Timeout din stringul de conectare:
                                 dim sqlConn as new sqlconnection("Connection Lifetime=3000;    Connection Timeout=3000");
                                 sqlConn.Open();
                                  dim adapter as SqlDataadapter =   new     sqlDataAdapter("SELECT....",sqlConn);
                                  dim ds as new DataSet;
                                  adapter.Fill(ds,"ddd");
                   b) folosirea "sp_configure" in SQL server management studio:
                                  sp_configure 'remote query timeout',3000
                                   go
                                    reconfigure with override
                                  go
                        si
                                 sp_configure 'remote login timeout',3000
                                 go
                                 reconfigure with override
                                 go
                   c) in acelas minunat soft, la Tools->Options->Designers->Table and     Database Designers->Transaction time-out after si modificarea                  valorii de acolo
    2) cum pot selecta n linii dintr-un select incepand cu linia m (echivalentul lui LIMIT de la mySQL) ?. Din pacate rezultatul selectului e destul de mare(2,5 mil de linii) si solutia ar fi paginarea acestuia. 100 de linii cat are o pagina se intorc mult mai repede decat cele 2,5 mil.   Ce am gasit pe net urmeaza:
                   a) adapter.Fill(ds,index_start,numar_campuri,dataset). E ok metoda  pentru un numar mic de linii. E mult mai simpla decat celelalte, dar,                   din pacate eficienta ei e mica. Sql-ul se executa, sunt intoarse cele 2,5 milioane de linii, apoi sunt alese liniile care intereseaza
                    b) SELECT * FROM [tabel] TOP n WHERE [idtabel] NOT IN (SELECT  [idtabel] FROM [tabel] TOP m]. Merge foarte bine pentru primele linii  si foarte greu pentru ultimele linii (e evident si de ce)
                    c) WITH sql AS
                       {
                       SELECT *,ROW_NUMBER() OVER (ORDER BY [idtabel] as 'RowNumber'   FROM [tabel]
                       }
                      SELECT * FROM sql WHERE (RowNumber BETWEEN n AND m)
                      merge un pic mai greu pentru primele linii, dar ceva mai bine pentru  ultimele decat ultima metoda. Totusi dureaza intre 20 si 40 de                  secunde. Dezavantaj mare: merge foarte greu cu JOIN 
                      bineinteles am indexat baza, s-a observat o reducere la jumate a timpului de asteptare... dar am nevoie mai mult.

    Va rog, daca se poate, sa ma ajutati

    Mii de multumiri

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems