运行通过我的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。
答案 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,那么尝试使用不同的连接字符串。