Jos*_*ant 7 performance sql-server sql-server-2008-r2 query-performance
我有一个运行 SQL Server 2008 R2 的生产数据库服务器。如何防止对一个数据库的用户查询占用所有系统资源并使服务器上的所有数据库陷入困境?
我遇到的具体问题是带有长时间运行的游标的查询。每当运行查询时,所有内核上的 CPU 使用率都会达到 100%,甚至其他数据库上的简单查询也会减慢或超时。这是否正常?防止这种情况的最佳做法是什么?
如果您使用的是企业版,则可以使用资源调控器(几年前我为 Microsoft 撰写了有关此主题的白皮书)。如果您可以仅识别此用户(通过SUSER_SNAME()
或HOST_NAME()
),这将特别有效。不幸的是,这不能用于仅对一个查询进行限制 - 它在登录时实施并影响其会话生命周期内的所有查询,但您当然可以总体上限制他们的 CPU。请注意,在 SQL Server 2008 和 R2 中,仅当框上存在其他争用时才会强制执行此约束。在 SQL Server 2012 中,有一项新设置 ( CAP_CPU_PERCENT
) 允许您限制资源池的 CPU,即使它们是盒子上唯一的资源池。
解决问题的另一种方式(或其他方式),假设您可以控制查询文本本身(例如,它不是由用户或其应用程序组装的临时),就是让该特定查询始终运行OPTION (MAXDOP 1)
- 它会仍然会导致 CPU 过高,并且查询很可能需要更长的时间,但您可以使用该设置来限制它影响的调度程序数量。因此,在 16 核机器上,您只会看到一个 CPU 峰值,作为此特定查询的直接结果。
归档时间: |
|
查看次数: |
9990 次 |
最近记录: |