【发布时间】:2015-08-25 17:07:50
【问题描述】:
我注意到我的 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
此程序是多年前创建的,没有代理工作或网站模板可以触发重新创建此程序。为什么会列在这里?
【问题讨论】:
-
我对这些表没有做太多,但我会认为重新创建的是查询计划,而不是过程。这个过程调用很多吗?
-
可能与选项重新编译有关
-
是的,它被称为很多。
-
你问为什么你的程序被缓存,当它被调用很多的时候?我对吗?这是正常行为。查询优化器评估您的 SP,选择最佳计划并将其缓存,因此它在未来不必做同样的工作,而是直接执行。 SQL Server Query Optimizer
标签: sql sql-server-2012