在Server中,需要缩小事务日志文件,因此执行DBCC (我们忘记在执行之前记录文件大小)。现在,我们如何检查文件收缩过程是否成功,特别是在收缩之前我们不知道初始文件大小。
清晰性:收缩过程目前是而不是运行,(这不是检查收缩的持续进度)。
还有一种方法可以获得收缩事件的历史数据吗?
蒂娅。
发布于 2022-11-03 12:09:19
您可以通过跟踪databases_data_file_size_changed事件来处理扩展事件。
遵循以下命令:
CREATE EVENT SESSION ES_TRACK_DB_FILE_CHANGE
ON SERVER
ADD EVENT sqlserver.database_file_size_change
(ACTION(sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.database_name,
sqlserver.nt_username,
sqlserver.server_principal_name,
sqlserver.session_nt_username,
sqlserver.sql_text,
sqlserver.username))
ADD TARGET package0.event_file
(SET filename=N'C:\XE_EVENTS\TRACK_DB_FILE_CHANGE.xel')
WITH (MAX_MEMORY=2048 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=60 SECONDS,
STARTUP_STATE=ON)
GO发布于 2022-11-03 12:14:04
关于(最近的)历史信息,可以参考默认的跟踪(背景in this answer):
DECLARE @path nvarchar(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT TextData, [Database] = DB_NAME(DatabaseID), LoginName
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 116
AND UPPER(CONVERT(nvarchar(max), TextData)) LIKE N'%SHRINK%';
-- could be SHRINKDATABASE然而,这只是告诉你他们什么时候发生的,是谁干的。它不包括发生了多少收缩(如果有的话)或即使文件增长(是的,这是可能的,通过SHRINKFILE)。它甚至不允许您计算持续时间,这可能会帮助您推断收缩发生了多少,因为DBCC事件在开始时会被捕获。
为了持续地捕获这些信息,我想说的是,不要只运行DBCC SHRINKFILE(),而是将其封装在一个脚本中,在脚本中轮询文件大小前后的大小。您可以使用另一个答案中描述的扩展事件会话,但该会话看起来不像捕获大小。
https://stackoverflow.com/questions/74302163
复制相似问题