首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server -基线的SQL计划管理

SQL Server -基线的SQL计划管理
EN

Database Administration用户
提问于 2016-04-09 17:58:15
回答 2查看 271关注 0票数 2

我是一个.Net开发人员。我正在进行数据库升级(从Server 2005升级到Server 2012)。数据库团队将处理迁移。但我在论坛上看到的帖子说,迁移后,尽管数据量和用户数几乎相同,但执行查询的时间太长了。其中一个主要原因是这些服务器之间的execution plan发生了变化。参考资料:从Server 2005迁移到2012年后的性能问题

因此,我正在考虑从当前的生产服务器本身存储实际的执行计划的可能性。在甲骨文中,我可以找到一个用于基线的功能:-

  1. SQL计划管理(第4部分)创建SQL计划基线
  2. 使用SQL计划管理

在Server中,实现这一点的通常做法是什么?

注意:我提到了为服务器创建基线,但它并没有提到execution plan的基线

EN

回答 2

Database Administration用户

回答已采纳

发布于 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引入了查询存储:

使用查询存储监视性能

票数 4
EN

Database Administration用户

发布于 2016-04-10 06:43:46

有关获取这些执行计划的信息,请参见此示例查询。现在,它是根据CPU消耗来排序的:

代码语言:javascript
复制
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年的其他一些提示:

  1. 请确保将兼容级别更改为110。
  2. 一定要在还原数据库后更新统计信息。
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/134855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档