Soru SQL Server üretim ortamında yavaş


Müşterinin üretim ortamında garip bir sorunum var. Altyapı hakkında herhangi bir ayrıntı veremiyorum, ancak SQL sunucusu bir sanal sunucuda çalışır. Veri, günlük ve filestream dosyası başka bir depolama sunucusudur (veri ve filestream birlikte ve ayrı bir sunucuda oturum açar).

Yerel Test ortamımızda, bu sürelerle yürüten belirli bir sorgu var:

  • önce önbelleği temizleriz
  • 300ms (İlk kez daha uzun sürer, ancak bundan sonra önbelleğe alınır.)
  • 20ms
  • 15ms
  • 17ms

Müşterinin üretim ortamında SQL Server daha güçlüdür, süreler bunlardır (önbelleği temizleme hakları yoktu. Bunu yarın deneyeceğim).

  • 2500ms
  • 2600ms
  • 2400ms

Müşterinin üretim ortamında bulunan sunucular daha güçlüdür, ancak sanal sunucuları vardır (biz).

Sebebi ne olabilir ki ...

  • Yeterli hafıza yok?
  • Parçalanma?
  • Fiziksel depolama?

Bu performans sorununu nasıl çözeceksin?

DÜZENLE:

Bazı insanlar veri setinin eşit olup olmadığını sordu. Veritabanımızı çevremizden kurtardım. Baktığım ilk şeyin bu olduğu doğru. (@Everyone: Düzenlemeyi ekledim çünkü birçok kişinin düşüneceği ilk şey olacak).


6
2018-03-18 22:27


Menşei


Müşterinin üretim ortamında bulunan sunucular daha güçlüdür, ancak sanal sunucuları vardır (biz). - lütfen açıkla. Donanımları daha güçlü olduğu anlamına geliyor, ancak sanal bir sunucuda çalışıyorlar. VIRTUAL SERVER'in daha güçlü olup olmadığını hiç kontrol ettiniz mi? - TomTom
Aslında, TomTom, sanal sunucunun da daha güçlü olduğunu söylüyorlar. Sanal sunucunun özelliklerini sorsam, bu özel bir sunucunun (sanal değil) özelliklerine sahip olmakla aynı mı olurdu? - Lieven Cardoen


Cevaplar:


Nedeni, bellek, parçalanma, fiziksel depolama ve paralellik, çekişme, farklı masa boyutları, farklı istatistikler, farklı SQL yama düzeyleri ve benzeri farklı derecelerde farklı ayarlar olmayabilir.

Yani gerçekten bir soru değil ne yanlış, aksine nasıl belirlenir Yanlış olan ne. Benim her zamanki tavsiyem, temelde benim tecrübemde değil bu veya o, kullanmaktır Bekler ve Kuyruklar metodolojisi. Bu, nihai olarak suçluyu tanımlayacak ve bununla çözüm olacak, oldukça yöntemli bir yaklaşımdır.


9
2018-03-18 22:37



Bekler ve kuyruklar için +1 - Nick Kavadias


Bellek, CPU, ağ veya disk çekişmesi olabilir, ancak müşterinin veri seti daha büyük mü?

İlk adımınız, satırları taramadığından emin olmak için sorguda bir yürütme planı almak olacaktır. Öncelikle, sorgularını veritabanını daha önce belirttiğinizden beri optimize etmelisiniz. SQL Server Query Analyzer bunun için en iyi araçtır.


3
2018-03-18 22:38



+1, gerçekçi olmayan test veri boyutları ile yakılması kolaydır. Daha derine inmeden önce bunu kontrol ettiğinden emin ol. - roufamatic
Müşteriden db'yi kendi sql sunucumuzda geri yükledim, böylece veriler aynı olurdu. Yürütme planı zaten incelendi ve sorguyu geliştirdim. Yine de, bu sadece benim için problemi görmezden geliyor, çünkü milisaniyeye baktığımızda açıkçası bir problem var. Sorgu o kadar kötü olursa, sunucumuzda da görünür. Orada sunucu yüzlerce kez daha yavaş gidiyor. - Lieven Cardoen


