我按如下方式调用存储过程:
conn.autocommit(True)
with conn.cursor(as_dict=False) as cur:
cur.callproc(proc_name, query_params)
return list(cur)
Profiler会显示以下调用:
RPC:Completed exec dbo.SelectCustomer 'Jane', 'Doe'
(snip)
RPC:Completed exec dbo.SelectCustomer 'John', 'Doe'
这会导致服务器上的缓存膨胀吗?
答案 0 :(得分:2)
不,不会。只要查询计划保留在计划缓存中,就会在调用该存储过程时重用它。您可以使用以下查询检查计划缓存中的查询计划:
SELECT *
FROM sys.dm_exec_cached_plans a
CROSS APPLY sys.dm_exec_sql_text(plan_handle) b
CROSS APPLY sys.dm_exec_query_plan(plan_handle) c
WHERE text LIKE '%SprocName%'
AND b.dbid = DB_ID('DatabaseName')
ORDER BY a.size_in_bytes desc
可以从计划缓存中清除查询计划有几个原因:
Microsoft详细阐述了此主题here。