Mengapa tipe menunggu async_network_io terjadi?

10

Minggu lalu sesuatu yang aneh terjadi pada basis data kami. Tiba-tiba, aplikasi diblokir untuk pengguna kami yang tidak dapat menyimpan entitas baru dll. Setelah melihat Monitor Aktivitas SQL Server (2008 dengan mode kompatibilitas 2005) Saya melihat tiga entri berikut:

tipe menunggu async_network_io

Setelah beberapa waktu, pengguna mendapat waktu habis koneksi. Ketika saya membunuh proses 64, mereka bisa menyelamatkan secara normal lagi.

Masalahnya adalah bahwa entitas yang mereka coba simpan selama blok dimasukkan ke dalam DB lebih dari sekali (hingga 3 kali) meskipun ada kode yang harus mencegah hal ini terjadi (kolom angka yang harus unik tetapi tanpa kendala ... cek terjadi dalam kode).

Kami menggunakan Entity Framework 6.0.

  • Apakah ada di antara Anda yang tahu mengapa dan kapan ASYNC_NETWORK_IO menunggu jenis ini terjadi dan bagaimana cara menghindarinya?
  • Dan apa sebenarnya artinya?
xeraphim
sumber
1
Mengintip artikel ini dari Doug Lane: brentozar.com/archive/2015/07/... Ini mungkin membahas apa yang Anda lihat dengan EF.
Kris Gruttemeyer
Artikel yang sangat menarik! Terima kasih, saya akan melihatnya :)
xeraphim
1
Periksa repositori statistik tunggu - ASYNC_NETWORK_IO . Gunakan naskah yang disediakan Paulus untuk melihat apakah ada masalah lain.
Kin Shah

Jawaban:

12

ASYNC_NETWORK_IOentah bagaimana menunjukkan bahwa aplikasi klien tidak memproses hasil secepat SQL Server memberi mereka makan. Ini bisa disebabkan oleh masalah dengan aplikasi klien atau dengan koneksi jaringan antara server dan aplikasi klien.

Silakan merujuk ke posting oleh Thomas LaRock

Tunggu ASYNC_NETWORK_IO menunjukkan bahwa salah satu dari dua skenario sedang terjadi. Skenario pertama adalah bahwa sesi (yaitu, SPID) sedang menunggu aplikasi klien untuk memproses set hasil dan mengirim sinyal kembali ke SQL Server bahwa ia siap untuk memproses lebih banyak data. Yang kedua adalah bahwa mungkin ada masalah kinerja jaringan.

atau posting ini oleh Joe Sack

Seperti yang mungkin sudah Anda ketahui, jenis tunggu ASYNC_NETWORK_IO (terlihat pada SQL 2005) dan NETWORKIO (terlihat pada SQL 2000) dikaitkan dengan salah satu aplikasi panggilan yang tidak memproses hasil dengan cukup cepat dari SQL Server atau dikaitkan dengan masalah kinerja jaringan .

Karena Anda menggunakan entity framework posting ini oleh Brent Ozar mungkin berguna juga

Melihat statistik tunggu untuk kueri ini, saya melihat ada banyak ASYNC_NETWORK_IO - sering 1000+ milidetik. Itu juga tidak masuk akal! Bagaimana kueri dengan waktu CPU yang sangat sedikit dan begitu sedikit bacaan yang butuh waktu begitu lama untuk diselesaikan? Tidak seperti aplikasi meminta jutaan baris dan tidak bisa mengkonsumsi hasilnya dengan cukup cepat.

Tom V - coba topanswers.xyz
sumber
6

Ada beberapa kesalahpahaman mengenai jenis tunggu ASYNC_NETWORK_IO, terutama karena nama yang menunjukkan masalah jaringan, tetapi sangat jarang alasan untuk jenis tunggu ini.

Tunggu ASYNC_NETWORK_IO yang berlebihan dapat terjadi dalam dua skenario:

  1. Sesi harus menunggu aplikasi klien untuk memproses data yang diterima dari SQL Server untuk mengirim sinyal ke SQL Server sehingga dapat menerima data baru untuk diproses. Ini adalah skenario umum yang mungkin mencerminkan desain aplikasi yang buruk, dan merupakan yang paling sering menyebabkan nilai tipe tunggu ASYNC_NETWORK_IO yang berlebihan.

    Ini melibatkan menyelidiki aplikasi yang menyebabkan nilai tipe tunggu ASYNC_NETWORK_IO yang berlebihan dan sering berkoordinasi dengan pengembang aplikasi yang membuatnya.

  2. Bandwidth jaringan maksimal. Ethernet yang tersumbat akan menyebabkan lambatnya pengiriman data dari aplikasi. Ini, dengan sendirinya, akan menurunkan efisiensi aplikasi.

Lebih banyak detail dapat ditemukan di halaman ini

Monte Chavis
sumber