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

Дали SET NOCOUNT ON наистина прави толкова голяма разлика в производителността

Има сценарии, при които SET NOCOUNT ON е задължително. При проектиране на средно ниво с висока производителност, базирано на асинхронна обработка, използваща пула от нишки чрез методите BeginExecuteXXX на SqlClient, има много сериозен проблем с броя на редовете. Методите BeginExecute завършват веднага щом първи пакетът с отговор се връща от сървъра. Но когато се извика EndExecuteXXX, това завършва при заявки, които не са заявки, когато извикването приключи. Всеки отговор на брой редове е отговор. При обработка дори на умерено сложни процедури броят на първия ред може да се върне след 5-10 ms, докато повикването завършва след 300-500 ms. Вместо подадената асинхронна заявка да извика обратно след 500 ms, тя извиква обратно след 5 ms и след това обратното извикване блокира в EndExecuteXXX за 495 ms. Резултатът е, че асинхронните извиквания завършват преждевременно и блокират нишка от пула на нишките в извикванията EndExecuteNonQuery. Това води до гладуване на ThreadPool. Виждал съм системи с висока производителност, които подобряват пропускателната способност от стотици повиквания в секунда до хиляди повиквания в секунда просто чрез добавяне на SET NOCOUNT ON при конкретни сценарии.

Като се има предвид, че за високомащабна/високопроизводителна обработка на средно ниво асинхронните повиквания са единственият начин, NOCOUNT е почти задължително изискване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Анализ на MS SQL Server за тези, които го виждат за първи път

  2. 6 начина за проверка на размера на база данни в SQL Server с помощта на T-SQL

  3. експортиране от sql сървър към excel файл с помощта на asp.net и vb.net?

  4. Как да настроите Spotlight Cloud и ефективно да отстраните неизправности на SQL сървър

  5. PowerShell - Списък на всички SQL екземпляри в моята система?