SQL Server 2016 ile garip performans sorunu


14

Bir VMware sanal makinede çalışan tek bir SQL Server 2016 SP1 örneğimiz var. Her biri farklı bir uygulama için 4 veritabanı içerir. Bu uygulamaların hepsi ayrı sanal sunucularda. Bunların hiçbiri henüz üretimde değil. Ancak uygulamaları test eden kişiler performans sorunlarını bildiriyor.

Bunlar sunucunun istatistikleri:

  • 128 GB RAM (SQL Server için 110GB Maks bellek)
  • 4 Çekirdek @ 4.6 GHz
  • 10 GBit ağ bağlantısı
  • Tüm depolama alanı SSD tabanlıdır
  • Program dosyaları, Günlük dosyaları, veritabanı dosyaları ve tempdb, sunucunun ayrı bölümlerinde bulunur
  • asd

Kullanıcılar C ++ tabanlı bir ERP uygulaması üzerinden tek ekran erişimi gerçekleştiriyor.

SQL Server'ı Microsoft'un ostressbirçok küçük sorguyu veya büyük bir sorguyu kullanarak test ettiğimde, maksimum performans elde ederim. Kısıtlayan tek şey müşteri, çünkü yeterince hızlı cevap veremiyor.

Ancak neredeyse hiç kullanıcı olmadığında, SQL Server neredeyse hiçbir şey yapmaz. Ancak insanlar sadece uygulamada bir şey kaydetmek için sonsuza kadar beklemek zorunda.

Paul Randal'ın " Bana nerede acı verdiğini söyle " sorgusuna göre, tüm bekleme olaylarının% 50'si ASYNC_NETWORK_IO.

Bu, bir ağ sorunu veya uygulama sunucusu veya istemcisinde performans sorunu anlamına gelebilir. Bunların hiçbiri kaynaklarını maksimum kapasitede kullanmıyor. Çoğu zaman CPU tüm makinelerde% 26 civarındadır (İstemci, uygulama sunucusu, db sunucusu).

Ağ bağlantısının gecikmesi 1-3ms civarındadır. Uygulama ile normal kullanım sırasında db sunucusunun GÇ maksimum 20MB / s yazma hızındadır (ort. 7-9MB / s). Stres testi yaptığımda maksimum 5GB / s alırım.

Arabellek önbellek boyutu ERP sistemimizin DB'si için 60GB, finansman yazılımımız için 20GB, kalite güvence yazılımı için 1GB, belge arşivleme sistemi için 3GB'dir.

SQL Server hesabına Anında Dosya Başlatma özelliğini kullanma hakkı verdim . Bu, performansı en ufak bir şekilde artırmadı.

Normal kullanım sırasında sayfa ömrü yaklaşık 15k + 'dır. Beklenecek olan ağır stres testinin sonunda .05k civarında düşer. Parti / sn, iş yüküne bağlı olarak 2-8k civarındadır.

ERP uygulamasının sadece kötü yazılmış olduğunu söyleyebilirim, ancak yapamıyorum çünkü tüm uygulamalar etkilendi. Minimum iş yükünde bile.

Ancak buna neyin sebep olduğunu tam olarak anlayamıyorum. Herhangi bir ipucu, ipucu öğretici, uygulama, en iyi / en kötü uygulama belgeleri veya bu sorunla ilgili aklınıza gelen başka bir şey var mı?

Bunlar sp_BlitzFirst:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

600 saniye çalıştırdım. Uygulamanın yüksek bir iş yükü sırasında başlattım. Zamanın 1 / 3'ü ASYNC_NETWORK_IO. Ben de birlikte ağ bağlantısını test NTttcp, PsPing, ipferf3, ve pathping. Alışılmadık bir şey yok. Tepki süreleri en fazla 3ms, ortalama 0.3ms'dir. Verim yaklaşık 1000 MB / s'dir.

Araştırmam her zaman bir ASYNC_NETWORK_IOnumaralı waitstat oldu.

VMware'deki Large-Receive-Offloadözelliği devre dışı bırakmanın sonucunu araştırdık . Hala test ediyoruz, ancak sonuçlar tutarsız görünüyor. İlk 'karşılaştırmalı değerlendirmemiz' 19 dakika sürdü (en iyi sonuç 13 dakikadır, bu da yalnızca uygulama VM'de SQL uygulamasıyla çalıştığında elde edilir). İkinci sonuç 28 dakika, bu gerçekten kötü.

'Benchmark'ımızın ilk sonucu 19 dakikadır. Hangisi iyi. En iyi sonuç 13 dakika olduğu için (bu yalnızca uygulama VM'de SQL Server'ın kendisi ile kıyaslandığında elde edilebilir). Bu, ağla ilgili bazı sorunlara şiddetle işaret eder. Veya VMware yapılandırmasıyla ilgili bir sorun.

