第七章——DMVs和DMFs(1)
原文: 第七章——DMVs和DMFs(1)

简介:

从SQLServer2005开始,微软引入了一个名叫DMO(动态管理对象)的新特性,DMO可以分为DMFs(Dynamic Manage Functions,动态管理函数)和DMVs(Dynamic Manage Views,动态管理视图)两部分。这些函数和视图用于查找SQLServer实例内部统计信息以供性能监控所用。它们提供实时的,关于SQLServer内部工作的,能用于性能分析和性能故障排除的各种统计信息。

所有的DMO都属于sys架构,并且以dm_开头。执行DMO需要有VIEW SERVER STATE和VIEW DATABASE STATE权限。

下面简述一下本系列将要介绍的DMO:

Ø  执行相关的DMO(sys.dm_exec_*):提供与执行相关的统计信息。可以用于监控与缓存查询、执行计划、活动连接/会话和带有执行计划的当前运行的查询的相关统计信息。

Ø  索引相关的DMO(sys.dm_db_index_*和sys.dm_db_missing_*):提供关于索引的统计信息。这些DMO可以用于监控和分析因为丢失索引、无效索引而导致的性能问题,也可以用来检查索引的使用情况。

Ø  数据库相关DMO(sys.dm_db_*):提供数据库相关统计信息。可以用于监控和分析数据库的性能问题,分析数据库相关文件的统计信息、会话统计信息和任务统计信息。

Ø  I/O相关DMO(sys.dm_io_*):提供I/O操作的统计信息,用于监控和分析SQLServer的I/O性能问题。

Ø  OS相关DMO(sys.dm_os_*):提供关于sqlos内部统计信息,用于监控和分析服务器配置问题。

Ø  事务相关的DMO(sys.dm_trn_*):提供事务相关的统计信息,用于监控和分析长时间运行的事务的锁定、死锁问题。

这些DMO的数据可以通过DBCC SQLPERF(‘SYS.DM_OS_WAIT_STATS’,CLEAR)或者重启服务器来重置。

监控当前查询执行的统计信息:

为了使得服务器上的查询足够的好,需要识别那些消耗资源的查询和找到这些资源的来源。为了实现这些功能,需要监控查询的请求和检查它们的运行时间、IO操作等等。

SQLServer有专用的DMO来监控查询的执行信息,这些DMO包含广泛的信息,以sys.dm_exec_开头。通过这些DMO可以快速发现问题查询,从而进行优化。

本文将演示使用DMO来获取当前正在请求SQLServer查询的信息,并找到长时间运行的查询,同时可以监控当前正在运行的游标,这个通常也会引起性能问题。

准备工作:

本文中将使用DMO来监控当前查询请求的一些有用信息,如数据库名、登录名、程序名、查询开始时间、读写数。

众所周知,游标是非常消耗资源且影响查询性能的,如非必要,不建议使用。

本例中使用SQLServer 2008R2,并在微软示例数据库AdventureWorks上操作。

步骤:

1、  打开SSMS,连到SQLServer实例。

2、  打开新查询窗口,并输入以下代码,用于监控当前查询:

SELECT  DB_NAME(R.database_id) AS DatabaseName ,S.original_login_name AS LoginName ,S.host_name AS ClientMachine ,S.program_name AS ApplicationName ,R.start_time AS RequestStartTime ,ST.text AS SQLQuery ,QP.query_plan AS ExecutionPlan ,R.cpu_time AS CPUTime ,R.total_elapsed_time AS TotalTimeElapsed ,R.open_transaction_count AS TotalTransactionOpened ,R.reads ,R.logical_reads ,R.writes AS TotalWrites
FROM    sys.dm_exec_requests AS RINNER JOIN sys.dm_exec_sessions AS S ON R.session_id = S.session_idCROSS APPLY sys.dm_exec_sql_text(R.sql_handle) AS STCROSS APPLY sys.dm_exec_query_plan(R.plan_handle) AS QP
ORDER BY TotalTimeElapsed DESC
GO

3、  打开新窗口输入一下脚本,用于监控当前打开的游标:

SELECT  S.host_name AS ClientMachine ,S.program_name AS ApplicationName ,S.original_login_name AS LoginName ,C.name AS CursorName ,C.properties AS CursorOptions ,C.creation_time AS CursorCreatinTime ,ST.text AS SQLQuery ,C.is_open AS IsCursorOpen ,C.worker_time / 1000 AS DurationInMiliSeconds ,C.reads AS NumberOfReads ,C.writes AS NumberOfWrites
FROM    sys.dm_exec_cursors (0) AS CINNER JOIN sys.dm_exec_sessions AS S ON C.session_id = S.session_idCROSS APPLY sys.dm_exec_sql_text(C.sql_handle) AS ST
ORDER BY DurationInMiliSeconds DESC
GO

分析:

在上面步骤中,使用了以下的DMOs:

Ø  Sys.dm_exec_requests

Ø  Sys.dm_exec_sessions

Ø  Sys.dm_exec_sql_text

Ø  Sys.dm_exec_query_plan

对于上面的查询结果,需要思考的问题:

Ø  哪个库正在接受请求?

Ø  那个登录名执行了这个请求?

Ø  请求是从哪个计算机发出的?

Ø  请求是从那个应用程序发出的?

Ø  请求是何时到达SQLServer的?

Ø  请求中需要执行什么SQL语句?

Ø  执行的SQL语句的执行计划是什么?

