笔记291 宋大侠写的跟踪标记 2013-4-30

笔记291 宋大侠写的跟踪标记 2013-4-30

  1 -- 宋大侠写的跟踪标记 2013-4-30
  2 
  3 -- 如何控制跟踪标记
  4 -- 控制跟踪标记的方式有以下三种:
  5 
  6 --1. 通过DBCC 命令
  7 --
  8 -- 可以通过DBCC 命令来启用或关闭跟踪标记,这种方式的好处是简单易用,分别使用下面三个命令来启用,
  9 -- 禁用已经查看跟踪标记的状态:
 10 
 11 DBCC TRACEON( 2203 ,-1 )
 12 DBCC TRACEOFF( 2203 ,1 )
 13 DBCC TRACESTATUS
 14  
 15 
 16 -- 其中,TRACEON 和 TRACEOFF第二个参数代表启用标志的范围,1是 Session Scope,-1是 Global Scope,如果不指定该值,
 17 -- 则保持默认值 Session Scope。
 18 
 19 -- 另外,值得说的是,如果你希望在每次 SQL Server 服务启动时通过 DBCC命令控制某些 Flag ,则使用
 20 
 21 
 22 EXEC [sys]. [sp_procoption] @ProcName = N '' , -- nvarchar(776)
 23     @OptionName = '' , -- varchar(35)
 24     @OptionValue = '' -- varchar(12)
 25    
 26 -- 这个存储过程来指定, sp_procoption存储过程会在 SQL Server 服务器启动时自动执行。
 27 --
 28 -- 还有一点值得注意的是,不是所有的跟踪标记都可以用 DBCC 命令启动,比如 Flag 835就只能通过启动参数指定。
 29 --
 30 --
 31 --
 32 --2. 通过在SQL Server 配置管理器中指定
 33 --
 34 -- 这种方式是通过在数据库引擎启动项里加启动参数设置,只有 Global Scope 。格式为T# 跟踪标记 ;T跟踪标记 ;T 跟踪标记。
 35 --
 36 
 37 
 38 --3. 通过注册表启动
 39 --
 40 -- 这种方式和方法大同小异,就不多说了。
 41 
 42 
 43 ------------------------------------ 生产环境 -------------------------------------
 44 Trace Flag 610
 45 -- 减少日志产生量。如果你对于日志用了很多基础的 best practice ,比如说只有一个日志文件、 VLF 数量适当、单独存储,
 46 -- 如果还是不能缓解日志过大的话,考虑使用该跟踪标记。
 47 
 48 Trace Flag  834
 49 -- 使用Microsoft Windows 大页面缓冲池分配。如果服务器是 SQL Server 专用服务器的话,值得开启该跟踪标记。
 50 
 51 Trace Flag  835
 52 -- 允许SQL Server 2005 和标准版使用"锁定内存页",和在组策略中设置的结果大同小异,但是允许在标准版中使用.
 53 
 54 
 55 Trace Flag  1118
 56 --tempdb 分配整个区,而不是混合区,减少 SGAM 页争抢。
 57 -- 当apply tempdb 的 best practice之后,还遇到争抢问题,考虑使用该跟踪标记。
 58 
 59 
 60 Trace Flag  1204 61 -- 这两个跟踪标记都是将死锁写到错误日志中,不过是以文本格式进行,而是以 XML 格式保存。可以通过
 62 --sp_readerrorlog 查看日志。
 63 
 64 
 65 Trace Flag  1211 66 -- 两种方式都是禁用锁升级。但行为有所差别是无论何时都不会锁升级,
 67 -- 而在内存压力大的时候会启用锁升级,从而避免了 out-of-locks 错误。当两个跟踪标记都启用是,的优先级更高。
 68 
 69 
 70 
 71 Trace Flag  2528
 72 -- 禁用并行执行 DBCC CHECKDB, DBCC CHECKFILEGROUP,DBCC CHECKTABLE 。这意味着这几个命令只能单线程执行,
 73 -- 这可能会需要更多的时间,但是在某些特定情况下还是有些用处。
 74 
 75 
 76 Trace Flag  3226  
 77 -- 防止日志记录成功的备份。如果日志备份过于频繁的话,
 78 -- 会产生大量错误日志,启用该跟踪标记可以使得日志备份不再被记录到错误日志。
 79 
 80 
 81 Trace Flag  4199
 82 -- 所有KB 补丁对于查询分析器行为的修改都生效,这个命令比较危险,可能称性能的下降,具体请参看:
 83 --http://support.microsoft.com/kb/974006
 84 
 85 
 86 ------------------------------- 不应该在生产环境中启用的跟踪标记 -------------------------
 87 Trace Flag  806
 88 -- 在读取过程中对页检查逻辑一致性,在错误日志中就可以看到类似下面的信息:
 89 --
 90 --2004-06-25 11:29:04.11 spid51 错误: 823,严重性: 24 状态:2
 91 --2004-06-25 11:29:04.11 spid51 I/O 错误(审核失败)
 92 -- 在读取过程中检测到的偏移量 SQL Server\MSSQL\data\pubs.mdf e:\Program 文件中的 0x000000000b0000.
 93 --
 94 -- 参考资料: http://support.microsoft.com/kb/841776
 95 --
 96 -- 该跟踪标记会极大的降低性能!!!
 97 
 98 
 99 Trace Flag 818 
