我们有一台SQL Server 2008数据库服务器(它恰好在MS故障转移群集下运行,但是我认为这与这里无关)。
我们的应用程序运行用于数据库访问的Hibernate,并且由于我们最近从v3.1升级到3.6,所以我们一直在定期遇到SQL Server崩溃(每24-48小时,但有时更频繁)。
有问题的具体问题似乎与内存有关。在服务器崩溃之前(然后由故障转移群集管理器自动重新启动),我们得到了以下错误的负载:
Error: 701, Severity: 17, State: 130.
There is insufficient system memory in resource pool 'internal' to run this query.
偶尔(但定期)的消息
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.
错误:17312,严重性:16,状态:1。(参数:)。由于格式化期间出错,因此以简洁模式打印错误。跟踪,ETW,通知等将被跳过。
我也遇到一些应用程序级错误,例如
java.sql.SQLException: A time out occurred while waiting to optimize the query. Rerun the query.
然后是令人兴奋的,可能是有启发性的错误:
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.
服务器上的负载没有改变,因此,当以前没有指示发送查询到服务器的问题时,没有理由现在应该耗尽内存。
现在要问的问题-我如何跟踪引起此错误的查询(因此可能是所有问题)?自从我们进行Hibernate升级以来,似乎已经在SQL Server上引发了一些大查询,而这已经打破了它。碰巧的是,我对它们可能是什么有一些想法,但是能够对其进行跟踪会很好。
我当然可以运行SQL Server事件探查器,但是一旦完成(并产生了大量数据-这是一个繁忙的OLTP数据库),如何过滤以查找有问题的查询?
谢谢!