合 MSSQL中的等待事件SQLTRACE_FILE_BUFFER说明
Tags: MSSQLSQL Server等待事件SQLTRACE_FILE_BUFFER
简介
SQL Server 2012新增等待事件,表示在文件跟踪过程中同步跟踪缓冲区期间出现。
SQLTRACE_FILE_BUFFER与SQL Trace或Extended Events相关的文件缓冲区操作有关。当SQL Server尝试将跟踪数据写入磁盘上的跟踪文件时,如果缓冲区管理或I/O操作遇到延迟,就会出现这个等待事件。 这通常意味着跟踪数据的写入速度跟不上生成速度,或者磁盘子系统可能有瓶颈。
这个等待事件通常与性能监控和故障诊断场景相关,特别是当你使用SQL Trace或早期版本的SQL Server中不推荐使用的跟踪机制时。随着SQL Server版本的更新,推荐使用更高效的Extended Events(XE)来替代SQL Trace,因为XE提供了更细粒度的控制和更好的性能影响。
sys.traces
sys.traces 目录视图包含系统上的当前正在运行的跟踪。 此视图旨在替代 fn_trace_getinfo 函数。
列名称 | 数据类型 | 说明 |
---|---|---|
id | int | 跟踪 ID。 |
status | int | 跟踪状态: 0 = 停止 1 = 正在运行 |
path | nvarchar(260) | 跟踪文件的路径。 如果跟踪为行集跟踪,则此值为空值。 |
max_size | bigint | 跟踪文件的最大大小限制,以兆字节 (MB) 表示。 如果跟踪为行集跟踪,则此值为空值。 |
stop_time | datetime | 停止运行跟踪的时间。 |
max_files | int | 滚动更新文件的最大数目。 如果未设置最大数目,则此值是零。 |
is_rowset | bit | 1 = 行集跟踪。 |
is_rollover | bit | 1 = 启用滚动更新选项。 |
is_shutdown | bit | 1 = 启用关闭选项。 |
is_default | bit | 1 = 默认跟踪。 |
buffer_count | int | 跟踪使用的内存缓冲区的数目。 |
buffer_size | int | 每个缓冲区的大小 (KB)。 |
file_position | bigint | 上一个跟踪文件的位置。 如果跟踪为行集跟踪,则此值为空值。 |
reader_spid | int | 行集跟踪读取器会话 ID。 如果跟踪为文件跟踪,则此值为 null。 |
start_time | datetime | 跟踪开始时间。 |
last_event_time | datetime | 上一个事件触发的时间。 |
event_count | bigint | 已发生事件的总数。 |
dropped_event_count | int | 已除去事件的总数。 |
查询当前服务器打开的所有Trace跟踪,并显示每个跟踪设置的过滤条件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | /* created by yzy 20160712 查询当前服务器打开的所有Trace跟踪,并显示每个跟踪设置的过滤条件。 目的为了避免存在没有设置过滤条件的跟踪引发阻塞情况。 select * from sys.traces --停止跟踪 --exec sp_trace_setstatus @TraceID,0 exec sp_trace_setstatus 2,0 --移除跟踪 --exec sp_trace_setstatus @TraceID,2 exec sp_trace_setstatus 2,2 */ -- 查询所有打开的Trace跟踪 select TRC.id AS '跟踪ID',case when TRC.status=1 then '运行中' else '已停止' end AS '跟踪状态' ,TRC.start_time AS '跟踪开始时间',TRC.max_size AS '跟踪文件大小',TRC.max_files AS '跟踪最大文件数' ,dec.session_id AS [对应进程ID] ,des.status as [进程状态] --,substring(dest.text,1,100) as [执行脚本(缩)] ,des.cpu_time as [CPU] ,des.reads as [Reads] ,des.writes as [Writes] ,dec.connect_time AS [连接时间] ,DATEDIFF(minute, dec.connect_time, GETDATE()) AS [连接时间(分)] ,des.login_name as [登录名] ,des.[program_name] as [应用程序] ,des.host_name as [客户端] ,dec.client_net_address as [客户端IP] ,dec.local_net_address as [服务器端IP] ,dec.net_transport as [连接方式] ,dec.protocol_type as [协议类型] into #traceinfo_main from sys.traces TRC(nolock) left JOIN sys.dm_exec_sessions des on TRC.reader_spid=des.session_id left JOIN sys.dm_exec_connections dec ON des.session_id = dec.session_id --CROSS APPLY sys.dm_exec_sql_text(dec.most_recent_sql_handle) dest where TRC.id <> 1 --AND TRC.status =1 --and des.is_user_process = 1 AND des.session_id <> @@spid if @@rowcount =0 begin select '当前服务器没有打开SQL Profiler Trace跟踪!' as '提示' DROP TABLE #traceinfo_main return end select * from #traceinfo_main DROP TABLE #traceinfo_main CREATE TABLE #traceinfo ( [跟踪ID] INT NOT NULL, [过滤字段] VARCHAR(128) NULL, [表达式] VARCHAR(64) NULL, [过滤值] VARCHAR(128) NULL, ) -- 查询所有Trace跟踪使用了哪些过滤条件 declare traceCursor cursor for select id from sys.traces(nolock) where id <> 1 --AND status =1 open traceCursor declare @curid int fetch next from traceCursor into @curid while(@@fetch_status=0) begin INSERT INTO #traceinfo([跟踪ID],[过滤字段],[表达式],[过滤值]) SELECT @curid , TCO.name , case FI.comparison_operator when 0 then '=' when 1 then '<>' when 2 then '>' when 3 then '<' when 4 then '>=' when 5 then '<=' when 6 then 'Like' when 7 then 'Not like' end as '表达式' ,CONVERT(VARCHAR(128),FI.value ) FROM fn_trace_getfilterinfo(@curid) AS FI LEFT JOIN sys.trace_columns AS TCO ON FI.columnid = TCO.trace_column_id where CONVERT(VARCHAR(64),FI.value ) not like 'SQL Server Profiler%' if(@@ROWCOUNT=0) INSERT INTO #traceinfo([跟踪ID],[过滤字段],[表达式],[过滤值]) values(@curid,'无过虑条件,危险!请关闭此跟踪!','',''); fetch next from traceCursor into @curid end close traceCursor deallocate traceCursor SELECT * FROM #traceinfo --where [过滤值] not like 'SQL Server Profiler%' DROP TABLE #traceinfo |