技术开发 频道

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

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

  Trace Flag 610

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

  参考资料:

  http://msdn.microsoft.com/en-us/library/dd425070.aspx

  http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/10/24/new-update-on-minimal-logging-for-sql-server-2008.aspx

  Trace Flag 834

  使用 Microsoft Windows 大页面缓冲池分配。如果服务器是SQL Server专用服务器的话,值得开启该跟踪标记。

  Trace Flag 835

  允许SQL Server 2005和2008标准版使用"锁定内存页",和在组策略中设置的结果大同小异,但是允许在标准版中使用.

  Trace Flag 1118

  tempdb分配整个区,而不是混合区,减少SGAM页争抢。

  当apply tempdb的best practice之后,还遇到争抢问题,考虑使用该跟踪标记。

  参考资料:

  http://blogs.msdn.com/b/psssql/archive/2008/12/17/sql-server-2005-and-2008-trace-flag-1118-t1118-usage.aspx

  Trace Flag 1204和1222

  这两个跟踪标记都是将死锁写到错误日志中,不过1204是以文本格式进行,而1222是以XML格式保存。可以通过

  sp_readerrorlog查看日志。

  Trace Flag 1211和1224

  两种方式都是禁用锁升级。但行为有所差别1211是无论何时都不会锁升级,而1224在内存压力大的时候会启用锁升级,从而避免了out-of-locks错误。当两个跟踪标记都启用是,1211的优先级更高。

  Trace Flag 2528

  禁用并行执行DBCC CHECKDB, DBCC CHECKFILEGROUP,DBCC CHECKTABLE。这意味着这几个命令只能单线程执行,这可能会需要更多的时间,但是在某些特定情况下还是有些用处。

  Trace Flag 3226

  防止日志记录成功的备份。如果日志备份过于频繁的话,会产生大量错误日志,启用该跟踪标记可以使得日志备份不再被记录到错误日志。

  Trace Flag 4199

  所有KB补丁对于查询分析器行为的修改都生效,这个命令比较危险,可能扫称性能的下降,具体请参看:

  http://support.microsoft.com/kb/974006

  四、不应该在生产环境中启用的跟踪标记

  Trace Flag 806

   在读取过程中对页检查逻辑一致性,在错误日志中就可以看到类似下面的信息:

    2004-06-25 11:29:04.11 spid51 错误: 823,严重性: 24 日状态: 2

   2004-06-25 11:29:04.11 spid51 I/O 错误 (审核失败) 在读取过程中检测到的偏移量主题 SQL Server\MSSQL\data\pubs.mdf e:\Program 文件中的 0x000000000b0000.

   参考资料:http://support.microsoft.com/kb/841776

   该跟踪标记会极大的降低性能!!!

   Trace Flag 818

   检查写一致性

   跟踪标志 818 启用了一个内存中的环形缓冲区,用于跟踪由运行 SQL Server 的计算机执行的最后 2,048 个成功写操作(不包括排序和工作文件 I/O)。发生 605、823 或 3448 之类的错误时,将传入缓冲区的日志序列号 (LSN) 值与最新写入列表进行比较。如果在读操作期间检索到的 LSN 比在写操作期间指定的更旧,就会在 SQL Server 错误日志中记录一条新的错误信息。大部分 SQL Server 写操作以检查点或惰性写入形式出现。惰性写入是一项使用异步 I/O 操作的后台任务。环形缓冲区的实现是轻量的,因此对系统性能的影响可以忽略。

   参考资料:http://support.microsoft.com/kb/826433

   TraceFlag 1200

    返回加锁信息的整个过程,是学习加锁过程很牛逼的标志,示例代码如下:

DBCC TRACEON(1200,-1)
DBCC TRACEON(
3604)
DBCC TRACESTATUS

SELECT * FROM AdventureWorks.person.Address

   参考资料:http://stackoverflow.com/questions/7449061/nolock-on-a-temp-table-in-sql-server-2008

   Trace Flag 1806

    禁用即时文件初始化,所有的磁盘空间请求全部使用填0初始化,可能造成在空间增长时产生阻塞。

    Trace Flag 3502

   在日志中显示有关checkpoint的相关信息。如图1所示。

DBA应该知道的一些SQL Server跟踪标记
▲图1.在错误日志中显示CheckpointTrace

    Flag 3505

   不允许自动进行checkpoint,checkpoint只能手动进行,是非常危险的一个命令。

   小结

  跟踪标志是控制SQL Server行为的一种方式,对于某些跟踪标志来说,可以在生产环境中提高性能,而对于另一些来说,用在生产环境中是一件非常危险的事情,只有在测试环境中才能被使用。要记住,跟踪标记对于调优是一种剑走偏锋的手段,只有在使用了所有基本的调优手段之后,才考虑使用跟踪标记。

0
相关文章