Mar*_*ark 2 sql-server t-sql error-log
我正在使用这个 sql 来获取我的错误日志位置:
EXEC xp_readerrorlog 0, 1, N'Logging SQL Server messages in file'
Run Code Online (Sandbox Code Playgroud)
但是,有时我有非常大的日志文件(大约 1gb,我无法控制这些文件的循环)上面的查询需要大约 10 秒才能在这些大文件上运行,这太长了。
鉴于这段文本总是在文件的前几行,如果我能说“给我前 1 行然后停止阅读”就好了,但我认为 xp_readerrorlog 不支持这一点?
或者,如果我知道文件中第一行的日期,我可以指定一个日期范围,如下所示:
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
SET @startDate = '2016-01-28 12:00:00'
SET @endDate = DATEADD(mi, 5, @startDate)
EXEC xp_readerrorlog 0, 1, N'Logging SQL Server messages in file', NULL, @startDate, @endDate
Run Code Online (Sandbox Code Playgroud)
哪个要快得多。但是,我不知道如何计算出这个日期——在许多情况下,它与实例进程的开始时间几乎相同(SELECT login_time FROM sysprocesses WHERE spid = 1但这不能保证)
我还尝试使用master..xp_instance_regread从 读取日志文件位置SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters,但这似乎并不总是准确的。
有没有人对我如何以有效的方式计算日志文件位置有任何建议,即使我的日志文件很大。
SELECT SERVERPROPERTY('ErrorLogFileName')
Run Code Online (Sandbox Code Playgroud)
实际上它是一个(未记录的)服务器属性,它似乎适用于 SQL2005+
乔·萨克 (Joe Sack)有一个帖子