原文:第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO

前言:

本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题。SQLServer同样提供了一些列与I/O相关的DMO来做监控。

本文介绍如何使用DMO来监控I/O子系统的性能并找到I/O瓶颈。通过本文,可以区分不同数据库的I/O使用模式。一旦发现有数据库的I/O很高,可能需要考虑把数据库迁移到单独的磁盘,或者深入研究I/O产生的问题。

准备工作:

本文将演示如何监控数据库文件的I/O情况,将在SQLServer 2008R2上的AdventureWorks数据库上做演示。

步骤:

1、 
打开SQLServer,连到AdventureWorks。

2、 
输入以下脚本监控SQLServer实例上的日志文件和数据文件:

SELECT  DB_NAME(VFS.database_id) AS DatabaseName ,
MF.name AS LogicalFileName ,
MF.physical_name AS PhysicalFileName ,
CASE MF.type
WHEN 0 THEN 'Data File'
WHEN 1 THEN 'Log File'
END AS FileType ,
VFS.num_of_reads AS TotalReadOperations ,
VFS.num_of_bytes_read AS TotalBytesRead ,
VFS.num_of_writes AS TotalWriteOperations ,
VFS.num_of_bytes_written AS TotalWriteOperations ,
VFS.io_stall_read_ms AS TotalWaitTimeForRead ,
VFS.io_stall_write_ms AS TotalWaitTimeForWrite ,
VFS.io_stall AS TotalWaitTimeForIO ,
VFS.size_on_disk_bytes AS FileSizeInBytes
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS VFS
INNER JOIN sys.master_files AS MF ON VFS.database_id = MF.database_id
AND VFS.file_id = MF.file_id
ORDER BY VFS.database_id DESC

3、 
在新窗口输入以下脚本,清空数据缓存:

USE AdventureWorks
GO
DBCC DROPCLEANBUFFERS
GO
SELECT *
FROM [Sales].[SalesOrderDetail]
GO

4、 
现在再次执行第二步中的脚本,看看情况。

5、 
执行下面的语句,查看是否有IO挂起操作:

SELECT  DB_NAME(VFS.database_id) AS DatabaseName ,
MF.name AS LogicalFileName ,
MF.physical_name AS PhysicalFileName ,
CASE MF.type
WHEN 0 THEN 'Data File'
WHEN 1 THEN 'Log File'
END AS FileType ,
PIOR.io_type AS InputOutputOperationType ,
PIOR.io_pending AS Is_Request_Pending ,
PIOR.io_handle ,
PIOR.scheduler_address
FROM sys.dm_io_pending_io_requests AS PIOR
INNER JOIN sys.dm_io_virtual_file_stats(DB_ID('AdventureWorks'), NULL)
AS VFS ON PIOR.io_handle = VFS.file_handle
INNER JOIN sys.master_files AS MF ON VFS.database_id = MF.database_id
AND VFS.file_id = MF.file_id
GO

分析:

首先要切记不要随便在正式环境使用DBCC DROPCLEANBUFFERS命令,这个将会在一段时间内严重影响性能。

在本例中,对于sys.dm_io_pending_io_requests可能在本机中会没有数据,因为在单机情况下基本上很少io操作,从而挂起的可能性大大降低,但是在正式环境,多用户连接和操作时,就很有可能发生挂起情况。

上面提到的DMO对查找I/O子系统问题很有帮助,根据这些信息,再进一步找到高I/O的数据库,同时检查所在磁盘的I/O情况。

第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO的更多相关文章

  1. 第七章——DMVs和DMFs(3)——用DMV和DMF监控TempDB

    原文:第七章--DMVs和DMFs(3)--用DMV和DMF监控TempDB 前言: 我们都知道TempDB是SQLServer的系统数据库,且SQLServer的日常运作严重依赖这个库.因此,监控T ...

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

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

  3. 第七章——DMVs和DMFs(1)

    原文:第七章--DMVs和DMFs(1) 简介: 从SQLServer2005开始,微软引入了一个名叫DMO(动态管理对象)的新特性,DMO可以分为DMFs(Dynamic Manage Functi ...

  4. KnockoutJS 3.X API 第七章 其他技术(2) 使用扩展器来增加可观察量(监控属性)

    Knockout observables提供了支持读取/写入值并在值改变时通知订阅者所需的基本功能. 但在某些情况下,您可能希望向可观察者添加其他功能. 这可能包括通过在可观察者前面放置一个可写的计算 ...

  5. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  8. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  9. objective-c第七章课后练习2

    题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...

随机推荐

  1. WPF界面设计技巧(9)—使用UI自动化布局

    原文:WPF界面设计技巧(9)-使用UI自动化布局 最近一直没时间更新这系列文章,因为我一直在埋头编写我的第一个WPF应用程序:MailMail 今天开始编写附属的加密/解密工具,对UI自动化布局有些 ...

  2. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  3. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...

  4. 在centos上部署java WEB环境

    题语:偷得浮生半日闲,趁着十一期间,好好的写写随笔来记录自己所学.所践和所得,不足之处,欢迎各位拍砖~~~ 工具:Xftp 5.Xshell 5 一.安装jdk  1. 使用Xftp 5把jdk-8u ...

  5. 《Javascript高级程序设计》读书笔记之bind函数详解

    为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...

  6. 无法打开登录所请求的数据库 "ASPState"。登录失败。 用户 'NT AUTHORITY/SYSTEM' 登录失败。

    原文:无法打开登录所请求的数据库 "ASPState".登录失败. 用户 'NT AUTHORITY/SYSTEM' 登录失败. 无法打开登录 'ASPState' 中请求的数据库 ...

  7. Android DES加密的CBC模式加密解密和ECB模式加密解密

    DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...

  8. leetcode第一刷_Pow(x, n)

    高速乘方的算法,写了好多变,出了各种错,真是服了我自己了. 思想是每次对n减半,将当前的temp平方.须要注意的是假设当前的n是个奇数,减半之后会丢失掉一次乘积,因此假设当前的n为奇数,应该先在结果里 ...

  9. 学习笔记 Android.mk 搜索自己主动

    最近一直Android.mk这是什么一个令人沮丧的夜晚,点击此处记录. ios你担心更多.不管那么多.xcode自己解决. 文本工具:MACVIM(文本编辑工具 很有用 你可以清楚地分辨tab 和Sp ...

  10. profile与bashrc

    /etc/profile./etc/bashrc 是系统全局环境变量设定 ~/.profile,~/.bashrc用户家文件夹下的私有环境变量设定 当登入系统时候获得一个shell进程时.其读取环境设 ...