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).

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.