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!