Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

ADO.NET извикването на T-SQL Stored Procedure причинява SqlTimeoutException

След като установих, че в основата на проблема е връзката ADO.NET, тази нишка ме доведе до отговора.

По принцип връзките през Sql Server Management Studio (SSMS) по подразбиране имат SET ARITHABORT ON . ADO.NET връзките не го правят.

Настройка на ARITHABORT OFF и изпълнението на заявката директно чрез SSMS ми дава същото бавно време за отговор.

Основната разлика при изпълнение с или без тази настройка е, че за двете повиквания се създава различен план за заявка. Когато ARITHABORT беше OFF , командата SSMS ще използва предварително компилирания кеширан план за заявка, който ADO.NET връзката е използвала, и следователно изчакване.

Като изпълните следните команди като администратор на базата данни, всички заявки се изпълняват според очакванията, независимо от ARITHABORT настройка.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Мога само да предположа, че компилиран план за заявка е повреден или невалиден.

Ще използвам това като решение (аз гласувах за отговора) в другата тема

Благодаря.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте свързан сървър в SQL Server (пример за T-SQL)

  2. Регистърът на транзакциите на SQL Server, част 1:Основи на регистрирането

  3. GETUTCDATE() Примери в SQL Server (T-SQL)

  4. Как да активирате компресията на съществуваща таблица в SQL Server (T-SQL)

  5. Как да експортирате данни като CSV формат от SQL Server с помощта на sqlcmd?