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

Metoda SqlDataAdapter.Fill wolno

Najpierw upewnij się, że odpowiednio profilujesz wydajność. Na przykład uruchom zapytanie dwukrotnie z ADO.NET i sprawdź, czy drugi raz jest znacznie szybszy niż pierwszy raz. Eliminuje to narzut związany z oczekiwaniem na skompilowanie aplikacji i zwiększenie infrastruktury debugowania.

Następnie sprawdź ustawienia domyślne w ADO.NET i SSMS. Na przykład, jeśli uruchomisz SET ARITHABORT OFF w programie SSMS, może się okazać, że teraz działa tak wolno, jak podczas korzystania z ADO.NET.

To, co znalazłem kiedyś, to to, że SET ARITHABORT OFF w SSMS spowodował, że przechowywany proces został ponownie skompilowany i/lub użyto innych statystyk. I nagle zarówno SSMS, jak i ADO.NET zgłaszały mniej więcej ten sam czas wykonania.

Aby to sprawdzić, spójrz na plany wykonania dla każdego przebiegu, a konkretnie na tabelę syscacheobjects. Prawdopodobnie będą inne.

Uruchomienie 'sp_recompile' na określonej procedurze składowanej spowoduje usunięcie skojarzonego planu wykonania z pamięci podręcznej, co następnie da SQL Serverowi szansę na stworzenie bardziej odpowiedniego planu przy następnym wykonaniu procedury.

Na koniec możesz wypróbować podejście „nuke it from orbit” polegające na wyczyszczeniu całej pamięci podręcznej procedur i buforów pamięci za pomocą SSMS:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Wykonanie tego przed przetestowaniem zapytania uniemożliwia korzystanie z buforowanych planów wykonania i poprzednich wyników w pamięci podręcznej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywana procedura i uprawnienia — czy WYKONANIE wystarczy?

  2. MultipleActiveResultSets=Prawda czy wiele połączeń?

  3. Jak zmienić kolumnę z wartości Null na Not Null w SQL Server

  4. Jak używać Sum, Avg i Count w instrukcji Select — samouczek SQL Server / TSQL, część 128

  5. Uzyskaj aktualną strefę czasową serwera w programie SQL Server (T-SQL)