IT *_*her 4 sql-server sql-server-2008-r2 trace
我使用下面的查询来获取 sql server 中数据库发生的自动增长事件。
DECLARE @trcfilename VARCHAR(1000);
SELECT @trcfilename = path FROM sys.traces WHERE is_default = 1
SELECT COUNT(*)as no_of_autogrowths,
sum(duration/(1000*60)) as time_in_min,
Filename
FROM ::fn_trace_gettable(@trcfilename, default)
WHERE (EventClass = 92 OR EventClass = 93)
GROUP BY Filename
Run Code Online (Sandbox Code Playgroud)
它输出自动增长的数量、自动增长所用的时间和文件的逻辑名称。但我想要文件的物理名称(mdf 和 ldf 文件名)而不是逻辑名称。我不知道是否从 sys.traces 中我会得到物理名称,或者请帮助我用另一种方法来做到这一点。
正如 Remus 在评论中提到的,您必须加入跟踪表结果sys.master_files以获取物理文件名。
这是一个完整的查询。请注意,跟踪中的持续时间以微秒为单位,我相应地调整了计算以输出更合理的指标(希望您没有实际发生的自动增长分钟数):
DECLARE @trcfilename nvarchar(2048);
SELECT @trcfilename = path FROM sys.traces WHERE is_default = 1;
SELECT
DB_NAME(mf.database_id) AS DatabaseName,
mf.name AS LogicalFileName,
mf.physical_name AS PhysicalFileName,
a.NumberOfGrowths,
CAST(a.DurationOfGrowthsInSeconds AS decimal(18, 3)) AS DurationOfGrowthsInSeconds
FROM
(
SELECT
tt.DatabaseID AS database_id,
tt.FileName AS LogicalFileName,
COUNT(*) AS NumberOfGrowths,
SUM(tt.Duration / (1000 * 1000.0)) AS DurationOfGrowthsInSeconds
FROM sys.fn_trace_gettable(@trcfilename, default) tt
WHERE (EventClass IN (92, 93))
GROUP BY
tt.DatabaseID,
tt.FileName
) a
INNER JOIN sys.master_files mf ON
(mf.database_id = a.database_id) AND
(mf.name = a.LogicalFileName);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |