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

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

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

测试脚本:

 USE [Northwind]
GO
CREATE TABLE t1 ( c1 INT )
GO
BEGIN TRAN
INSERT INTO t1
VALUES ( 1 )
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所有与文件系统相关操作的事件

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


开始测试

测试一:

多次执行刚才的测试脚本

 BEGIN TRAN
INSERT INTO t1
VALUES ( 1 )
COMMIT

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

我们可以使用高亮功能

添加两个过滤条件:

operationwritefile

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

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

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

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

跟文章中说的基本一样

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

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


测试二:

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

 --CREATE TABLE t2 ( c1 INT, c2 CHAR(7000) )
--go
BEGIN TRAN
DECLARE @i INT
SET @i = 0
WHILE ( @i < 100000 )
BEGIN
INSERT INTO t2
VALUES ( @i, 'dadf' )
SET @i = @i + 1
END
CHECKPOINT
COMMIT
DELETE FROM t2

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

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

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

为什麽会这样??

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


总结

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

readfile操作的调用堆栈

进程树

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

如何用Procmon.exe来监视SQLSERVER的logwrite大小的更多相关文章

  1. windows 进程监控 Procmon.exe

    windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ...

  2. 如何用CSC.exe来编译Visual C#的代码文件

    原文:如何用CSC.exe来编译Visual C#的代码文件 C#的编译过程      如何用CSC.exe来编译Visual C#的代码文件   Csc.exe 编译器的位置路径:C:\Window ...

  3. 如何用dumpbin.exe检查编译器生成的托管模块所嵌入的信息

    开启CMD 运行到dumpbin目录下:D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 运行命令VCVARS32.BAT,配置环境 ...

  4. .net core 发布单个exe 文件, 并优化缩小大小

    最新版的.net core 3.0 可以通过命令行发布为exe文件, 操作步骤如下: 在项目目录下打开控制台: 输入命令: dotnet publish -r win-x64 -c Release - ...

  5. sqlserver计算表使用大小sql

    ) create table #spt_space ( ) null, [rows] int null, ) null, ) null, ) null, ) null ) set nocount on ...

  6. SQLSERVER 数据库性能的的基本

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

  7. SQLSERVER 数据库性能的基本

    很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据库服务器 做数据库服务器的那台服务器性 ...

  8. SQLSERVER 数据库性能的的基本 MVC + EF + Bootstrap 2 权限管理

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

  9. [zhuan]SQLSERVER 数据库性能的基本

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

随机推荐

  1. 基于神念TGAM的脑波小车(1)

    作者声明:此博客是作者的毕设心得,拿来分享. 拿到模块,在网上查了一圈,发现基本没什么有用的资料,有也是一些废话,经过我几个月的攻克,现在已初步搞定,分享给大家. 废话不多说,直接步入正题. 这是通过 ...

  2. App Inspector 功能详解

    前言: App Inspector:浏览器端的移动设备 UI 查看器,使用树状态结构查看 UI 布局,自动生成 XPaths 官网:https://macacajs.github.io/app-ins ...

  3. Redis学习笔记之底层数据结构

    1.简单动态字符串(simple dynamic string, SDS) 定义: struct sdshdr {        int len;//记录buf中使用的字节数量        int ...

  4. 《Linux内核分析》第一周学习小结 计算机是如何工作的?

    <Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇  一.存储程序计算机工作模型 1.      冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程 ...

  5. Linux内核实验作业六

    实验作业:分析Linux内核创建一个新进程的过程 20135313吴子怡.北京电子科技学院 [第一部分]阅读理解task_struct数据结构 1.进程是计算机中已运行程序的实体.在面向线程设计的系统 ...

  6. C++ Makefile文件编写

    对现有的一个C++动态库文件和调用程序,分别编写Makefile文件,从零开始,这里把自己弄明白的一些东西分享给大家. 1.必须明确Linux下,C++的编译器是g++,C语言的是gcc.网上大多数又 ...

  7. c#public、private、protected、internal、protected internal

    public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问. ...

  8. REQUIRES_NEW 如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务 相当于嵌套事务 双层循环那种

    REQUIRES_NEW   如果不在一个事务那么自己创建一个事务 如果在一个事务中 自己在这个大事务里面在创建一个子事务  相当于嵌套事务 双层循环那种 不管是否存在事务,业务方法总会自己开启一个事 ...

  9. Strongly connected HDU - 4635(判断强连通图 缩点)

    找出强联通块,计算每个连通块内的点数.将点数最少的那个连通块单独拿出来,其余的连通块合并成一个连通分量. 那么假设第一个连通块的 点数是 x  第二个连通块的点数是 y 一个强连通图(每两个点之间,至 ...

  10. 【刷题】BZOJ 1487 [HNOI2009]无归岛

    Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一 ...