
SQL Server 包括一组称为跟踪标志的可配置选项。你可以使用跟踪标志来设置服务器特性并控制不同类型的操作。
你可以手动打开或关闭跟踪标志,也可以将它们添加到 SQL Server 启动参数中,使其随服务启动时启用它们。可以在全局、会话或查询范围内启用跟踪标志,范围决定了跟踪标志对服务器连接的影响程度:
全局跟踪标志在服务器级别启用并影响每个服务器连接。配置为启动参数的跟踪标志始终在全局范围内启用。
会话跟踪标志只限于启用它们的连接,对其他连接没有影响。当会话结束时,跟踪标志不再适用。
查询跟踪标志只限于启用它们的查询。它们对其他查询没有影响,即使在同一会话中也是如此。
当你手动启用跟踪标志时,你必须选择特定的范围,每个跟踪标志都有特定的数字表示。启用查询跟踪标志的方式与全局和会话跟踪标志有很大不同。在启用跟踪标志之前,你应该充分了解它的作用、工作原理以及它对系统的潜在影响。跟踪标志可能会产生不可预知的后果,应谨慎部署。
全局跟踪标志
SQL Server 提供了几个用于处理全局和会话跟踪标志的 T-SQL 语句。你可以使用 DBCC TRACEON 语句手动启用它,指定跟踪标志编号和参数 -1 以指示跟踪标志是全局的。例如在全局级别启用跟踪标志 2301:
DBCC TRACEON (2301, -1);GODBCC TRACEON (2301, -1) WITH NO_INFOMSGS; --取消显示所有信息性消息GO
启用跟踪标志后,你可以通过运行 DBCC TRACESTATUS 语句来验证其状态,指定跟踪标志编号和值 -1 以指示跟踪标志是全局的,如以下示例所示:
DBCC TRACESTATUSDBCC TRACESTATUS (2301, -1);GO

DBCC TRACESTATUS 语句返回的结果包括四列:
TraceFlag:跟踪标志号。
Status:如果为 1,则启用跟踪标志。如果为 0,则不启用跟踪标志。
Global:如果为 1,则在全局级别启用跟踪标志。如果为 0,则不会在全局级别启用跟踪标志。
Session:如果为 1,则在会话级别启用跟踪标志。如果为 0,则不会在会话级别启用跟踪标志。
要在全局级别禁用跟踪标志,你可以使用 DBCC TRACEOFF 语句,再次指定跟踪标志编号和值 -1 以指示跟踪标志是全局的,如以下示例所示:
DBCC TRACEOFF (2301, -1);GO
请确保包含 -1 参数,否则跟踪标志将保持启用状态。要验证跟踪标志是否已被禁用,你可以运行之前运行的相同 DBCC TRACESTATUS 语句:
DBCC TRACESTATUS (2301, -1);GO
在某些情况下,你可可以同时启用、查看、关闭多个跟踪标志。例如,在全局级别设置跟踪标志 715 和 2301:
DBCC TRACEON (715, 2301, -1);--启用GODBCC TRACESTATUS (715, 2301, -1);--查看GODBCC TRACEOFF (715, 2301, -1);--关闭GO
当你使用 DBCC TRACEON 语句在全局级别启用跟踪标志时,它们将保持启用状态,直到你手动禁用它们或重新启动 SQL Server 服务。但是,你可能希望在服务重新启动时自动启用跟踪标志。在这种情况下,你可以使用 -T 开关并指定跟踪标志编号,将跟踪标志添加为启动参数。
将跟踪标志添加为启动参数,可以使用 SQL Server 配置管理器,添加参数-T2301:

添加跟踪标志作为启动参数后,每次重新启动服务都会生效。如果要从启动参数中删除跟踪标志,请在现有参数列表中选择并点击删除,确定后须重新启动服务才能使更改生效。
会话跟踪标志
启用和禁用会话跟踪标志的工作方式与全局跟踪标志非常相似,但有两个明显的差异。你不能将会话跟踪标志添加为启动参数,并且在运行 DBCC TRACEON 和 DBCC TRACEOFF 语句时不包含 -1 参数。例如,要在会话级别启用跟踪标志 2301,你可以使用以下 DBCC TRACEON 语句。

查询跟踪标志
查询跟踪标志启用的方法与全局和会话跟踪标志不同。不能使用 DBCC TRACEON 启用,而是将 QUERYTRACEON 查询提示添加到T-SQL语句中。查询提示仅限于查询优化器跟踪标志,仅有一小部分可跟踪标识可进行设置。如在查询级别启用并行跟踪标志8649。
SELECTs.Name AS Store,SUM(soh.TotalDue) AS TotalSalesFROM Sales.SalesOrderHeader sohINNER JOIN Sales.Store s ON soh.SalesPersonID = s.SalesPersonIDGROUP BY s.NameOPTION(QUERYTRACEON 8649)

SQL Server 跟踪标志
在SQL Server 中,跟踪标志虽然很有用,但我们应该尽量少使用它们。因为在启用跟踪标志提高系统某些性能或性能时,可能在其他地方会出现异常的性能情况。何况微软什么时候从未来版本中删除跟踪标志也未知,尤其是如果你已将跟踪标志添加为启动参数。在生产环境中,每个服务器的配置都有不同,在将它们部署到生产环境之前,请确保你完全了解它们的工作原理以及它们可能产生的影响。
最近文章推荐:
历史文章推荐:





