Apakah ASYNC_NETWORK_IO tunggu, ketik apa saja yang perlu dikhawatirkan?

16

Dalam melihat daftar prosedur tersimpan yang membutuhkan waktu lama untuk dieksekusi, salah satu yang paling menyebabkan menunggu. Namun, sebagian besar dari penantian itu (81%) adalah ASYNC_NETWORK_IO dan saya tahu mengapa: prosedur tersimpan mentransfer sekitar 400 MB informasi.

Dalam dokumentasi, itu menyatakan bahwa penyebab ASYNC_NETWORK_IO adalah bahwa klien tidak dapat mengikuti banjir data dan itu mungkin benar. Saya tidak yakin bagaimana membuat klien mengikuti karena yang dilakukannya hanyalah memanggil prosedur yang tersimpan melalui ADO.NET dan kemudian hanya memproses dataset.

Jadi, mengingat informasi ini, haruskah saya khawatir tentang jenis tunggu ASYNC_NETWORK_IO untuk prosedur ini? Apakah ini sebenarnya berpengaruh pada kinerja server?

Informasi tambahan:

  • Saya menggunakan paket layanan 2 dari SQL Server 2005.
  • Aplikasi klien ada di kotak yang sama dengan SQL Server (saya tahu, saya tahu ... tapi saya tidak bisa berbuat apa-apa).
AngryHacker
sumber
1
Cara terbaik untuk memikirkan jenis penantian ini adalah tidak ada permintaan Anda yang menyebabkannya - ini mengembalikan data ke klien. Anda juga akan melihat ini banyak dari Anda telah menautkan tabel di Access. Satu kemungkinan tergantung pada aplikasi klien Anda adalah memecah data menjadi potongan-potongan kecil atau hanya mengembalikan lebih sedikit data. Jika itu bukan opsi, Anda mungkin akan terbatas pada apa yang dapat Anda lakukan untuk menguranginya.
JNK
Apakah aplikasi klien terhubung menggunakan Shared Memory atau TCP / IP? Apakah aplikasi klien dan SQL Server berbagi rangkaian prosesor yang sama, atau apakah Anda menggunakan teknik masking afinitas untuk memisahkannya?
Jon Seigel
Ini adalah tipe koneksi default - tidak ada yang istimewa - jadi itu menggunakan Memori Bersama. Kedua aplikasi menggunakan set core yang sama - tidak ada afinitas.
AngryHacker
Apakah SAN penyimpanan Anda atau lokal?
Eric Higgins
@EricHiggins Hanya satu set lokal hard drive RAID.
AngryHacker

Jawaban:

14

Seperti yang Anda katakan, tipe tunggu ini menunjukkan bahwa aplikasi tidak mengikuti SQL Server. Sekarang maksudnya adalah, SQL Server tidak dapat mengirim data melalui jaringan secepat yang diinginkan.

Ada dua penyebab mendasar:

  1. Aplikasi ini ditulis secara tidak efisien dan tidak memproses baris dengan cukup cepat.
  2. Jaringan dimaksimalkan.

Jika aplikasi itu sendiri terlalu lambat tidak akan ada atau tidak ada dampak signifikan pada kinerja permintaan lainnya. Jika di sisi lain pipa terlalu kecil, permintaan lain tidak dapat mengirim hasilnya juga dan harus menunggu.

Namun dalam kasus terakhir Anda akan memiliki semua koneksi menunggu di ASYNC_NETWORK_IO. Anda harus bisa melihat dampak itu dengan jelas.

Sebastian Meine
sumber
Untuk poin 1. Pengambilan data dilakukan melalui ADO.NET menggunakan kode standar: var dataSet = new DataSet(); var da = new SqlDataAdapter(command); da.Fill(dataSet); Jadi saya tidak yakin apa yang sebenarnya bisa lambat.
AngryHacker
Untuk poin 2. Aplikasi berada pada kotak yang sama dengan SQL dan koneksi melalui metode Memori Bersama. Jadi secara teoritis itu harus super cepat.
AngryHacker