如何限制SQL查询CPU利用率?

时间:2009-01-07 14:47:22

标签: sql-server performance sqlprofiler

运行通过我的ASPX页面构建的大型SQL查询后,我看到sql profiler中列出了以下两个项目。

 Event Class            TextData                                           ApplicationName             CPU    Reads   Writes
    SQL:BatchCompleted     Select N'Testing Connection...'               SQLAgent - Alert Engine     1609     0 0
    SQL:BatchCompleted     EXECUTE msdb.sbo.sp_sqlagent_get_perf_counters SQLAgent - Alert Engine     1609     96    0

这些CPU与查询相同,所以查询实际上需要1609 * 3 = 4827?

案件也是如此:

Audit Logout

我可以限制吗?我正在使用sql server 2005。

4 个答案:

答案 0 :(得分:3)

首先,您在SQL事件探查器中看到的一些内容是累积的,因此您不能总是只添加数字。例如,SPCompleted事件将显示构成它的所有SPStatementCompleted事件的总时间。不知道这是不是你的问题。

改善CPU的唯一方法是实际改进查询。确保使用索引,最小化读取的行数等。使用经验丰富的DBA处理其中某些技术,或read a book

我能想到的其他缓解措施只是限制查询运行的 CPU数量(这称为并行度,或 DOP )。您可以在服务器级别设置它,或在查询级别指定它。如果您有一个多处理器服务器,这可以确保单个长时间运行的查询不会占用盒子上的所有处理器 - 它将使一个或多个处理器空闲以供其他查询运行。

答案 1 :(得分:2)

SQL Server 2008有一个新的“资源调控器”可能有所帮助。我不知道您是否使用过SQL Server 2008,但您可能需要查看here

答案 2 :(得分:2)

不,总共需要1609毫秒的CPU。持续时间是多少? 我打赌相同或稍微多一点,因为我怀疑SQL Agent查询使用并行性。

您是否尝试使用CPU减少后台进程?如果是这样,那么您通过禁用SQL代理(例如,没有备份)并使用switch -x

重新启动SQL Server来减少功能

您也无法停止“审核注销”事件......这是断开或关闭连接时发生的情况。

但是,你最大化处理器?如果是这样,您需要区分查询的“用户”内存和用于分页的“系统”内存或(上帝禁止)在RAID 5磁盘上生成奇偶校验。

高CPU通常可以通过更多RAM和更好的磁盘配置来解决。

答案 3 :(得分:1)

这是连接字符串的问题。如果审计注销占用了太多的cpu,那么尝试使用不同的连接字符串。