DBCC 命令的日志记录

Dav*_*ett 3 sql-server sql-server-2012

是否有办法跟踪 DBCC 命令是否针对 SQL Server 数据库运行?

具体来说,我想查看以下 2 个命令是否已在任何时候运行?

DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS

原因是缓存不断清空,我很确定服务器上没有很大的内存压力。

我真的很想排除这样一个事实,即这是由某人完成的,这确实是我需要调查和/或向服务器添加更多内存的真正问题。

提前致谢大卫

Phi*_*rtz 6

这是一个扩展事件会话,用于查找尚未发生的任何 DBCC调用。从您的问题看来,您过去可能想找到那些?就像其他人提到的那样,缓存清除日志中应该有信息,并且应该如下(至少在 SQL2014 上):

Date,Source,Severity,Message
08/10/2016 20:03:51,spid66,Unknown,SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
08/10/2016 20:03:51,spid66,Unknown,SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
08/10/2016 20:03:51,spid66,Unknown,SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
Run Code Online (Sandbox Code Playgroud)

将来您可以使用此扩展事件定义。

CREATE EVENT SESSION [DBCC] ON SERVER 
ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(0)
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([statement],N'DBCC%'))), ADD EVENT sqlserver.sql_statement_starting(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.server_instance_name,sqlserver.server_principal_name,sqlserver.sql_text,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([statement],N'DBCC%')))
GO
-- Uncomment if you want to output to a target file and change the file path
--ALTER EVENT SESSION [DBCC] ON SERVER 
--ADD TARGET package0.event_file(SET filename=N'K:\Backup\DBCC_XE',max_rollover_files=(2))
--GO


ALTER EVENT SESSION [DBCC] ON SERVER STATE = START
GO

-- Don't forget to turn it off
ALTER EVENT SESSION [DBCC] ON SERVER STATE = STOP
GO
Run Code Online (Sandbox Code Playgroud)

会给你一些这样的信息(我的用户名和服务器名被编辑了):

XE显示器

如果您想要一个跟踪(SQL Profiler)定义,我也可以将其中的一个放在一起。

希望这可以帮助。

干杯