SQL Server'larınızla karşılaştığınız ilk 3 performans sorunu nedir?


15

Eindhoven'daki Fontys Üniversitesi'nden bir öğrenciyim ve şu anda bir SQL Server aracının geliştirilmesine yardımcı olmak için bir dizi röportaj yapıyorum ve bu alandaki uzmanlardan geri bildirim almak istiyorum.

Sorularımdan biri:

SQL Server Örneklerinizle karşılaştığınız en iyi 3 performans sorunu nedir ve bu sorunları nasıl tanımlarsınız?

Özellikle senaryolarla ve bunu ölçmek için kullanılan araçlarla ilgileniyorum.

Yanıtlar:


22

Kafamın üstünde - ilk 3 sorgu sorunu:

  • Örtük dönüşümler
  • Kötü endeksleme stratejileri (çok fazla veya yetersiz veya yanlış tür)
  • Yalnızca ihtiyacınız olan alanları adlandırmak yerine SELECT * kullanın

Sunucu düzeyinde yapılandırma sorunları, veritabanı şeması sorunları, donanım sorunları, vb. Etrafında çok daha fazlası var. Bu tür sorunları arayan sunucuları hızlı bir şekilde analiz etmek için bir komut dosyası yazdım:

http://www.brentozar.com/blitz/


15
  • Kötü tasarım / sorgular / dizin oluşturma
  • Doğru donanımı satın alma izni yok
  • Braindead ORM'leri (diğer adıyla "SQL öldü")

14

İlk 3 değil, ama henüz belirtilmemiş şeylerden söz olacağını düşündüm:

  1. SQL, DBA'ya hiçbir ayrıntı / şeffaflık sağlamayan sanal makinelere koydu. Ana makine sunucusu, konuk makinelerinin ayarlarını dinamik olarak değiştirerek performansta düşüşe neden olur ve DBA'yı ipucu olmadan bırakır. Hipertreading, ağ takım oluşturma ve bellek balonlaması gibi özellikler performans sayaçlarını izlemek için hareketli bir hedef haline getirir.Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. Benzer şekilde, DBA'ya sağlanan SAN ayarlarında şeffaflık / doğrulama yapılamaz. Farklı okuma / yazma önbellek tercihleri ​​ile LUN vardı ama hepsi aynı olduğunu söyledi.Tools: IO DMVs, SQLIO.
  3. Bozuk DB mimarisi: verilerin ve günlük dosyalarının boyutlandırılması ve yerleştirilmesi ve tempdb gibi. Paralelliğin yanlış kullanımı. Aynı fiziksel disklerde birden fazla dosya grubu oluşturma.Tools: experience.

Şimdi kontrol ettiğim bir diğer araç da Project Lucy . Düzgün görünüyor.


10
  • uygun indekslerden yoksun
  • Performans sorunlarını çözmek için birisi tarafından üretim kodunda nolock ile kullanımı. Kod tablolardaki verileri değiştirirse özellikle kötü
  • gerekenden daha fazla kez gerekenden daha fazla veri seçerek uygulama. Ex sadece aynı tablonun metin verilerini isteseniz bile bir ikili sahip her zaman döndü.

2
Nolock bahsi için +1. Bildiğim her geliştirici kullanmak için iyi bir fikir olduğunu düşünüyorum çünkü "okumaları tablo kilitlemez"
tucaz

Bir müşteriniz multimoney için bu büyük sistemi satın aldığında nefret etmiyor musunuz ve ilk kez baktığınızda her yerde nolock ile kullanıyorlar mı? Ve sonra ...: - /
Martin Sjöberg

9

Kötü ölçeklenen sorgular (toplanan veriler ve kötü hesaplanan diğer ortalama veriler de dahil olmak üzere tüm sipariş satırları dahil olmak üzere tüm müşteriler için X yılındaki tüm siparişleri alın)

Sadece her şeyi bir kerede sorgulamak.

Her sorguda aranması gereken 'descript' varchar / text alanları içeren tablolar.


7
  • Yanlış bakım, yani dizin yeniden yapılandırması, istatistikler, günlük yedeklemesi yok
  • Eksik dizinler
  • Kötü yazılmış sorgular

7
  • Kötü veritabanı ve uygulama tasarımı
  • platform avantajlarının yetersiz kullanımı (geliştiricilerin platforma entegre veritabanı erişim koduna sahip olmak istedikleri. SP yok, fonksiyon yok vb.)
  • kötü indeksleme elbette.

7
  • eşya verileri hakkında geçici sorgular - evet, geliştiriciler gerekli olduğuna inanıyor ve hatta bazıları erişime sahip olabilir :-)
  • veritabanını kullanan uygulamanın kötü tasarımı - örneğin: artık gerekli olmasa bile çok fazla veri eklendi ve kaldırılmadı (bu da yedeklemelerin büyümesi, bakım görevlerinin daha uzun sürmesi nedeniyle performans sorunlarına yol açıyor .. vb.)
  • aynı raid veya daha kötü, aynı sürücüdeki tüm veritabanı dosyaları (ör: system dbs, tempdb, user dbs hepsi aynı sürücü / raid üzerinde)

3
  • Kötü veritabanı tasarımı
  • Kötü Dizin Oluşturma Stratejisi (çok fazla dizin, eksik dizin ve dizin bakımının olmaması dahil)
  • Kötü donanım mimari kararları

2

Dizinleme performans için kritik öneme sahiptir, ancak çoğu DBA'nın bunu bildiğini gördüm ve bu nedenle sorgu optimizasyonu ile düzeltilen ilk şeylerden biri olma eğilimindedir. Sıklıkla iyi ele alınmayan alanlar:

  1. Çok fazla DB gidiş-dönüşü. Sohbet, gördüğüm ana performans sorunlarından biridir.
  2. Doğru işlem sınırlarını elde etmek. Her INSERT / UPDATE / DELETE işlemi büyük bir performans katili olabilir.
  3. Donanım tarafının optimize edilmemesi; özellikle, DB günlüğünü DB verilerinden farklı bir birime koymak.

Listeye dördüncü bir öğe ekleyebilseydim, tetikleyicilerin ve / veya imleçlerin aşırı ve uygunsuz kullanımı olurdu. Bu günlerde çok fazla görünmüyor, ancak gerçekleştiğinde, performans açısından acı veriyor.

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.