在 SQL Server 日志中捕获 auto_shrink 事件?

Mag*_*ier 5 monitoring sql-server shrink

我知道AUTO_SHRINK在 SQL Server 数据库上配置的缺点。最近,在一个新环境中,我发现了几台启用了 Auto Shrink 选项的生产服务器。

现在,在更改此配置之前,我想知道:由于 auto_shrink 事件从 25% 的未使用空间开始,我想知道这是否和/或何时在 SQL Server 上实际发生。我试图找到相关的 SQL-Event-Logfile 条目。我开始手动缩小测试数据库,但没有显示事件日志条目。

有谁知道如何找出最近几天或几周内 SQL Server 发生收缩的时间?

KAS*_*DBA 1

是的,您可以从默认跟踪中获取相应的详细信息(请阅读此处了解更多信息),具体取决于以下查询中的保留情况:

\n\n
DECLARE @TracePath NVARCHAR(1000);\n\n-- Get the file path for the default trace\nSELECT    @TracePath = \n        REVERSE(SUBSTRING(REVERSE([path]), \n        CHARINDEX(\'\\\', REVERSE([path])), 1000)) + \'log.trc\'\nFROM     sys.traces\nWHERE     is_default = 1;\n\n-- Query to get auto growth and shrink event from the default trace\nSELECT     EventName = te.[name],\n    tr.ServerName,\n    tr.DatabaseName,\n    tr.[FileName],\n    FilePath = sf.[filename],\n    Duration_in_ms = tr.Duration/1000,\n    FileGrowth_in_mb = (tr.IntegerData*8)/1024,\n    tr.StartTime,\n    tr.EndTime\nFROM     sys.fn_trace_gettable(@TracePath, DEFAULT) tr\n    INNER JOIN sys.trace_events te\n        ON tr.EventClass = te.trace_event_id\n    INNER JOIN sys.sysaltfiles sf\n        ON tr.[FileName] = sf.[name]\nWHERE     te.name in (\n        \'Data File Auto Grow\',\n        \'Log File Auto Grow\',\n        \'Data File Auto Shrink\',\n        \'Log File Auto Shrink\')\nORDER BY tr.StartTime DESC;\n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,您可以通过标准报告部分查看相同的内容:

\n\n

1) 打开 SQL Server Management Studio (SSMS)

\n\n

2) 在对象资源管理器上突出显示要检查其自动收缩事件的数据库并右键单击

\n\n

3) 选择报告,然后选择标准报告。然后选择磁盘使用情况

\n\n

4) 它将在屏幕上打开一个报告,如果该数据库最近有任何自动增长和/或自动收缩事件,您应该能够看到 \xe2\x80\x9cData/Log Files Autogrow/Autoshrink Events\xe2\ x80\x9d 部分。

\n