none
SQL 2005 - Timeout expired pro jednoho z uživatelů

    Dotaz

  • Dobrý den,

    máme ASP.NET aplikaci, kde všichni uživatelé přistupují k SQL Serveru 2005 pod jedním databázovým loginem/uživatelem. Jednou za čas se SQL Server dostane do stavu, že na určité SQL příkazy (i triviální) vrací permanentě chybu:

    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

    Nasadil jsem proto na stejný aplikační server druhou instanci aplikace, která se odlišuje pouze v uživateli, který přistupuje do databáze. Pod touto instancí se aplikace chová korektně (pokud k ní přistupuje omezený počet uživatelů přes web).

    V praxi to pak vypadá tak, že "v jeden okamžik" vyvolám stejnou operaci ve dvou aplikacích nad stejnou databází a zatímco jedna doběhne, druhá nikoliv. Když v ostré aplikaci použiji databázového uživatele, pod kterým vše na druhé instaci běželo, tak se problém opakuje - je to prostě nějak svázáno s tím, kolik spojení do databáze je pod daným uživatelem navázáno nebo tak něco...

    Zkoušel jsem laborovat a monitorovat pool databázových připojení v .NETu, ale ten zdaleka nevyužívá povolené limity a může růst. Zámky tam také žádné nevidím, navíc by to pak nemělo jít nikomu...

    Má někdo nějaký nápad?

    Díky,

    Tomáš

    čtvrtek 3. února 2011 9:29

Odpovědi

  • Otázka je, jestli jde opravdu o stejnou operaci na obou souběžných případech. Předpokládám, že jde pokaždé o jinou operaci (pokud stejnou, pak se soustřeďte na ní). Povolený počet spojení lze limitovat nejenom na straně klienta (velikost poolu), ale i na straně serveru. Podívejte se, jestli to nemáte nastaveno.

    Podíval bych se taky, jestli vám tam nemůže nastat deadlock.

    ...jinak uvádíte bohužel moc málo indicíí na hlubší analýzu.


    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    úterý 29. března 2011 21:54
    Moderátor