DBA应该知道的一些SQL Server跟踪标记

时间:2023-01-23 09:29:21

跟踪标记是什么?

  对于DBA来说,掌握Trace Flag是一个成为SQL Server高手的必要条件之一,在大多数情况下,Trace Flag只是一个剑走偏锋的奇招,不必要,但在很多情况下,会使用这些标记可以让你更好的控制SQL Server的行为。

  下面是官方对于Trace Flag的标记:

  跟踪标记是一个标记,用于启用或禁用SQL Server的某些行为。

  由上面的定义不难看出,Trace Flag是一种用来控制SQL Server的行为的方式。很多DBA对Trace Flag都存在一些误区,认为只有在测试和开发环境中才有可能用到Trace Flag,这种想法只能说部分正确,因此对于Trace Flag可以分为两类,适合在生产环境中使用的和不适合在生产环境中使用的。

  Important:Trace Flag属于剑走偏锋的招数,在使用Trace Flag做优化之前,先Apply基本的Best Practice。

  如何控制跟踪标记

  控制跟踪标记的方式有以下三种:

  1、通过DBCC命令

  可以通过DBCC命令来启用或关闭跟踪标记,这种方式的好处是简单易用,分别使用下面三个命令来启用,禁用已经查看跟踪标记的状态:

  ● DBCC TRACEON(2203,-1)

  ● DBCC TRACEOFF(2203,1)

  ● DBCC TRACESTATUS

  其中,TRACEON和TRACEOFF第二个参数代表启用标志的范围,1是Session Scope,-1是Global Scope,如果不指定该值,则保持默认值Session Scope。

  另外,值得说的是,如果你希望在每次SQL Server服务启动时通过DBCC命令控制某些Flag,则使用

EXEC sp_procoption @ProcName = '<procedure name>'
    , @OptionName
= ] 'startup'
    , @OptionValue = 'on';

  这个存储过程来指定,sp_procoption存储过程会在SQL Server服务器启动时自动执行。

  还有一点值得注意的是,不是所有的跟踪标记都可以用DBCC命令启动,比如Flag 835就只能通过启动参数指定。

  2、通过在SQL Server配置管理器中指定

  这种方式是通过在数据库引擎启动项里加启动参数设置,只有Global Scope。格式为-T#跟踪标记1;T跟踪标记2;T跟踪标记3。

  3、通过注册表启动

  这种方式和方法2大同小异,就不多说了。

  一些在生产环境中可能需要的跟踪标记

  Trace Flag 610

  减少日志产生量。如果你对于日志用了很多基础的best
practice,比如说只有一个日志文件、VLF数量适当、单独存储,如果还是不能缓解日志过大的话,考虑使用该跟踪标记。