100 -- 检查写一致性
101 -- 跟踪标志818 启用了一个内存中的环形缓冲区,用于跟踪由运行 SQL Server 的计算机执行的
102 -- 最后2,048 个成功写操作(不包括排序和工作文件 I/O )。发生605 、或 3448 之类的错误时,
103 -- 将传入缓冲区的日志序列号 (LSN) 值与最新写入列表进行比较。如果在读操作期间检索到的 LSN 比在写操作期间指定的更旧,
104 -- 就会在SQL Server 错误日志中记录一条新的错误信息。大部分 SQL Server 写操作以检查点或惰性写入形式出现。
105 -- 惰性写入是一项使用异步 I/O 操作的后台任务。环形缓冲区的实现是轻量的,因此对系统性能的影响可以忽略。
106 --
107 -- 参考资料: http://support.microsoft.com/kb/826433
108 
109 
110 
111 Trace Flag 1200
112  
113 -- 返回加锁信息的整个过程,是学习加锁过程很牛逼的标志,示例代码如下:
114 --
115 DBCC TRACEON( 1200 ,-1 )   -- -1GLOBAL
116 DBCC TRACEON( 3604 )  -- 默认session
117 DBCC TRACESTATUS
118 
119 SELECT * FROM AdventureWorks . person. Address
120 
121 
122 
123 
124 Trace Flag 1806
125  
126 -- 禁用即时文件初始化,所有的磁盘空间请求全部使用填初始化,可能造成在空间增长时产生阻塞。
127 
128 
129 
130 Trace Flag 3502
131 DBCC TRACEON( 3502 ,-1 )
132 CHECKPOINT
133 
134 EXEC [sys]. [sp_readerrorlog]
135 
136 -- 在日志中显示有关 checkpoint的相关信息。如图1所示。
137 -- 在错误日志中显示 Checkpoint
138 
139 
140 Trace Flag 3505
141 -- 不允许自动进行 checkpoint,checkpoint只能手动进行,是非常危险的一个命令。
142 
143 --------------------------------------------------------------------------------
144 -- 小结
145 -- 跟踪标志是控制 SQL Server行为的一种方式,对于某些跟踪标志来说,可以在生产环境中提高性能,
146 -- 而对于另一些来说,用在生产环境中是一件非常危险的事情,只有在测试环境中才能被使用。要记住,
147 -- 跟踪标记对于调优是一种剑走偏锋的手段,只有在使用了所有基本的调优手段之后,才考虑使用跟踪标记。

 

posted @ 2013-08-04 21:04 桦仔 阅读(...) 评论(...) 编辑 收藏