数据库监视-profiler使用


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
通过SQL Server?>Tools?>SQL Server Profiler启动
注:激活SQL Profiler跟踪约损耗1/7的性能,所以要谨慎使用。
1,通用页:跟踪的记录有两种保存方式:保存到文件和保存到表。通常选择保存到文件,不要把跟踪直接写入到表,这样会严重影响性能,把文件写到与数据库位置不同的磁盘是最快的方案。
2,模块选择:
Standard:创建跟踪的通用起点。捕获所运行的全部存储过程和 Transact-SQL 批处理。用于监视常规数据库服务器活动。
TSQL:捕获客户端提交给 SQL Server 的所有 Transact-SQL 语句及其发出时间。用于调试客户端应用程序。
TSQL_Duration:捕获客户端提交给 SQL Server 的所有 Transact-SQL 语句及其执行时间(以毫秒位单位),并按持续时间对其进行分组。用于识别执行速度慢的查询。
TSQL_Grouped:捕获提交给 SQL Server 的所有 Transact-SQL 语句及其发出时间。信息按提交语句的用户或客户端分组。用于调查某客户端或用户发出的查询。
TSQL_Locks:捕获客户端与异常锁事件一起提交到 SQL Server 的 Transact-SQL 语句。用于排除死锁、锁超时和锁升级事件的故障。
TSQL_Replay:捕获重播跟踪所需的 Transact-SQL 语句的详细信息。用于执行迭代优化,例如基准测试。

3,事件选择:若多是存储过程,则跟踪SP:Completed事件,若存储过程有很多操作,查看明细要跟踪SP:StmtCompleted.
若程序多是sql语句,则跟踪SQL:BatchCompleted与 SQL:StmtCompleted事件
在事件选择版块上点击列名,可以进行筛选,如指定数据库筛选:DataBaseName 类似于brm_lvjian_new.

4,1) 文件导出脚本,包装成一个存储过程 ,在此存储过程中 print @traceid
   2)执行此存储过程,根据打印出的@traceid来控制跟踪的执行与停止,之所以不用profiler的GUI界面,第一是profiler不便于分析,并且需要将数据写入到GUI,性能也不高。运行:EXEC [WorkTraceStart] 'brm_lvjian_new',@tracefile='d:\mytrace'
   3)控制跟踪:执行: EXEC sp_trace_setstatus @traceid, [0|1|2]    0: 停止 1:启动 2:删除
       注:在执行2)的存储过程后,里面有一个 EXEC sp_trace_setstatus @traceid, 1; 将启动跟踪。
       查看跟踪:sys.traces

4,分析保存的跟踪文件
1)导入
select CAST(textdata as nvarchar(max)) as tsql_code,duration
into Workload
from sys.fn_trace_gettable('C:\test\performancetrace_20100802.trc',NULL) as TT

2)分析
select convert(varchar(60),tsql_code),sum(duration) s,avg(duration) t from workload
where duration >=3000  --一般是执行时间在3秒以上的
group by convert(varchar(60),tsql_code)
order by s desc

5, 查询事件由哪些情形引发:
如查询执行计划重新编译由哪些引发:
SELECT e.name,v.subclass_name,v.subclass_value,tc.name,tc.[type_name]
FROM sys.trace_events e
JOIN sys.trace_subclass_values v ON e.trace_event_id = v.trace_event_id
JOIN sys.trace_columns tc ON v.trace_column_id = tc.trace_column_id
WHERE e.name = 'sp:recompile' --AND v.subclass_value < 100

6,使用:在图形界面上修改表的属性与通过tsql修改表的属性,如增加表字段长度,通过Profiler观察发现:
通过图形方式:是先转移全部数据到临时表,再删除表,然后重命名临时表为原来表名称,速度比较慢,而通过tsql发现只执行一条sql语句即可,故优先使用tsql