Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah SET NOCOUNT ON benar-benar membuat banyak perbedaan kinerja?

Ada skenario di mana SET NOCOUNT ON adalah wajib. Saat merancang tingkat menengah berkinerja tinggi berdasarkan pemrosesan asinkron yang memanfaatkan kumpulan utas melalui metode BeginExecuteXXX SqlClient, ada masalah yang sangat serius dengan jumlah baris. Metode BeginExecute selesai segera setelah metode pertama paket respon dikembalikan oleh server. Tetapi ketika EndExecuteXXX dipanggil, ini selesai pada permintaan non-kueri saat panggilan selesai. Setiap respons jumlah baris adalah respons. Saat memproses prosedur yang bahkan cukup rumit, jumlah baris pertama dapat kembali dalam 5-10 md, sedangkan panggilan selesai dalam 300-500 md. Alih-alih meminta permintaan asinkron yang dikirim dipanggil kembali setelah 500 md, permintaan tersebut memanggil kembali setelah 5 md dan kemudian panggilan balik memblokir di EndExecuteXXX selama 495 md. Hasilnya adalah panggilan asinkron selesai sebelum waktunya dan memblokir utas dari kumpulan utas di panggilan EndExecuteNonQuery. Hal ini menyebabkan kelaparan ThreadPool. Saya telah melihat sistem kinerja tinggi meningkatkan throughput dari ratusan panggilan per detik menjadi ribuan panggilan per detik hanya dengan menambahkan SET NOCOUNT ON, pada skenario tertentu.

Mengingat bahwa untuk pemrosesan tingkat menengah tingkat tinggi/throughput tinggi, panggilan asinkron adalah satu-satunya cara, NOCOUNT merupakan persyaratan wajib.



  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:konversi ((int)tahun,(int)bulan,(int)hari) ke Datetime

  2. Hapus simpul xml dari kolom tabel SQL Server 2008 r2 berdasarkan nilai atribut

  3. Apa tipe data SQL terbaik untuk menyimpan string JSON?

  4. Mengapa 1899-12-30 tanggal nol di Access/SQL Server, bukan 31/12?

  5. Bagaimana mengatasi sql server 2008 restore error 3203