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

Времето за изчакване на заявката при изпълнение от уеб, но супер бързо, когато се изпълнява от SSMS

Така че вашият C# код изпраща ad hoc SQL заявка към SQL Server, използвайки какъв метод? Мислили ли сте да използвате съхранена процедура? Това вероятно би осигурило същата производителност (поне в двигателя), независимо кой го е извикал.

Защо? Настройката ARITHABORT е едно от нещата, които оптимизаторът разглежда, когато определя как да изпълни вашата заявка (по-конкретно за съвпадение на план). Възможно е планът в кеша да има същата настройка като SSMS, така че да използва кеширания план, но с обратната настройка вашият C# код принуждава прекомпилиране (или може би удряте наистина ЛОШО план в кеша), което със сигурност може да навреди на производителността в много случаи.

Ако вече извиквате съхранена процедура (не сте публикували заявката си, въпреки че мисля, че сте имали предвид), можете да опитате да добавите OPTION (RECOMPILE) към нарушителната заявка (или заявки) в съхранената процедура. Това ще означава, че тези оператори винаги ще се прекомпилират, но това може да предотврати използването на лошия план, който изглежда удряте. Друга възможност е да се уверите, че когато съхранената процедура се компилира, партидата се изпълнява с SET ARITHABORT ON.

И накрая, изглежда, че питате как можете да промените настройката на ARITHABORT в SSMS. Мисля, че това, което искахте да попитате, е как можете да наложите настройката ARITHABORT във вашия код. Ако решите да продължите да изпращате ad hoc SQL от вашето C# приложение, тогава, разбира се, можете да изпратите команда като текст, който има множество изрази, разделени с точка и запетая, напр.:

SET ARITHABORT ON; SELECT ...

За повече информация защо възниква този проблем, вижте страхотната статия на Erland Sommarskog:

  • Бавно в приложението, бързо в SSMS? Разбиране на мистериите на изпълнението


  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 с помощта на TSQL или GUI - SQL Server / TSQL Урок, част 24

  2. Как да филтрирате редове с нулеви стойности в изявление за избор в SQL Server - SQL Server / TSQL урок, част 110

  3. Проверете дали таблицата съществува в SQL Server

  4. SQL Server безшумно съкращава varchar в съхранените процедури

  5. Как да разделите прозореца на заявката в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 13