İstatistikler güncel değilse, sisteminizle aynı verilerde bile farklı bir sorgu planı oluşturabilir. Koşardım EXEC sp_updatestats ve bunun fark yaratıp yaratmadığını görün.


3
2018-03-18 22:43



Thx, bu ilk şeyi yarın yapacak. - Lieven Cardoen
Bu sorgu gerçekten benim durumumda çalıştı. Sorgumun bir sistemde neden yavaş olduğu konusunda kafam çok karışıktı ama başka bir yerde çalışıyordu. - user1400290


Bunu yapan bir sunucumuz vardı. Görünüşe göre, birisi veritabanı dosyalarını bir RAID 3 dizisinde ayarladı ... iyi bir fikir değil!

Elbette, bu gerçekten bir şey olabilir, ancak disk yapılandırmasının ne olduğunu kontrol ettiğinizden emin olun.


2
2018-03-18 22:32



Tamam, ihtiyacım olan bu tür cevaplar. Bunun neden bu kadar kötü bir fikir olduğuna dair bir bağlantınız var mı? Bu arada RAID'in ne olduğunu biliyorum. Senkronizasyon nedeniyle kötü mü? - Lieven Cardoen
baarf.com - Bu sayfayı yeni buldum ... komik, ama iyi bir bilgi veriyor


Bu şeylerden herhangi biri olabilirdi. Sanki bir tür SAN (s) kullandığınız için sesler de yavaş bir ağ (ya da ağdaki bir problem) olabilir.

Veri ölçeği, müşteri ortamında test ortamıyla aynı mı? Bu, bir çok geliştiricinin, üretimdeki veri ölçeğini simüle etmeyen bir veri kümesinde performansı test etmesinin bir hatasıdır.

Profiler ve PerfMon'a erişiminiz varsa, sorunu çok hızlı bir şekilde daraltabilirsiniz.


2
2018-03-18 22:36



Evet, ms verileri Profiler'den geliyor. Erişimim var. Veri ölçeği eşittir. - Lieven Cardoen


Bunu hata ayıklamanın önerilen yolu, SQL Server'ı incelemektir. performans sayaçları (Başlat / Çalıştır / perfmon.exe). Sizin durumunuzda hangisinin alakalı olduğunu öğrenmek biraz zaman alır, ama kesinlikle buna değer ve bu tür bir problemi tam olarak belirlemenize yardımcı olur.

Bana iyi görünen bazı hızlı bağlantılar. Google daha çok şey biliyor:


2
2018-03-18 22:42





Üretim sunucusu test kurulumunuzla aynı mı?

  1. Db sunucusunda başka bir şey çalıştırıyorlar mı
  2. Sunucuda çalışan herhangi bir virüs koruması
  3. Windows defansörü kaçıyor?
  4. Sistemi saran başka bir süreç

Veri kayıtlarının ve dosya sisteminin bir depolama sunucusunda olduğunu, bunun ne ile bağlantılı olduğunu söylüyorsunuz? Fiber kanal, 10/100 / 1GB? scsı? Fiber kanaldan başka bir şey yavaş olacaktır!

Depolama sunucusu db sunucusuna ayrılmış mı? Kaynaklar için mi savaşıyorsunuz?


1
2018-03-18 23:16





Kullanılan sanallaştırma teknolojisine bağlı olarak, sanal sunucu, özellikle disk G / Ç'leriyle ilgili olarak gerçekten daha kötü performans gösterebilir. Sanal makinede disk erişimi, sanal diskteki komutları fiziksel diskteki komutlara çeviren bir öykünme veya sürücü katmanı tarafından işlenebilir. Bu öykünme genellikle önemli ölçüde ek gecikme sağlar ve temeldeki disk dizisinin uygun avantajlarından yararlanamayabilir.


1
2018-03-19 10:31