zoukankan      html  css  js  c++  java
  • SQL Server Log文件对磁盘的写操作大小是多少

    SQL Server 数据库有三种文件类型,分别是数据文件、次要数据文件和日志文件,其中日志文件包含着用于恢复数据库的所有日志信息,SQL Server总是先写日志文件ldf,数据变化写入mdf则可以滞后,所以日志写入的速度在一定程序上决定了SQL Server所能承载的写事务量,那么ldf写入大小是多少呢?

    要知道SQL Server写 Log的大小,这里使用工具Process Monitor

    这里设置一个Filter,以满足只收集SQL Server 写日志,如下图所示:

    image

    在一个OLTP生产环境的结果分析如下:
    从中可以看到这个UserDB.ldf的Log写入是顺序写,写入大小以1024byte为主

    image

    image

    通过上面的结果,针对Log文件ldf的写要求,我们在选择磁盘及RAID时,如何来做呢?推荐使用工具SQLIO来做一个针对单线程顺序写1kb硬件性能比对测试,来模拟Log写操作,这个将在以后的文章里进行测试。

    那么,SQL Log写入ldf一定是以1024byte最多吗?这个不一定的,以下是在另外的OLTP下得到的结果:

    $90$3HOA0G})ISZHIJKA3BF

    F$ZWU6NTID%S`2S`~5U_6N9

    下面这个是Tempdb:

    $IA4%JB$Q]2G9MO4S0R17(Q

    那么你的是多少呢?可以用Process Monitor下测下。
    Process Monitor下载地址

    收集到的数据存成Logfile.CSV.

    然后用下列语句进行分析:

    USE tempdb
    GO
    CREATE TABLE [dbo].[Logfile]
        (
          [Time of Day] [nvarchar](MAX) NULL ,
          [Process Name] [nvarchar](MAX) NULL ,
          [PID] [nvarchar](MAX) NULL ,
          [Operation] [nvarchar](MAX) NULL ,
          [Path] [nvarchar](MAX) NULL ,
          [Result] [nvarchar](MAX) NULL ,
          [Detail] [nvarchar](MAX) NULL
        )
    ON  [PRIMARY]
    
    GO
    
    BULK INSERT [Logfile] FROM 'D:TmpLogfile.CSV'
    WITH (
             FIELDTERMINATOR =',',
     FIRSTROW=2
    )
    
    SELECT  [Time of Day] ,
            [Process Name] ,
            PID ,
            Operation ,
            REPLACE(PATH, 'DBname', 'myDB') AS Path ,
            Result ,
            Detail
    FROM    [Logfile]
    --WHERE PATH LIKE '%DBname%'
    
    SELECT  SUBSTRING(detail, CHARINDEX('Length:', detail) + 7,
                      CHARINDEX('Flags', detail) - CHARINDEX('Length:', detail)
                      - 13) AS size
    INTO    #
    FROM    [Logfile]
    WHERE   PATH LIKE '%HighEndSeekerDB%'
    
    SELECT  size AS [SIZE(Bypte)] ,
            COUNT(*) AS CNT ,
            LTRIM(CAST(COUNT(*) * 1.0 / ( SELECT    COUNT(*)
                                          FROM      #
                                        ) * 100 AS NUMERIC(18, 4))) + '%' AS ratio
    FROM    #
    GROUP BY size
    --ORDER BY count(*) desc
    --ORDER BY CAST(REPLACE(size, ',', '') AS BIGINT)  
    ORDER BY ratio DESC
     
    

      


  • 相关阅读:
    Winform中怎样去掉TextBox输入回车时的警告音
    sql server 2000 出现不能执行查询,因为一些文件丢失或未注册”
    c# winform 创建文件,把值写入文件,读取文件里的值,修改文件的值,对文件的创建,写入,修改
    <metro>PlayToReceiver class
    <metro>PlayToReceiver
    <C#>怎样学好Winform
    <C#>怎样学好winform3
    <C#>怎样学好winform4
    <metro>Application Data
    <metro>UI
  • 原文地址:https://www.cnblogs.com/nzperfect/p/3747244.html
Copyright © 2011-2022 走看看