我是一个.Net开发人员。我正在进行数据库升级(从Server 2005升级到Server 2012)。数据库团队将处理迁移。但我在论坛上看到的帖子说,迁移后,尽管数据量和用户数几乎相同,但执行查询的时间太长了。其中一个主要原因是这些服务器之间的execution plan发生了变化。参考资料:从Server 2005迁移到2012年后的性能问题
因此,我正在考虑从当前的生产服务器本身存储实际的执行计划的可能性。在甲骨文中,我可以找到一个用于基线的功能:-
在Server中,实现这一点的通常做法是什么?
注意:我提到了为服务器创建基线,但它并没有提到execution plan的基线
发布于 2016-04-09 23:32:15
您只需从计划缓存中提取最相关查询的执行计划。我将查询sys.dm_exec_查询_统计数据sys.dm_exec_查询_统计数据,并加入sys.dm_exec_查询_计划和sys.dm_exec_sql_文本分别获得计划和查询文本。在sys.dm_exec_query_stats中,您可以使用最高的IO、CPU、执行计数等来提取查询--这对您来说是最重要的。
展望未来,Server 2016引入了查询存储:
发布于 2016-04-10 06:43:46
有关获取这些执行计划的信息,请参见此示例查询。现在,它是根据CPU消耗来排序的:
SELECT qs.execution_count,
qs.total_worker_time/1000 total_worker_time_msec,
((qs.total_worker_time/1000)/qs.execution_count) AVGtotal_worker_time_msec,
qs.max_worker_time/1000 max_worker_time_msec,
qs.total_elapsed_time/1000 total_elapsed_time_msec,
((qs.total_elapsed_time/1000)/execution_count) avg_elapsed_time_msec,
qs.min_elapsed_time/1000 min_elapsed_time_msec,
qs.max_elapsed_time/1000 max_elapsed_time_msec,
qt.text,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC关于将SQL 2005迁移到2012年的其他一些提示:
https://dba.stackexchange.com/questions/134855
复制相似问题