Kami memiliki server database SQL Server 2008 (kebetulan berjalan di bawah MS Failover Clustering, tapi saya tidak berpikir itu relevan di sini).
Aplikasi kami menjalankan Hibernate untuk akses DB, dan karena kami meningkatkan baru-baru ini dari v3.1 ke 3.6, kami telah mengalami SQL Server crashing secara teratur (setiap 24-48 jam, tetapi kadang-kadang lebih sering).
Masalah spesifik yang dimaksud tampaknya terkait dengan memori. Tepat sebelum server crash (dan kemudian restart secara otomatis oleh failover cluster manager), kami mendapatkan banyak kesalahan ini:
Error: 701, Severity: 17, State: 130.
There is insufficient system memory in resource pool 'internal' to run this query.
juga pesan sesekali (tetapi reguler) dari
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.
Kesalahan: 17312, Tingkat Permasalahan: 16, Negara: 1. (Params :). Kesalahan dicetak dalam mode singkat karena ada kesalahan selama pemformatan. Tracing, ETW, notifikasi dll dilewati.
Saya juga mendapatkan beberapa kesalahan tingkat aplikasi seperti
java.sql.SQLException: A time out occurred while waiting to optimize the query. Rerun the query.
dan kemudian kesalahan yang menarik dan mungkin bersifat instruktif:
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.
Beban di server tidak berubah sehingga tidak ada alasan sekarang seharusnya kehabisan memori ketika sebelumnya tidak menunjukkan masalah dengan permintaan yang dikirim ke sana.
Sekarang untuk pertanyaan - bagaimana cara melacak kueri yang menyebabkan kesalahan ini (dan dengan demikian mungkin semua masalah)? Sepertinya sejak upgrade Hibernate kami, telah meluncurkan beberapa pertanyaan besar di SQL Server, dan itu rusak. Ketika itu terjadi, saya memiliki beberapa ide tentang apa yang mungkin terjadi, tetapi akan baik untuk dapat melacaknya.
Saya tentu saja dapat menjalankan profiler SQL Server, tetapi setelah ini dilakukan (dan menghasilkan sejumlah besar data - ini adalah database OLTP yang sibuk), bagaimana cara saya memfilter untuk menemukan pertanyaan yang bermasalah?
Terima kasih!