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

  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3456769.html
Copyright © 2011-2022 走看看