诊断SQL Server 2012性能问题

时间:2015-08-25 17:07:50

标签: sql sql-server-2012

我注意到我的SQL Server上出现了高CPU峰值。我运行了这个查询:

SELECT TOP 10 st.text
               ,st.dbid
               ,st.objectid
               ,qs.total_worker_time
               ,qs.last_worker_time
               ,qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC

并注意到第一行包含此内容:

CREATE PROCEDURE [dbo].[SPR_GEOIPCITY]
@myint1 bigint,
@myint2 bigint
 AS
SELECT top 1 city,latitude,longitude,areacode,region
FROM geoipcity
WHERE endipnum_conv >= @myint1
and startipnum_conv <= @myint2

此过程是在几年前创建的,并且没有代理作业或网站模板触发此过程的重新创建。为什么会在这里列出?

1 个答案:

答案 0 :(得分:0)

sys.dm_exec_query_stats包含有关查询缓存中查询的统计信息。从缓存中删除查询时,它将不再显示在此虚拟表中。从缓存中删除项目很复杂但添加时很简单。运行时,每个QUERY RUN都会添加到缓存中。如果正在运行查询,它将在某个时刻位于缓存中。

您按工作总时间排序结果,因此顶部列出的结果是花费最多时间的结果。 SPR_GEOIPCITY使用了大量的cpu时间。

您可以查看查询计划,但我会节省您一些时间在geoipcity.endipnum_convgeoipcity.startipnum上制作索引 - 您应该会看到您的峰值消失。