Neden async_network_io bekleme türleri oluşur?


10

Geçen hafta veritabanımızda garip bir şey oldu. Birdenbire, uygulama yeni varlıkları vb. Kaydedemeyen kullanıcılarımız için engellendi. SQL Server'ın Etkinlik Monitörüne (2008 uyumluluk modu 2005 ile) baktıktan sonra aşağıdaki üç girişi gördüm:

async_network_io bekleme türleri

Bir süre sonra, kullanıcılar bir bağlantı zaman aşımı aldı. Süreci 64 öldürdüğümde tekrar normal şekilde kurtarabilirlerdi.

Sorun, blok sırasında kaydetmeye çalıştıkları varlıkların DB'ye bir kereden fazla (3 defaya kadar) eklenmiş olmalarına rağmen, bunun olmasını önlemek için kod olması gerekir (benzersiz olması gereken bir sayı sütunu, ancak bir kısıtlama olmaksızın) ... kontrol kodda gerçekleşir).

Entity Framework 6.0 kullanıyoruz.

  • Bu ASYNC_NETWORK_IO bekleme türlerinin neden ve ne zaman oluştuğunu ve bunlardan nasıl kaçınacağınızı bilen var mı?
  • Ve tam olarak ne anlama geliyorlar?

1
Doug Lane'den bu makaleye bir göz atın: brentozar.com/archive/2015/07/… Bu, EF ile gördüklerinizi ele alabilir.
Kris Gruttemeyer

Çok ilginç bir yazı! Teşekkür ederim, ona bir göz
atacağım

1
Bekleme istatistikleri deposunu kontrol edin - ASYNC_NETWORK_IO . Paul'ün başka sorunlar olup olmadığını görmek için sağladığı komut dosyasını kullanın.
Kin Shah

Yanıtlar:


12

ASYNC_NETWORK_IOher nasılsa, istemci uygulamasının sonuçları SQL Server'ın beslediği kadar hızlı işlemediğini gösterir. Bunun nedeni, istemci uygulamasındaki bir sorun veya sunucu ile istemci uygulaması arasındaki ağ bağlantısı olabilir.

Lütfen Thomas LaRock'un gönderisine bakın

ASYNC_NETWORK_IO bekleme durumu, iki senaryodan birinin gerçekleştiğini gösterir. İlk senaryo, oturumun (yani, SPID) istemci uygulamasının sonuç kümesini işlemesini ve SQL Server'a daha fazla veri işlemeye hazır olduğuna dair bir sinyal göndermesini beklemesidir. İkincisi bir ağ performansı sorunu olabilir.

ya da bu yazı Joe Sack

Zaten farkında olabileceğiniz gibi, ASYNC_NETWORK_IO (SQL 2005'te görülür) ve NETWORKIO (SQL 2000'de görülür) bekleme türleri, SQL Server'dan sonuçları yeterince hızlı işlemeyen veya bir ağ performansı sorunuyla ilişkili bir çağrı uygulamasıyla ilişkilendirilir .

entity framework Bu yazıyı Brent Ozar tarafından kullandığınız için de yararlı olabilir

Bu sorgular için bekleme istatistiklerine baktığımda, çok sayıda ASYNC_NETWORK_IO - genellikle 1000+ milisaniye olduğunu gördüm. Bu da bir anlam ifade etmiyor! Çok az CPU zamanı ve çok az okuma içeren bir sorgunun tamamlanması nasıl bu kadar uzun sürebilir? Uygulama milyonlarca satır istiyor gibiydi ve sonuçları yeterince hızlı tüketemedi.


6

ASYNC_NETWORK_IO bekleme türüyle ilgili olarak, öncelikle ağ sorununu gösteren ad nedeniyle bazı yanlış algılar vardır, ancak bu bekleme türünün nedeni oldukça nadirdir.

İki senaryo altında aşırı ASYNC_NETWORK_IO beklemeleri oluşabilir:

  1. Oturum, SQL Server'a işlenmek üzere yeni verileri kabul edebileceği sinyalini göndermek için istemci uygulamasının SQL Server'dan alınan verileri işlemesini beklemelidir. Bu, kötü uygulama tasarımını yansıtabilen yaygın bir senaryodur ve çoğu zaman aşırı ASYNC_NETWORK_IO bekleme türü değerlerinin nedenidir.

    Bu, aşırı ASYNC_NETWORK_IO bekleme türü değerlerine neden olan uygulamanın araştırılmasını ve genellikle onu oluşturan uygulama geliştiricileriyle koordinasyonu içerir.

  2. Ağ bant genişliği maks. Tıkalı bir Ethernet, uygulamadan ileri geri veri aktarımına neden olur. Bu, kendi başına, uygulamanın verimliliğini azaltacaktır.

Bu sayfada çok daha fazla ayrıntı bulunabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.