zoukankan      html  css  js  c++  java
  • 如何用Procmon.exe来监视SQLSERVER的logwrite大小

    如何用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一个非常小的事务

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

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

    测试脚本:

    1 USE [Northwind]
    2 GO
    3 CREATE TABLE t1 ( c1 INT )
    4 GO
    5 BEGIN TRAN
    6 INSERT  INTO t1
    7 VALUES  ( 1 )
    8 COMMIT

     我们怎麽来测试呢??

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

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

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

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

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

    SQL2005:system

    SQL2008:network service

    SQL2012:MSSQL$SQL2012

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

    找到啦,进程编号是1736

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

    第五步:打开Procmon.exe

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

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

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

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

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

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

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

    确定之后就可以点击OK了

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

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

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


    开始测试

    测试一:

    多次执行刚才的测试脚本

    1 BEGIN TRAN
    2 INSERT  INTO t1
    3 VALUES  ( 1 )
    4 COMMIT

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

    我们可以使用高亮功能

    添加两个过滤条件:

    operationwritefile

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

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

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

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

    跟文章中说的基本一样

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

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


    测试二:

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

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

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

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

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

    为什麽会这样??

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


    总结

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

    readfile操作的调用堆栈

    进程树

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

  • 相关阅读:
    梳理一下自己的技术关注面[转]
    在SharePoint 2010系统中安装RBS FILESTREAM Provider
    53套SharePoint 2010站点模版在线演示及下载
    sharepoint form认证下的当前在线用户统计和当日浏览量的统计
    MOSS部署常用的stsadm命令行
    asp.net实现伪静态的几种常用的方法
    新闻滚动效果JQuery实现
    百度编辑器Ueditor的使用
    新闻滚动JS
    SQL分页笔记
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3456769.html
Copyright © 2011-2022 走看看