Şu anda hangi darboğazda çivilemek için hangi yöntemleri kullanacağım kayboluyorum.

Uygulama ile maksimum performans ancak uygulama VM üzerinde SQL Server ile çalıştığında elde edilebilir. Uygulama başka bir VM veya sanal masaüstünde yürütülürse, karşılaştırmalı değerlendirmemizin süresi üç katına çıkar (13 dakikadan 40 dakikaya veya daha fazla). Tüm uç noktalar (SQL Server'ın VM'si, uygulama sunucusunun VM'si ve Sanal Masaüstü) aynı fiziksel donanımı kullanıyor. Diğer tüm uç noktaları başka bir donanıma taşıdık.

EDIT: Sorun geri döndü gibi görünüyor. Enerji tasarruf modunu dengeliden yüksek performansa ayarladıktan sonra, aslında tepki sürelerini önemli ölçüde geliştirdik. Ama bugün sp_BlitzFirst'i 300 saniyelik bir örnekle tekrar çalıştırdım. Sonuç budur:

Sonuç bu

ASYNC_NETWORK_IO için sp_blitzfirst'in kaç saniye sürdüğünden daha fazla bekleme süresi gösterir.

Yanıtlar:


18

Birincil bekleme durumunuz varsa ASYNC_NETWORK_IO, sorun SQL Server'da değildir. Neredeyse her zaman bir uygulama darboğazı nedeniyle. Uygulama sunucusunda bir darboğaz değil, uygulamada bir darboğaz demek.

Uygulama darboğazı genellikle SQL Server verileri gönderirken satır satır işlemden kaynaklanır:

  • Uygulama SQL Server'dan veri istiyor
  • SQL Server verileri hızlı gönderiyor
  • Uygulama, SQL Server'a her satırı işlerken beklemesini söylüyor
  • ASYNC_NETWORK_IOUygulama beklemesini söylerken SQL Server bekleme süresini kaydeder

Bunun yerine, uygulamanın SQL Server'daki tüm verileri tüketmesi gerekir ve SONRA, satır satır işlemlerini yapar. SQL Server bu noktada resim dışında.

sp_BlitzFirst çıktı

LCK_M_SBekleme yüksek değildir. Üzerinde 30 saniyelik numunenin sadece 2 saniyesi vardır ve ortalaması sadece 400 ms'dir. Sorun çok, çok olası değil. ASYNC_NETWORK_IObu örnekte en iyi beklemeniz. Yine de bir uygulama sorunu. İşlerle ilgili yardım almak isterseniz LCK, ilgili sorguları görmemiz gerekir.

Hatta ASYNC_NETWORK_IObu örnekteki kadar da kötü değil. Bekleme süresi numune boyutuna eşit veya daha büyük olduğunda gözlerim büyür. İşte o zaman içeri giriyorum.

Senin tüm sorunun ASYNC_NETWORK_IO. Bu bir SQL Server sorunu değil. Uygulama (SQL Server veri gönderirken satır satır işlem yapmak), uygulama sunucusu (zaten iyi olduğunu söylediniz) veya ağ (ağın iyi olduğunu söylediniz) ile ilgili bir sorun var. Yani sorun uygulama ile. C ++ uygulamasının düzeltilmesi gerekiyor.


6

Kendi sorumu yanıtlamak için: ASYNC_NETWORK_IO'nun SQL Server'ımızda en iyi bekleme türü olarak görünmesinin ana nedeni energy saving, windows sunucusu ayarının 'balanced'yerine ayarlanmış olmasıdır 'high performance'. Daha sonra bazı vm ware yöneticileri ile konuştuk ve hepsi bu ayarın performansı öldürdüğünü söyledi .

Bunun için çözümler:

  • Windows sunucusunu kurarken enerji kontrolü yüklemeyin
  • Grup ilkesi aracılığıyla tüm sunucu için enerji tasarrufu modunu yüksek performansa ayarlayın

ASYNC_NETWORK_IO ile ilgili diğer tüm sorunlar / istatistikler ERP uygulamamızın kötü yazılmasıyla ilgilidir. Bu sorunu çözmede bana yardımcı olan herkese teşekkürler, yorumlarınız, önerileriniz ve tavsiyeleriniz çok hoş ve yararlı oldu!


Birçok BIOS, şimdi NIC enerji yönetimi gibi enerji tasarrufları üzerinde daha ayrıntılı bir kontrole sahiptir. Hala frekans ölçeklendirmesinin mümkün olup olmadığını merak ediyorum ve sadece enerji tasarrufu modlarını devre dışı bırakarak NO'da IO beklemekten kaçının.
ajeh
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.