> 데이터 베이스 > MySQL 튜토리얼 > 如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

WBOY
풀어 주다: 2016-06-07 15:45:31
원래의
1447명이 탐색했습니다.

如何用Procmon.exe来监视SQLSERVER的logwrite大小 在微软亚太区数据库技术支持组官方博客里面,你会发现很多篇文章都用到了Procmon.exe这个工具 今天我也介绍一下这个工具 这个实验基于这篇文章《 SQL server每个日志写(log write)究竟有多大?》 这个工具的

如何用Procmon.exe来监视SQLSERVER的logwrite大小

在微软亚太区数据库技术支持组官方博客里面,你会发现很多篇文章都用到了Procmon.exe这个工具

今天我也介绍一下这个工具

这个实验基于这篇文章《SQL server每个日志写(log write)究竟有多大?》

这个工具的下载地址:http://files.cnblogs.com/lyhabc/ProcessMonitor.zip

文章里面的测试内容是这样的

SQL server 日志写(log write)的最小大小是多少呢?

为此我做了个试验(Windows 7+SQL server 2012)
 
1)我把磁盘格式化,最小分配单元为4kb
2)我把log 放到磁盘上
3) 我commit一个非常小的事务

 

为了与文章中的测试环境一样

我给出这次的数据库所在盘符的分配单元的截图

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

测试脚本:

<span>1</span> <span>USE</span> <span>[</span><span>Northwind</span><span>]</span>
<span>2</span> <span>GO</span>
<span>3</span> <span>CREATE</span> <span>TABLE</span> t1 ( c1 <span>INT</span><span> )
</span><span>4</span> <span>GO</span>
<span>5</span> <span>BEGIN</span> <span>TRAN</span>
<span>6</span> <span>INSERT</span>  <span>INTO</span><span> t1
</span><span>7</span> <span>VALUES</span>  ( <span>1</span><span> )
</span><span>8</span> <span>COMMIT</span>
로그인 후 복사

 我们怎麽来测试呢??

第一步:首先我们当然要打开SSMS,然后拷贝脚本进去啦,哈哈

第二步:要找到SQLSERVER的进程编号,因为我的机器安装了SQL2005,SQL2008,SQL2012

所以需要找一下SQL2005的进程编号是多少

如何用Procmon.exe来监视SQLSERVER的logwrite大小

第三步:打开服务管理器,我安装SQL2005的时候使用的是默认实例,那么找到默认实例的SQLSERVER服务,

然后看这个服务用的是哪个帐户来登录的

SQL2005:system

如何用Procmon.exe来监视SQLSERVER的logwrite大小

SQL2008:network service

如何用Procmon.exe来监视SQLSERVER的logwrite大小

SQL2012:MSSQL$SQL2012

如何用Procmon.exe来监视SQLSERVER的logwrite大小

第四步:打开任务管理器,看一下SQL2005对应的是哪个进程

找到啦,进程编号是1736

如何用Procmon.exe来监视SQLSERVER的logwrite大小

当然啦,如果你的电脑只安装了一个SQLSERVER,只有一个默认实例就不用这麽麻烦了

第五步:打开Procmon.exe

先简单介绍一下一些按钮的作用

如何用Procmon.exe来监视SQLSERVER的logwrite大小

捕获事件,其实这个软件跟SQLSERVER profiler一样,捕获事件就相当于“开始跟踪”

然后下面的显示框会一条一条的显示事件信息,相当于profiler里面跟踪记录,一条一条记录显示给你看

如何用Procmon.exe来监视SQLSERVER的logwrite大小

事件种类:有注册表,文件系统,进程和线程,网络,性能

就像profiler里面的新建跟踪,里面也有很多的事件给你选择

第六步:因为我这里只是观察logwrite,所以只需要监控文件系统就可以了,注册表、网络这几个按钮不用点击

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

第七步:过滤:可以过滤的内容比较多,我这里就选择只显示SQL2005进程的内容

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

