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 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
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

