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

Kerugian menggunakan ExecuteReaderAsync dari C# AsyncCTP

Saya tidak setuju dengan Ricka dalam hal ini. Perintah Async DB tidak hanya bagus, tetapi juga penting dalam mencapai skala, throughput dan latensi. Keberatannya tentang waktu peningkatan kumpulan utas hanya berlaku untuk server web yang mengalami volume lalu lintas rendah.

Dalam situasi lalu lintas tinggi (yang merupakan satu-satunya yang penting), kumpulan utas tidak perlu menunggu 'menyuntikkan' utas baru. Melakukan Perintah SQL secara asinkron penting tidak hanya dari sudut pandang permintaan server web/kesehatan utas, tetapi juga dari sudut pandang total permintaan seumur hidup/latensi:panggilan DB yang tidak berkorelasi dapat dilakukan secara paralel, bukan berurutan. Ini saja biasanya menghasilkan peningkatan dramatis dalam latensi permintaan HTTP seperti yang dialami oleh pengguna. Dengan kata lain, halaman Anda dimuat lebih cepat.

Sebuah nasihat:Perintah SQL tidak benar-benar asinkron sampai Anda mengaktifkan Asynchronous Processing=true pada rangkaian sambungan. Meskipun ini tidak disetel (dan secara default tidak, Edit:dimulai dengan .NET Framework <4.5. Asynchronous Processing tidak lagi diperlukan ) panggilan 'asinkron' Anda ke BeginExecuteReader hanyalah tipuan, panggilan akan meluncurkan utas dan memblokir itu benang. Saat pemrosesan asinkron yang sebenarnya diaktifkan di string koneksi maka panggilan benar-benar asinkron dan panggilan balik didasarkan pada penyelesaian IO.

Sebuah kata peringatan:perintah SQL async selesai segera setelah pertama hasil dikembalikan ke klien, dan pesan info dihitung sebagai hasilnya.

create procedure usp_DetailsTagsGetAllFromApprovedPropsWithCount
as
begin
print 'Hello';
select complex query;
end

Anda telah kehilangan semua manfaat async. print membuat hasil yang dikirim kembali ke klien, yang menyelesaikan perintah async dan eksekusi pada klien dilanjutkan dan dilanjutkan dengan 'reader.Read()'. Sekarang itu akan memblokir hingga kueri kompleks mulai menghasilkan hasil. Anda bertanya 'siapa yang menempatkan print dalam prosedur?' tapi print mungkin disamarkan dalam sesuatu yang lain, mungkin sesuatu yang tampak polos seperti INSERT yang mengeksekusi tanpa pertama-tama mengeluarkan SET NOCOUNT ON .



  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 2016

  2. Perbedaan waktu antara tanggal akhir catatan pertama ke catatan berikutnya tanggal pertama

  3. Apa ruang lingkup CONTEXT_INFO di SQL Server?

  4. Bandingkan dua baris dan identifikasi kolom yang nilainya berbeda

  5. Layanan pelaporan server SQL:cara menghentikan penembakan laporan saat dibuka