确定之后就可以点击OK了

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

捕获和停止捕获,还有清空显示屏按钮

如何用Procmon.exe来监视SQLSERVER的logwrite大小

刚才点击确定之后,Procmon.exe会马上捕获SQLSERVER所有与文件系统相关操作的事件

第八步:这个时候需要先停止捕获,然后再清空显示屏

如何用Procmon.exe来监视SQLSERVER的logwrite大小


开始测试

测试一:

多次执行刚才的测试脚本

<span>1</span> <span>BEGIN</span> <span>TRAN</span>
<span>2</span> <span>INSERT</span>  <span>INTO</span><span> t1
</span><span>3</span> <span>VALUES</span>  ( <span>1</span><span> )
</span><span>4</span> <span>COMMIT</span>
로그인 후 복사

但是由于太多与磁盘相关的记录了,我们怎麽看跟事务日志相关的记录呢??

如何用Procmon.exe来监视SQLSERVER的logwrite大小

我们可以使用高亮功能

添加两个过滤条件:

operationwritefile

pathE:\数据库文件2013-10-30\northwnd.ldf

符合上面两个过滤条件的记录都将高亮显示

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

 

 然后你会看到符合条件的都高亮显示了

如何用Procmon.exe来监视SQLSERVER的logwrite大小

SQL server 日志写的最小大小都是512bytes,就是一个扇区的大小

跟文章中说的基本一样

为什麽基本一样,因为我发现有一条记录是2.5MB,宋大师说:

上面那些8M和4M的磁盘写,应该是日志增长所导致的,所以我觉的不能和log write混淆吧?

如何用Procmon.exe来监视SQLSERVER的logwrite大小

 

 


测试二:

我们先清空和停止捕获事件

如何用Procmon.exe来监视SQLSERVER的logwrite大小

<span> 1</span> <span>--</span><span>CREATE TABLE t2 ( c1 INT, c2 CHAR(7000) )</span>
<span> 2</span> <span>--</span><span>go</span>
<span> 3</span> <span>BEGIN</span> <span>TRAN</span>
<span> 4</span> <span>DECLARE</span> <span>@i</span> <span>INT</span>
<span> 5</span> <span>SET</span> <span>@i</span> <span>=</span> <span>0</span>
<span> 6</span> <span>WHILE</span> ( <span>@i</span> <span> <span>100000</span><span> )
</span><span> 7</span>     <span>BEGIN</span>
<span> 8</span>         <span>INSERT</span>  <span>INTO</span><span> t2
</span><span> 9</span>         <span>VALUES</span>  ( <span>@i</span>, <span>'</span><span>dadf</span><span>'</span><span> )
</span><span>10</span>         <span>SET</span> <span>@i</span> <span>=</span> <span>@i</span> <span>+</span> <span>1</span>
<span>11</span>     <span>END</span>
<span>12</span> <span>CHECKPOINT</span>
<span>13</span> <span>COMMIT</span>
<span>14</span> <span>DELETE</span>  <span>FROM</span> t2</span>
로그인 후 복사

将上面的脚本同时开2个窗口运行

重新点解捕获事件按钮,开始捕获事件

如何用Procmon.exe来监视SQLSERVER的logwrite大小

可以看到记录基本上都是大于60K的大小

为什麽会这样??

大家可以看一下宋大师的这篇文章:再谈SQL Server中日志的的作用

如何用Procmon.exe来监视SQLSERVER的logwrite大小


总结

其实大家可以用左键双击每条记录,会打开一个详细属性对话框,里面包含了很多关于进程信息,堆栈信息

如何用Procmon.exe来监视SQLSERVER的logwrite大小

如何用Procmon.exe来监视SQLSERVER的logwrite大小

readfile操作的调用堆栈

如何用Procmon.exe来监视SQLSERVER的logwrite大小

 

如何用Procmon.exe来监视SQLSERVER的logwrite大小

进程树

如何用Procmon.exe来监视SQLSERVER的logwrite大小

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