原文:第七章——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. Java文件压缩分割(待)

    http://blog.csdn.net/ycg01/article/details/1366648

  2. Java-UrlRewrite中文api文档

    安装 1. 下载jar包, 并加入到WEB-INF/lib下 2. 在WEB-INF/web.xml中增加下面的配置 <filter> <filter-name>UrlRewr ...

  3. 工厂方法模式(factory method pattern)

    工厂方法模式相对于简单工厂模式的长处是为了更好的拓展,当假设再新加一种产品,对于简单工厂模式来说须要改动核心的工厂类,但对于工厂方法模式则不须要,在工厂方法模式中核心的工厂类不再负责创建全部产品的创建 ...

  4. Java开发环境的基本设置

    作为Java的刚開始学习的人,不知道其它的刚開始学习的人有没有和我一样的感受:用Java开发须要配置这么复杂 的环境.太难了.第一次配置时,一团混乱.Oracle监听服务打不开了,PLSql连接不上O ...

  5. 详细分析Java中断机制(转)

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  6. Percona Data Recovery Tool for InnoDB工具恢复单表的案例

    今天上班有个朋友询问我,相关Percona Data Recovery Tool for InnoDB恢复数据中的一些问题,比如说delete,没法恢复数据,原先做过类似的异常处理就,再次模拟了下相关 ...

  7. POJ 2533-Longest Ordered Subsequence(DP)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34454   Acc ...

  8. poj Optimal Milking

    Optimal Milking 题目: 有K个机器.C仅仅牛.要求求出最全部牛到各个产奶机的最短距离.给出一个C+K的矩阵,表示各种标号间的距离. 而每一个地方最多有M仅仅牛. 算法分析: 二分+最短 ...

  9. java输入输出高速

    头文件: import java.io.*; 定义: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); ...

  10. 点击 下载 pdf

     <iframe id="fileDownFrame" src="" style="display:none; visibility:hidde ...