我已经在这里和这里通读了Aaron Bertrand最近的几篇文章,但没有发现关于新的跟踪标志的任何事情。
我将mssqlsystemresource的数据和日志文件复制到一个新位置,并将其像常规数据库一样附加到系统表和视图中,但没有立即发现任何东西。我考虑过列出一个已知的跟踪标志列表,并循环访问该列表中未列出的数字,以查看DBCC TRACEON允许使用哪些标志,但是我想先在这里提出问题。
假设启用它们的DBCC命令必须检入一些资源以确保跟踪标志有效,那么该跟踪标志将作用于何处?是否存在包含列表的.dll或其他一些系统文件?
我知道问题很严重,但这促使我读到有关具有特定预期行为的跟踪标志以及一项新功能在2016年没有上述效果。我最初的想法是,数字可能会以某种方式进行转置,例如7129变为7219。我希望获得一个在7000-7999范围内的有效跟踪标志的列表,以查找排列。将它们全部作为DBCC TRACEON标志和启动参数进行测试会很麻烦,再结合针对特征行为的结果测试。
#1 楼
除了询问或从帖子/幻灯片组/等等中挑选它们之外,您什么也找不到查找列表。该列表仅存在于代码中的头文件中,在该头文件中,有效的跟踪标志号映射到C ++代码中一个大枚举中的名称,然后在其余代码中使用这些名称。正如亚伦(Aaron)所说,您可以启用任何跟踪标记号,并且如果它不执行任何操作,或者不使用跟踪标记所具有的功能,则不会发现行为上的任何差异。 br />
DBCC TRACEON
不会检查任何内容-因为没有运行时列表中的数字有效或无效-它只是在位图中为该连接/全局设置了哪些标志启用了跟踪标志号。 进行有效性检查的问题是,将公开哪些跟踪标志有效,从而允许发现它们。这样有效地混淆了“有效列表”,这是SQL团队想要的。
关于Kin的建议中,SQL Server应该具有
select * from sys.available_trace_flags
-是和否。有许多跟踪标记对性能有很大影响,并且仅在产品支持的指导下调试问题才是必需的,但是SQL Server可以列出“安全”标记。#2 楼
找到新的跟踪标志的方法是什么?
在大多数情况下,这取决于花时间和精力来寻找它们。可以编写脚本来遍历可能的跟踪标志号并分析影响,但这并不总是富有成效的。造成这种情况的原因有很多,但常见的麻烦包括以下事实:某些跟踪标志仅与其他跟踪标志一起有效,某些跟踪标志仅在启动时与
-T
一起使用,或者与DBCC TRACEON
一起使用时,有些仅与OPTION (QUERYTRACEON)
一起使用。有些需要未记录的命令或命令扩展,或者还需要启用特定功能。有些只有在知道在哪里寻找效果时才会产生效果。等等,等等……非常等等。话说,也许最有效的技术是逐步通过连接调试器或其他性能分析工具逐步执行特定的查询或命令。 ,比较打开和关闭的跟踪标记所采用的路径。如果这听起来很耗时,那是因为它。如果您之前已经经历了数百或数千次此过程,这对于您正在寻找的东西有广泛的感觉,最可能有效的跟踪标志范围以及哪一部分是有用的。
在简单的情况下会很有用。
在
CSessionTraceFlags::CheckSessionTraceInternal
上设置断点并检查edx
寄存器的值(以查看正在检查哪个跟踪标志)可能会很有用,但有趣的情况并非如此通常很简单-并非在所有跟踪标志都会影响所采用的代码路径的位置对其进行检查。在SQL Server 2019中,在
sqllang!GetGlobalTraceFlagStore
上设置一个断点。当此非常短的函数返回时,调用方将如上所述将跟踪标志号放入寄存器edx
中,然后再调用sqllang!get_bit
来检查该标志是否已设置。官方跟踪标志的列表很小。这些标志已经过全面测试,并且(并且将)由CSS以及最终由产品开发人员支持。它们也是具有足够用例的标记,值得记录。
您发现的任何其他跟踪标记都是出于好奇,在各种情况下(不同的内部版本,SKU,安全设置,不同的功能...您能想到或想不到的任何其他东西)。这些将仅由撰写这些内容的人“支持”。
有几个非正式的列表,我所知道的最好的列表是Aaron Morelli的SQL Server Flags主题集合(当前在v6中) ,2016年4月)。
话虽如此,Microsoft CSS确实(最终)可以访问所有跟踪标志,因此即使您不在官方列表中,它们也可以为您提供建议。当然,他们可能选择不说话,并且可能要收费。我真的不知道,我自己从来没有走过那条路。
#3 楼
我们在github上维护了一组跟踪标志(现在为599个跟踪标志):Microsoft SQL Server跟踪标志
此外,Brent Ozar在他的精彩文章中描述了非常好的技术坏主意牛仔裤:在这篇很棒的文章中查找未记录的跟踪标记和Joe Obbish一种查找跟踪标记的方法
评论
一个小的调整-DBCC TRACEON确实检查了某些内容。该要点显示了从1开始循环遍历跟踪标志的代码。所有当前版本的SQL Server都会中断并在最大当前跟踪标志数处引发错误:gist.github.com/BrentOzar/0e9692da8ceffeb2b4bdd064e36d3174
–布伦特·奥扎(Brent Ozar)
17-10-3在20:44