我有SQL Server 2008上有多个数据库。 CPU在服务器上达到了100%。 我想找出哪个数据库可能导致它。 什么是easies的方式来做到这一点?
我的“神奇”idal工具会告诉我:
我更喜欢使用系统视图sys.dm_exec_query_stats中的信息 。 活动监视器对我来说是不方便的。
从sys.dm_exec_query_stats获取信息我使用了我在这里find的下面的脚本(不幸的是它是用俄语)。 适用于SQL Server 2005+。
使用此脚本,您可以根据所需的字段筛选或分组查询,更重要的是,获取有关查询所属的最后执行时间和对象(SP,触发器)的信息(活动监视器不提供此信息)。
该脚本的唯一缺点是它仅返回caching查询计划的聚合性能统计信息。 如果由于某种原因(内存不足,重新编译)而将某个计划从caching中删除,则不会看到该查询的统计信息。
set transaction isolation level read uncommitted select top 100 creation_time, last_execution_time, execution_count, total_worker_time/1000 as CPU, convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime], qs.total_elapsed_time/1000 as TotDuration, convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur], total_logical_reads as [Reads], total_logical_writes as [Writes], total_logical_reads+total_logical_writes as [AggIO], convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0))as [AvgIO], case when sql_handle IS NULL then ' ' else(substring(st.text,(qs.statement_start_offset+2)/2,( case when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2 else qs.statement_end_offset end - qs.statement_start_offset)/2 )) end as query_text, db_name(st.dbid)as database_name, object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(sql_handle) st where total_logical_reads > 0 order by AvgDur desc
我想你会在这两个post之一find你的答案: 1和2 。