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

Методът SqlDataAdapter.Fill бавен

Първо, уверете се, че профилирате правилно производителността. Например, стартирайте заявката два пъти от ADO.NET и вижте дали вторият път е много по-бърз от първия. Това премахва излишните разходи за изчакване приложението да се компилира и инфраструктурата за отстраняване на грешки да се увеличи.

След това проверете настройките по подразбиране в ADO.NET и SSMS. Например, ако стартирате SET ARITHABORT OFF в SSMS, може да откриете, че сега работи толкова бавно, колкото при използване на ADO.NET.

Това, което открих веднъж, беше, че SET ARITHABORT OFF в SSMS доведе до прекомпилиране на съхранената процедура и/или използване на различни статистически данни. И изведнъж и SSMS, и ADO.NET отчитаха приблизително едно и също време на изпълнение.

За да проверите това, вижте плановете за изпълнение за всяко изпълнение, по-специално таблицата syscacheobjects. Вероятно ще бъдат различни.

Изпълнението на 'sp_recompile' на конкретна съхранена процедура ще изхвърли свързания план за изпълнение от кеша, което след това дава шанс на SQL Server да създаде евентуално по-подходящ план при следващото изпълнение на процедурата.

И накрая, можете да опитате подхода „изстрелване от орбита“ за почистване на целия кеш на процедурата и буфери на паметта с помощта на SSMS:

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. Сравнете датите в T-SQL, игнорирайки частта от времето

  2. SQL Server ПОРЪЧАЙ ПО дата и нулевите последни

  3. Използване на кортежи в SQL IN клауза

  4. Грешка при аритметично препълване при преобразуване на израза в тип данни дата и час. (докато показва дата и час..)

  5. Нулиране на AutoIncrement в SQL Server след изтриване