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.
然后用下列語句進行分析:
USE tempdbGOCREATE 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]GOBULK 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 , DetailFROM [Logfile]--WHERE PATH LIKE '%DBname%'SELECT SUBSTRING(detail, CHARINDEX('Length:', detail) + 7, CHARINDEX('Flags', detail) - CHARINDEX('Length:', detail) - 13) AS sizeINTO #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 ratioFROM #GROUP BY size--ORDER BY count(*) desc--ORDER BY CAST(REPLACE(size, ',', '') AS BIGINT) ORDER BY ratio DESC
新聞熱點
疑難解答