Ø  请求的持续时间有多少?

Ø  请求是否开启了事务?

Ø  请求造成的读写数是多少?

Ø  请求是否被阻塞了?如果是,是哪个会话造成的?

为了找到这些信息,需要把sys.dm_exec_requests和sys.dm_exec_sessions的session_id列关联。

同时,使用CROSS APPLY来关联sys.dm_exec_sql_text()函数来查找请求的SQL文本。关联sys.dm_exec_query_plan()函数来查找请求的执行计划。这两个函数需要从查询中分别获得sql_handle和plan_handle。在结果集中,按TotalTimeElapsed列排序,可以知道最耗资源的查询。

第二个查询中使用了sys.dm_exec_cursors()函数来返回当前正在使用的游标的详细。这个函数接受session_id作为参数。如果传入了特定session_id,只会返回该会话的游标,如果传入0,则返回所有会话的游标。结果集按照DurationInMiliSecondes排序,一边查找最耗资源的游标,注意worker_time除以了1000,因为这个的单位是微妙,除以1000可以得到毫秒。

扩充知识:

由于这些dmo的解释较长,详细请看联机丛书。除了上面列出的dmo之外,还有一些与执行相关的dmo,如:

Ø  Sys.dm_exec_cached_plans(DMV)

Ø  Sys.dm_exec_procedure_stats(DMV)

Ø  Sys.dm_exec_query_stats(DMV)

Ø  Sys.dm_exec_cached_plan_dependent_objects(DMF)

这些DMO提供查询和对象的详细缓存信息,对查询优化很有帮助。

posted on 2015-03-06 14:56 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4318256.html

第七章——DMVs和DMFs(1)相关推荐

  1. 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能

    原文: 第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能 本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时 ...

  2. 第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO

    原文: 第七章--DMVs和DMFs(4)--用DMV和DMF监控磁盘IO 前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题.SQLSer ...

  3. 数字图像处理——第七章 小波和多分辨处理

    数字图像处理--第七章 小波和多分辨率处理 文章目录 数字图像处理--第七章 小波和多分辨率处理 写在前面 1 多分辨率处理 1.1 图像金字塔 1.2 多尺度和多分辨率的区别 2 小波 2.1 连续 ...

  4. 现实迷途 第七章 特殊客户

    第七章 特殊客户 注:原创作品,请尊重原作者,未经同意,请勿转载,否则追究责任. 江北一般都是上午待在办公室里,搜集信息或整理以前做过的系统,下午才出去站街招客. 站街站了一段时间后,江北有点不想去了 ...

  5. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

  6. 2017上半年软考 第七章 重要知识点

    第七章项目范围管理 []项目范围管理概念 [][]项目范围管理的含义和作用 项目范围管理内容p289 项目范围对项目管理的重要性?p289 [][]项目范围管理的主要过程 项目范围管理的6个过程是? ...

  7. 服务器架构之性能扩展-第七章(8)

    第七章Cacti系统监控邮件报警和压力测试 7.1 Cacti工作原理 原理简单来说,Cacti就是rrdtool的一个forefront,它内置了快速的获数据取工具.优秀的绘图模板以及许多设计精良的 ...

  8. 鸟哥Linux私房菜_基础篇(第二版)_第七章学习笔记

    第七章 Linux文件和目录管理 绝对路径:以"/"开始 相对路径:以非"/"开始 其中,"."代表当前目录,".."代 ...

  9. 计算机组成原理 输入输出系统,计算机组成原理(第七章输入输出系统

    计算机组成原理(第七章输入输出系统 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 第七章输入输出系统第一节基本的输入输出方式一. 外围 ...

最新文章

  1. Solaris10下NDOUtils的安装
  2. python读取nii文件_python实现批量nii文件转换为png图像
  3. C#中转义字符[转]
  4. [html] html5的video如何附带字幕?
  5. LeetCode 151. 翻转字符串里的单词(栈)
  6. React学习(8)—— 高阶应用:不使用ES6、JSX实现React
  7. UVALive - 3641 Leonardo's Notebook(polya计数)
  8. Java深入了解TreeSet,和迭代器遍历方法
  9. Mysql实现企业级数据库主从复制架构实战
  10. 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
  11. python中的translate_Python3 translate()方法
  12. 啊哈 算法 啊哈磊 扫描版pdf
  13. 什么是Web全栈工程师
  14. 微波遥感——微波与大气
  15. 转轮密码机的加解密算法实现
  16. 大师系列之彼得•林奇基层调查选股法
  17. 中国居民身份证上的信息英语翻译
  18. 高中数学竞赛与自主招生内部练习试题<二>
  19. python代码有for循环时没有报错但是不能运行
  20. 【牛客网刷题】通信-华为公司专项练习

热门文章

  1. randperm--生成随机整数排列
  2. ASM模型对人脸特征点的检测
  3. 3.2.3 如何解决数据不匹配问题
  4. 绘图的尺寸_AutoCAD新功能:参数化绘图,绘制看似简单,实际复杂,案例详解...
  5. mysql提示The server quit without updating PID file /usr/local/mysql/data/localhost.localdomain.pid
  6. 单元测试工具JUnit
  7. 在 aws emr 上,将 hbase table A 的数据,对 key 做 hash,写到另外一张 table B
  8. Charle抓包与wireshark使用
  9. 机器学习技法-随机森林(Random Forest)
  10. UIGestureRecognizer学习笔记