SQL Server çöküyor SQL sorguları izleme


9

Bir SQL Server 2008 veritabanı sunucumuz var (MS Yük Devretme Kümelemesi altında çalışıyor, ancak burada alakalı olduğunu düşünmüyorum).

Uygulamamız DB erişimi için Hazırda Bekletme'yi çalıştırır ve son zamanlarda v3.1'den 3.6'ya yükselttiğimizden beri SQL Server'ın düzenli olarak (24-48 saatte bir, ancak bazen daha sık) çökmesini yaşıyoruz.

Söz konusu sorun hafıza ile ilgili görünmektedir. Sunucu çökmeden hemen önce (ve daha sonra yük devretme kümesi yöneticisi tarafından otomatik olarak yeniden başlatıldığında), bu hatalardan bir yük alırız:

Error: 701, Severity: 17, State: 130.
There is insufficient system memory in resource pool 'internal' to run this query.

ayrıca arada sırada (ancak düzenli) mesajlar

Error: 17300, Severity: 16, State: 1. (Params:). The error is printed in terse mode because there was error during formatting. Tracing, ETW, notifications etc are skipped.

Hata: 17312, Şiddet: 16, Durum: 1. (Params :). Biçimlendirme sırasında hata olduğu için hata kısa modda yazdırılır. İzleme, ETW, bildirimler vb. Atlanır.

Ayrıca bazı uygulama düzeyinde hatalar alıyorum

java.sql.SQLException: A time out occurred while waiting to optimize the query. Rerun the query.

ve sonra heyecan verici ve muhtemelen öğretici bir hata:

The query processor ran out of internal resources and could not produce a query plan. 
This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. 
Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

Sunucudaki yük değişmedi, bu yüzden daha önce kendisine gönderilen sorgularla ilgili bir sorun olduğunu göstermediğinde artık belleğinin bitmesi gerekmiyor.

Şimdi soruya - bu hataya neden olan sorguları nasıl izleyebilirim (ve muhtemelen tüm problemler)? Hibernate yükseltmemizden bu yana, SQL Server'da bazı büyük sorgular tetikliyor gibi görünüyor ve bu kırıldı. Olduğu gibi, ne olabileceğine dair bazı fikirlerim var, ancak onları izleyebilmek iyi olurdu.

Tabii ki SQL Server profiler çalıştırabilirsiniz, ancak bir kez bu yapılır (ve büyük miktarda veri üretti - bu meşgul OLTP veritabanı), nasıl sorunlu sorguları bulmak için filtre?

Teşekkürler!


1
Her şey aynı sunucuda mı çalışıyor? Anlam, Java ile uygulama sunucusu da veritabanı sunucusunda çalışıyor mu?
Nisan'da swasheck

1
@ Swasheck'in sorusuyla ilişkili olarak: SQL Server maksimum belleği için açık bir değeriniz var mı? Harici bellek baskısını dışladınız mı?
Mike Fal

Kara kutu izlerine bakmayı denedin mi? Sizi doğru yönde gösterebilirler.
datagod

Ben sadece bu şey çarptı ve iz bıraktığım izleri uygulama açısından boş bir veritabanı gösterir.
Joshua

Tam metin araması kullanıyor musunuz? Ayrıca, üzerinde çalıştığınız sql sunucusunun tam sürüm no + sürümü nedir?
Kin Shah

Yanıtlar:


5

SQL Server'da bellek kullanımını izlemek için DBCC MEMORYSTATUSkomut nasıl kullanılır konusundaki adımları özetleyin . Çözüm eylemi bulgularınıza bağlı olacaktır. Daha erişilebilir olan Microsoft SQL Server Bellek Darboğazlarını Belirleme başlıklı makaleyi de okuyabilirsiniz .

Dikkat edilmesi gereken bir kelime: Suçlanacak bireysel sorguları bulmanız pek olası değildir. Aşağı bellek problemlerini izlemek bundan daha incedir. Kaynaklarınız tükendiğinde ve bir sorgu yetersiz bellek hatası verdiğinde, hatayı atan sorgunun suçlu değil sadece kurban olduğunu unutmayın.


Teşekkürler - Zaten bunlara baktım, ama sorun sunucu iyi çalışıyor gibi görünüyor ve sonra aniden patlama gider, yavaş yavaş bellek tükenmez. Ayrıca çevrimiçi ne hata "Bu sorgu çalıştırmak için 'dahili' kaynak havuzunda yetersiz sistem belleği yok" hata bulabilirsiniz. aslında - DBCC MEMORYSTATUS sonuçları ile ilgili iç kaynak havuzu nedir?

Bu bir geliştirme sunucusu mu? Öyleyse, sorunun giderildiğini doğrulamak için Hazırda Bekleme 3.1'e geçebilir misiniz? İki ilk sorgu satırınız var ve bunlardan birini ortadan kaldırmaya çalışmalısınız, ya SQL Server'ın bellek sınırları ayarlanmış ve bunları aşıyor ya da sistemin başka bir kısmı bellek tüketiyor ve SQL Server sıkılıyor. Hangisinin gerçekleştiğini belirlemek için sistemin çökme zamanlarında profilini oluşturun.
epo

0

Extended EventsOlayları kullanarak yapılandırmaya gitmek istediğiniz görülüyor query_memory_grant_xxxxx.

Bu, istediğiniz zaman okuyabileceğiniz (canlı verileri de izleyebilirsiniz) bilgileri ve depolanan boyut dışı SQL Engine'i günlüğe kaydetmeniz için en iyi seçenektir, sunucu yeniden başlatıldığından farklı olarak depolanan bilgiler silinmez DMVs

Hızlı kurulum adımları ..

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.