首页 > 代码库 > SQL Server Log文件对磁盘的写操作大小是多少
SQL Server Log文件对磁盘的写操作大小是多少
SQL Server 数据库有三种文件类型,分别是数据文件、次要数据文件和日志文件,其中日志文件包含着用于恢复数据库的所有日志信息,SQL Server总是先写日志文件ldf,数据变化写入mdf则可以滞后,所以日志写入的速度在一定程序上决定了SQL Server所能承载的写事务量,那么ldf写入大小是多少呢?
要知道SQL Server写 Log的大小,这里使用工具Process Monitor
这里设置一个Filter,以满足只收集SQL Server 写日志,如下图所示:
在一个OLTP生产环境的结果分析如下:
从中可以看到这个UserDB.ldf的Log写入是顺序写,写入大小以1024byte为主:
通过上面的结果,针对Log文件ldf的写要求,我们在选择磁盘及RAID时,如何来做呢?推荐使用工具SQLIO来做一个针对单线程顺序写1kb硬件性能比对测试,来模拟Log写操作,这个将在以后的文章里进行测试。
那么,SQL Log写入ldf一定是以1024byte最多吗?这个不一定的,以下是在另外的OLTP下得到的结果:
下面这个是Tempdb:
那么你的是多少呢?可以用Process Monitor下测下。
Process Monitor下载地址
收集到的数据存成Logfile.CSV.
然后用下列语句进行分析:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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:\Tmp\Logfile.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 |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。