SQL Server: 使用动态管理对象

动态管理对象可帮助您管理和监控 SQL Server 中的工作负载详细信息,这是性能优化所必需的。

从"SQL Server DMV 入门套件,"由红色门书籍 (2010) 发布 excerpted。

Glenn 军、 Louis Davidson 和 Tim 福特

动态管理对象 (DMOs) 是一套存储系统架构中的 SQL Server 对象。 它们提供了一个窗口到不同的 SQL Server 实例,并占用这些活动的资源上执行的活动。

换句话说,DMOs 公开有关连接、 会话、 事务、 SQL 语句和执行针对数据库实例,如何进行分发,其中压力点是等等,在服务器上,生成的结果工作负荷的进程的宝贵信息。 具有显示某个特定的瓶颈或压力点,然后,可以采取适当的措施来缓解此问题 — — 也许通过优化查询,添加索引或只终止阻塞的会话。

"动态"一词指的是存储在 DMOs 中的信息动态生成从范围广泛的检测点的这一事实。 这些是内存中整个 SQL Server 引擎的结构。 此数据就会暴露在 sys 数据库架构中的表格形式。 数据暴露在视图中,在它们正在称为动态管理视图 (Dmv),这种情况下或在表值函数,在这种情况下它们称为动态管理功能 (Dmf)。

通过 Dmv 和 Dmf 系统视图和系统函数实质上是。 用任何其他视图和函数内 SQL Server 一样使用它们: 查询它们、 联接、 传递参数,并最终返回单个结果集包含您需要研究特定问题有关的状态或您 SQL Server 实例的运行状况的数据。

Dmv 废弃了与优化性能

DMOs 公开信息有时 dizzying 数组。 原始的 sysprocesses 系统视图实际上已 de-normalized,并添加了许多新的 DMOs。 许多新的数据列现已提供用于查询。 随着数据库引擎将成为更好地检测,引擎和正在进行的工作,工作有关的可用的数据量将继续增长。

增加了复杂性缝合在一起将全异的 DMOs,数组中的数据加上最初 baffling 所选的列将为其中公开,已导致一些 Dba 到 liken 查询 DMOs 收集 mystic spells。

但是,de-normalization 进程,在许多方面,已 DMOs 返回更易于分析和理解的数据。 一旦您开始编写您自己的脚本,您将看到相同的技巧和类似联接模式,一次又一次被使用。 在这种情况下,相对较小的核心的一组脚本可以自如地满足许多要求。

在某些方面,通过 DMOs 工作的诊断数据需要被撕裂后的图层) 的过程。 在外部的层中,我们可以找出谁在连接到我们 SQL Server 实例、 如何它们所连接; 会话正在运行的亮相; 然后,通过这些会话正在执行哪些请求。 我们可以找出正在执行这些请求,正在用来运行它们,等等的查询计划的 SQL 语句的详细信息。

丢弃层下移,我们有事务级别,我们可以找出哪些被锁这些事务的结果,其中调查任何可能发生阻塞,依此类推。 下移一层,我们可以找到如何提交的请求所表示的工作负荷转化为在操作系统中的实际工时。 我们可以确定,例如:

  • 正在执行何种实际的任务 (线程) 来满足请求
  • 他们正在执行 I/O、 CPU 和内存使用率方面的哪些工作
  • 如何将 I/O 分布的各种文件
  • 长线程花在等待,无法继续如何以及为什么

它是您从各种不同的层,以提供所需突出显示系统中的特定问题的结果汇编的数据的所有片段的工作。

时间 vs 中点。 累积

如所述,我们可以查询只保留在 DMOs 上的数据随着我们能象任何其他表,查看或正常工作。 但是,始终记住您会看到的数据是"动态"的性质。 它是收集来自一个不同的结构中,数据库引擎的范围,并代表的时间点"快照"的活动时出现在您的服务器上的运行设计查询。

有时,这正是您所需的内容。 您有性能问题,并且想要找出哪些查询正在运行可能会导致它在服务器上。 有时,不过,您可能会发现它很难查询问题将只是"跳转出在您。"希望在这些时间点 DMOs 中的数据

如果例如,您有性能问题,并且想要检查的任何"特殊"的锁定模式,则"选择 [列] 从 [锁定 DMV]"将告诉您很多,除非您非常熟悉什么"正常"锁定外观类似于您的系统上,不太可能,您可以很容易地发现异常情况。

请记住,时间点数据可以,并可能会更改每次查询其服务器更改的状态。 您应该会偶尔看到反常或非代表的结果,并可能需要多次运行一个脚本来获取有关您的实例的真实的活动。

在其他情况下,DMOs 是累积的。 换句话说,给定列中的数据是积累和递增每个时间发生特定事件。 例如,每次会话在等待一段时间变得可用资源,这被记录的 sys.dm_os_wait_stats DMV 列中。 查询此类的 DMV,您会看到时, 例如,总花的时间等待各种资源,跨所有会话,因为 SQL Server 已启动或重新启动 — — 除非数据库一致性检查,或者 DBCC,手动清除存储统计出运行命令。

这将为您提供广泛概述了所用时间的同时等待,很长一段,它将使硬的较小的详细信息,请参阅。 如果您想要测量数据库 (新索引,例如) 进行某些更改的影响,您需要获取基准测量,进行更改然后再衡量的差异。

最后,始终要记住,您会看到此类 DMOs 中的数据的很多是跨多个会话、 许多请求和许多事务收集的聚合数据。 前面提到的 wait_stats DMV,例如,将显示您在实例级别 SQL Server 花费时间等待,跨所有会话聚合的位置。 您不能在单个会话级别跟踪等待时间 — — 除非,当然,您正在独立的服务器上。

Glenn Berry

Louis Davidson

Tim Ford

Glenn 军 丹佛,Colo.中的 NewsGator 技术作为数据库体系结构设计者的工作方式 他是 SQL Server MVP,并有 Microsoft 认证,包括 MCITP、 MCDBA、 MCSE、 MCSD、 MCAD 和 MCTS,它可以证明他喜欢参加考试的整个集合。

Louis Davidson 已在 IT 行业 16 年作为公司的数据库开发人员和架构师。 他 SQL Server Microsoft MVP 了六年的时间,并编写了有关数据库设计有四部著作。 目前他是数据架构师和有时 DBA 对于 Christian 广播网络,在弗吉尼亚海滩,Va.和 Tenn.纳什维尔,支持办公室

Timothy 福特 是 SQL Server MVP 和已与 SQL Server 合作 10 年以上。 他是主 DBA 和彩虹健康的 SQL Server 平台的主题专家。 他已被写入关于技术 2007年以来为各个领域的 Web 站点并保持在他自己博客 thesqlagentman.com,为很好地为 telecommuting 和专业开发主题涵盖 SQL。

了解有关"SQL Server DMV 初学者包"在 red-gate.com/our-company/about/book-store

相关内容