sql >> Databáze >  >> RDS >> Sqlserver

Volání uložené procedury T-SQL ADO.NET způsobí výjimku SqlTimeoutException

Jakmile jsem zjistil, že kořenem problému je připojení ADO.NET, toto vlákno mě přivedlo k odpovědi.

V zásadě připojení přes Sql Server Management Studio (SSMS) ve výchozím nastavení mají SET ARITHABORT ON . Připojení ADO.NET ne.

Nastavení ARITHABORT OFF a provedení dotazu přímo prostřednictvím SSMS mi poskytuje stejně pomalou dobu odezvy.

Hlavním rozdílem při spuštění s tímto nastavením nebo bez něj je vytvoření jiného plánu dotazů pro obě volání. Když ARITHABORT bylo OFF , příkaz SSMS použije předkompilovaný plán dotazů uložený v mezipaměti, který používá připojení ADO.NET, a proto vypršel časový limit.

Spuštěním následujících příkazů jako správce v databázi se všechny dotazy spustí podle očekávání bez ohledu na ARITHABORT nastavení.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Mohu pouze předpokládat, že se zkompilovaný plán dotazů poškodil nebo stal neplatným.

Vezmu to jako řešení (hlasoval jsem pro odpověď) v jiném vláknu

Děkuji.



  1. Jak ukládat pole v MySQL?

  2. Jak nainstalovat Apache Cassandra na Ubuntu 20.10/Ubuntu 20.04

  3. Jak provést LEVÝ ANTI SEMI JOIN v SQL Server

  4. Jaký je rozdíl mezi RANK a DENSE_RANK v SQL?