Ami*_*aei 4 sql-server orm execution-plan
我从播客中听说没有 ORM 可以很好地解决执行计划重用问题。它会导致执行计划缓存增加,从而影响性能。
回答你的第一个问题,NHibernate 不处理执行计划。SQL Server 处理执行计划。如果 NHibernate 生成的动态 SQL 是参数化的,则计划将被归类为“准备好的”,并假设在每个后续执行中提供的参数可以生成相同的优化查询计划,那么这些计划将被重用。如果动态SQL没有参数,执行计划将其归为“即席”和可能仍然被重用。
我使用这个 T-SQL 来监控各种查询计划的缓存大小。我相信我是从 Paul Randal 的网站 (http://www.sqlskills.com/BLOGS/PAUL/) 复制的,但是时间太长了,我无法确定了。
SELECT
objtype AS [CacheType],
count_big(*) AS [Total Plans],
sum(cast(size_in_bytes as decimal(12,2)))/1024/1024 AS [Total MBs],
avg(usecounts) AS [Avg Use Count],
sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024 AS [Total MBs - USE Count 1],
sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC;
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |