现在的位置: 首页 > 综合 > 正文

DBCC命令5:跟踪标记

2014年07月28日 ⁄ 综合 ⁄ 共 2871字 ⁄ 字号 评论关闭

跟踪标记涉及到三个命令:traceon、traceoff、tracestatus。

跟踪标记的主要用途是:

1、获取比较深入的SQL Server信息,如Lock Manager的各种锁定操作。

2、改变某些SQL Server预设定的行为,如停止查询优化器寻找最佳执行计划的超时时间。

3、改变某些命令当前的行为,如终止使用查询提示。

  

 

/*=============================================================
3604:直接返回信息到当前客户端,而不是打印信息到错误日志文件

9292:打印出从元数据中得到的统计信息的头信息

9204:打印出被加载的统计信息

8666:打印出被加载的统计信息,同时将Showplan的详细信息打印出来

如果执行计划已经存在于缓存中,那么这些统计信息的记录则不会被打印出来.
所以需要通过DBCC FREEPROCCACHE()先清除执行计划
==============================================================*/

--1.1打开跟踪标记
DBCC TRACEON(3604, 9292, 9204)
GO
 

--1.2运行语句,在消息中返回 
/*==================================================================================
消息选项卡中返回:

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

Stats header loaded: DbName: henkel, ObjName: base_org, IndexId: 2, ColumnName: EMP_ID, EmptyTable: FALSE

Stats loaded: DbName: henkel, ObjName: base_org, IndexId: 2, ColumnName: EMP_ID, EmptyTable: FALSE

Stats header loaded: DbName: henkel, ObjName: base_Employee, IndexId: 1, ColumnName: EMP_ID, EmptyTable: FALSE

Stats loaded: DbName: henkel, ObjName: base_Employee, IndexId: 1, ColumnName: EMP_ID, EmptyTable: FALSE

Stats header loaded: DbName: henkel, ObjName: base_Employee, IndexId: 8, ColumnName: EMP_NAME, EmptyTable: FALSE

Stats loaded: DbName: henkel, ObjName: base_Employee, IndexId: 8, ColumnName: EMP_NAME, EmptyTable: FALSE

(1 行受影响)
=====================================================================================*/

SELECT emp.emp_Name, 
       COUNT(org.org_id)
FROM base_org org
INNER JOIN base_Employee emp
      ON org.Emp_ID = emp.Emp_ID
      
WHERE emp.emp_name like '王丽%'
GROUP BY emp.emp_name


--1.3查询上面语句的执行计划是否缓存
select *
from sys.dm_exec_cached_plans c 

inner join sys.dm_exec_query_stats q
        on q.plan_handle = c.plan_handle
        
cross apply  sys.dm_exec_sql_text(q.sql_handle) t

where t.text like 'SELECT emp.emp_Name, 
       COUNT(org.org_id)
FROM base_org org
INNER JOIN base_Employee emp
      ON org.Emp_ID = emp.Emp_ID
      
WHERE emp.emp_name like ''王丽%''
GROUP BY emp.emp_name'



--1.4删除计划缓存中的所有元素.
--通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。
DBCC FREEPROCCACHE()
GO

--1.5关闭跟踪标记
DBCC TRACEOFF(3604, 9292, 9204)
GO


--1.6开启跟踪标记
DBCC TRACEON(3604,8666)
GO


--2.1显示xml格式执行计划
set statistics xml on


--2.2
/*==================================================================================
返回结果中有xml showplan,单击字符串,按F4
内部调试信息 -> EnvColl -> Recompile -> ModTrackingInfo 点击右边的小方块:

<ModTrackingInfo>
	<Field FieldName="wszStatName" FieldValue="_WA_Sys_0000001C_0AD2A005" />
	<Field FieldName="wszColName" FieldValue="EMP_ID" />
	<Field FieldName="m_cCols" FieldValue="1" />
	<Field FieldName="m_idIS" FieldValue="2" />
	<Field FieldName="m_ullSnapShotModCtr" FieldValue="40120" />
	<Field FieldName="m_ullRowCount" FieldValue="998" />
	<Field FieldName="ullThreshold" FieldValue="699" />
    <Field FieldName="wszReason" FieldValue="heuristic" />
</ModTrackingInfo>

=====================================================================================*/
SELECT emp.emp_Name, 
       COUNT(org.org_id)
FROM base_org org
INNER JOIN base_Employee emp
      ON org.Emp_ID = emp.Emp_ID
      
WHERE emp.emp_name like '王丽%'
GROUP BY emp.emp_name


set statistics xml off

--2.3开启跟踪标记
DBCC TRACEOFF(3604,8666)
GO

 

 

【上篇】
【下篇】

抱歉!评论已关闭.