Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Belirtiler
SQL Server sonuç kümeleri oluşturduğunda ve sonuçları bir çıkış arabelleğine koyarak bunları bir istemci uygulamasına gönderdiğinde, istemci uygulaması bunları çıkış arabelleğinden getirir. İstemci uygulaması durursa veya sonuçları yeterince hızlı getirmezse SQL Server'ın, daha fazla sonuç göndermeden önce, istemci uygulamanın tüm sonuçları aldığına dair onay beklemesi gerekir. Bu bekleme, olarak ASYNC_NETWORK_IO
gösterilir. Daha fazla bilgi için SQL Server'da ASYNC_NETWORK_IO Beklemelerini Anlama başlıklı videoya bakın.
Aşırı ASYNC_NETWORK_IO beklemeleri iki soruna neden olabilir:
Toplam süreleri daha uzun olacağı için sorgular yavaşlayabilir.
SQL Server istemcinin sonuçları getirmesini beklediğinde alınan kilitleri serbest bırakamaz. Kilit uzun süre serbest bırakılmazsa SQL Server'da diğer oturumlar engellenir.
Nedenler ve çözümler
Aşağıdaki bölümlerde bu bekleme türünün yaygın nedenleri ve sorunu çözmek için ilgili adımlar listelenmektedir:
Büyük sonuç kümesi
Bazı uygulama istemcileri binlerce, hatta milyonlarca satır ister ve ardından filtreler, sıralama ve toplamalar uygulayarak sonuçları işler. Büyük sonuç kümeleri gereksiz ağ kullanımına ve istemci uygulama işlemesine yol açabilir.
Çözüm: Uygulama geliştiricilerinin SQL Server ile istemciler arasındaki işlemeyi dikkatle dengelemesi gerekir. Filtreleme veya toplama işlemleri SQL Server tarafından gerçekleştirilebilir ve sonuç kümesi küçük olabilir. İstemcilere ulaşan sonuç kümesini sınırlayın. Veriler alındıktan sonra veriler, sunu ve biçimlendirme üzerinde daha fazla hesaplama istemci tarafında daha uygundur.
Uygulama sonuçları yeterince hızlı getirmiyor
İstemci uygulaması sonuçları yeterince hızlı getirmezse ve sonuç kümesinin alındığını SQL Server'a bildirmezse, ASYNC_NETWORK_IO
sunucuda bekleme gerçekleşir.
ADO.NET kullanarak göstermek için DataSet ve DataTable varsayılan olarak istemcinin erişebilmesi için tüm satırları tamamlamaya getirir. Ancak SqlDataReader gibi sınıflar, uygulama geliştiricisinin her satır sunucudan getirildikten sonra ne yapacağını seçmesine olanak sağlar. Bir uygulama bir kerede bir satır getirebilir ve sonra bu satırı iş gereksinimlerine göre işleyebilir. Örneğin:
Satırı bir dosyaya yazın.
Satırı ağ üzerinden başka bir uygulamaya gönderin.
Bir süre bekleyin veya kullanıcı girişi için bekleyin.
Çözüm: Sorunu çözmek için, sıkı bir WHILE/FOR döngüsü kullanarak tüm sonuçları istemcinin olabildiğince hızlı bir şekilde getirin. Bu, sonuçların bellekte depolanması ve yalnızca daha sonra daha fazla işlem yapılması anlamına gelir.
İstemci uygulama makinesi stres altında (G/Ç, bellek veya CPU)
Uygulama kodu sonuçları olabildiğince hızlı getirmek için geliştirilmiş olsa bile sistem kaynağı sorunları istemci işleminin tamamının yavaş olmasına neden olabilir. Örneğin:
İstemci uygulamasını çalıştıran makine kaynak kısıtlamalarına sahipse uygulama sonuçları hızla getirmeyebilir. Örneğin:
%100 CPU kullanımı
Yetersiz bellek (tüm bellek tüketilir)
Yavaş G/Ç (uygulama sonuçları veya günlükleri yazıyor olabilir)
Bu kaynak kısıtlamaları, gelen sonuçların yavaş işlenmesine ve SQL Server'ın bekleme türüyle ASYNC_NETWORK_IO
karşılaşmasına neden olabilir.
Çözüm: Bu sorunu çözmek için Performans İzleyicisi gibi araçları kullanarak uygulamayı çalıştıran sistemi tanılayın ve ardından kaynak kısıtlamalarını ortadan kaldırın. Aşağıdaki yöntemlerden biri sizin için uygun olabilir:
Diğer uygulamaların çalışmasını durdurun.
Bu uygulamalardaki kod sorunlarını düzeltin.
Uygulamalar tam olarak ayarlandıysa sistemdeki donanımı yükseltin.
NIC/Ağ
Yavaş ağ veya Ağ Arabirim Kartları (NIC) ağ trafiğinde gecikmelere neden olabilir ve doğal olarak sonuçların getirilip SQL Server ile iletişimin gecikmesine neden olur. Ağ gecikmeleri genellikle aşağıdaki sorunlardan kaynaklanıyor:
Ağ bağdaştırıcısı sürücüsü sorunları
Ağ filtresi sürücüleri sorunları
Yanlış yapılandırılmış veya hatalı güvenlik duvarları
Yönlendirici sorunları
Trafik nedeniyle aşırı yüklenmiş ağlar (daha az yaygın)
Çözüm: Bu sorunları tanılamak için bir ağ izlemesi toplayabilir ve paket sıfırlamalarını ve yeniden aktarımları arayabilirsiniz. Ardından paket sıfırlamalarını/yeniden aktarımları ortadan kaldırmak için ağ ile ilgili sorunu çözebilirsiniz.