Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wywołanie procedury składowanej T-SQL przez ADO.NET powoduje wyjątek SqlTimeoutException

Kiedy ustaliłem, że przyczyną problemu jest połączenie ADO.NET, ten wątek doprowadził mnie do odpowiedzi.

Zasadniczo połączenia przez Sql Server Management Studio (SSMS) domyślnie mają SET ARITHABORT ON . Połączenia ADO.NET nie.

Ustawianie ARITHABORT OFF a wykonanie zapytania bezpośrednio przez SSMS daje mi ten sam długi czas odpowiedzi.

Główną różnicą w przypadku uruchamiania z tym ustawieniem lub bez niego jest to, że dla dwóch wywołań tworzony jest inny plan zapytania. Kiedy ARITHABORT był OFF , polecenie SSMS użyje wstępnie skompilowanego buforowanego planu zapytań, którego używało połączenie ADO.NET, a zatem przekroczy limit czasu.

Uruchamiając następujące polecenia jako administrator bazy danych, wszystkie zapytania działają zgodnie z oczekiwaniami, niezależnie od ARITHABORT ustawienie.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Mogę tylko założyć, że skompilowany plan zapytań został uszkodzony lub nieważny.

Pójdę z tym jako rozwiązaniem (głosowałem na odpowiedź) w drugim wątku

Dzięki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz widok w SQL Server 2017

  2. Połącz SAP IQ z SQL Server

  3. Przekazywanie wartości varchar pełnej wartości oddzielonych przecinkami do funkcji SQL Server IN

  4. GETUTCDATE() Przykłady w SQL Server (T-SQL)

  5. Skonfiguruj zawsze włączone grupy dostępności programu SQL Server między dwiema replikami synchronicznymi. Część 2