sql性能优化:MS-SQL跟踪信息查看select * from ::fn_trace_gettable
创始人
2025-06-01 00:43:34
0

MS-SQL跟踪信息查看select * from ::fn_trace_gettable 

前言 

如果缺省跟踪信息打开,它将在SQL Server启动时自动记录SQL Server启动信息。该功能犹如飞机的黑匣子,会记录一个SQL Server实例配置信息的所有改动。查看该信息,可以看出故障时数据库进行了什么样的改动。缺省跟踪信息和ERRORLOG存储在相同的日志文件夹中,其名称如“log_xxx.trc”,此处的xxx是一组序列号。你可以使用Profiler打开这些文件来查看事件记录,也可以使用函数 "fn_trace_gettable"来处理这些文件。

我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案。

简单的举几个应用场景:

在线生产库为何突然宕机?

数百张数据表为何不翼而飞?

刚打好补丁的系统为何屡遭黑手?

新添加的信息表为何频频丢失?

某张表字段的突然更改,究竟为何人所为?

这些个匿名的访问背后,究竟是人是鬼?

突然增加的增量数据,究竟是对是错?

数百兆的日志爆炸式的增长背后又隐藏着什么?

这一且的背后,是应用程序的BUG还是用户品质的缺失?

我相信如用过SQL Server数据库的人,都会或多或少的利用过SQL Profiler工具。这个玩意就是利用SQL Trace形成的一个图形化操作工具。


一、关键语句

 注意:在打开数据库IDE后,跟踪文件(.trc)不能再移动位置,否则会提示:
文件“D:\XXXXX.trc”不存在,或打开该文件时出错。错误 =“3(系统找不到指定的路径。)”。

select * from ::fn_trace_gettable('D:\5sql\SQLTrace1.trc',default)  

二、列表名译文

官方文档:SQLTransaction 事件类 - SQL Server | Microsoft Learn

列表译文
列名译文说明
TextData

文本数据(sql语句)

依赖于跟踪中捕获的事件类的文本值。
BinaryData

二进制数据

依赖于跟踪中捕获的事件类的二进制值。
DatabaseID数据库ID由 USE database 语句指定的数据库的 ID。如果没有针对给定连接发出 USE database 语句,则为默认数据库的 ID。 SQL Server Profiler 如果在跟踪中捕获 ServerName 数据列而且服务器可用,则将显示数据库名。 可使用 DB_ID 函数来确定数据库的值。
TransactionID事务ID系统分配的事务 ID。
LineNumber行号Transact-SQL 语句的行号。
NTUserNameNT用户名Windows 用户名。
NTDomainNameNT域名用户所属的 Windows 域。
HostName主机名正在运行客户端的计算机的名称。 如果客户端提供了主机名,则填充此数据列。 若要确定主机名,请使用 HOST_NAME 函数。
ClientProcessID客户端进程ID主机为运行该客户端应用程序的进程分配的 ID。 如果客户端提供了客户端进程 ID,则填充此数据列。
ApplicationName应用程序名称客户端应用程序的名称,该客户端应用程序创建了指向 SQL Server实例的连接。 此列由应用程序传递的值填充,而不是由所显示的程序名填充。
LoginName登录名用户的登录名( SQL Server 安全登录名或 Microsoft Windows 登录凭据,格式为“DOMAIN\username”)。
SPID(50以内的spid为系统使用)发生该事件的会话的 ID。
Duration持续时间事件占用的时间(微秒)。
StartTime开始时间该事件(如果存在)的启动时间。
EndTime结束时间事件结束的时间。
Reads读取-次数逻辑读取数。
Writes写-次数逻辑写入数。
CPU事件所用的 CPU 时间(毫秒)。
Permissions权限
Severity严重程度上次尝试中出现的错误的严重级别(仅限EventSubClass 1)。
EventSubClass事件子类事件子类的类型。
0 = 开始
1 = 提交
2 = 回滚
3 = 保存点
ObjectID对象ID系统分配的对象 ID。
Success成功1 = 成功。 0 = 失败。 例如,值为 1 时表示权限检查成功;值为 0 时表示权限检查失败。
IndexID索引编号受事件影响的对象的索引的 ID。 若要确定对象的索引的 ID,请使用 sysindexes 系统表的 indid 列。
IntegerData整数数据0 = 系统事务。
1 = 用户事务。
ServerName服务器名称所跟踪的 SQL Server 实例的名称。
EventClass事件类型事件类型 = 50。
ObjectType对象类型ObjectType 跟踪事件列 - SQL Server | Microsoft Learn
NestLevel嵌套等级存储过程的嵌套级别(如果曾在存储过程中运行过语句)。
State状态最后一个错误的状态。
Error错误如果用户定义的分类器函数无法执行,则为最后一个错误号。
Mode模式
Handle处理
ObjectName对象名称引用的对象名。
DatabaseName数据库名称正在其中运行用户语句的数据库的名称。
FileName文件名
OwnerName所有者的名字对象所有者的数据库用户名。
RoleName角色名称成员身份正在修改的固定服务器角色的名称。
TargetUserName目标用户名
DBUserName数据库管理员名称添加或删除登录名的数据库用户名。
LoginSid登录Sid登录用户的安全标识号 (SID)。 您可以在 sys.server_principals 目录视图中找到此信息。 服务器中的每个登录名都具有唯一的 SID。
TargetLoginName目标登录名称如果是针对登录的操作(例如,添加新的登录),则为所针对登录的名称。
TargetLoginSid目标登录Sid如果是针对登录的操作(例如,添加新的登录),则为所针对登录的安全标识号 (SID)。
ColumnPermissions列的权限
LinkedServerName链接服务器名称
ProviderName供应商的名字
MethodName方法名称
RowCounts行数
RequestID请求ID包含该语句的请求的 ID。
XactSequenceXact序列用于说明当前事务的标记。
EventSequence事件序列给定事件在请求中的顺序。
BigintData1长整型数字数据1重新编译此计划的累积次数。
BigintData2长整型数字数据2在编译过程中使用的总内存 (KB)。
GUIDGUID
IntegerData2整数数据2存储过程或批处理中的语句的结尾。
对于存储过程或批处理的结尾,此值为 -1。
ObjectID2对象ID 2
Type类型
OwnerID所有者ID

int    1 = TRANSACTION
2 = CURSOR
3 = SESSION
4 =

SHARED_TRANSACTION_WORKSPACE
5 =

EXCLUSIVE_TRANSACTION_WORKSPACE

ParentName父名字
IsSystem是否系统指示事件是发生在系统进程中还是发生在用户进程中。 1 = 系统,0 = 用户。
Offset偏移量存储过程或批查询中的语句的起始偏移量。
SourceDatabaseID源数据库ID
SqlHandleSql处理SQL 句柄,可使用该句柄通过 dm_exec_sql_text 动态管理视图来获取存储过程或批查询 SQL 文本。
SessionLoginName会话登录名发起会话的用户的登录名。 例如,如果您使用 Login1 连接到 SQL Server ,再以 Login2 的身份执行语句,则 SessionLoginName 将显示 Login1,而 LoginName 将显示 Login2。 此列将同时显示 SQL Server 登录名和 Windows 登录名。
PlanHandle计划处理存储过程的编译计划的计划句柄。 可使用该句柄通过 sys.dm_exec_query_plan 动态管理视图来获取 XML 计划。
GroupID组ID在其中激发 SQL 跟踪事件的工作负荷组的 ID
---------------
---------------
-----

-----

-----


三、示例译文SQL语句

3.1常规

select 
TextData as '文本数据(sql语句)',
Reads as '读取-次数',
Writes as '写-次数',
Duration as '持续时间',
RowCounts as '行数',
DatabaseName as '数据库名称',
HostName as '主机名',
LoginName as '登录名',
SPID,
StartTime,
EndTime,
CPU,
ServerName as '服务器名称',
EventClass as '事件类型',
EventSequence as '事件序列'  
from ::fn_trace_gettable('D:\5sql\SQLTrace1.trc',default)

3.2、读取次数倒叙

--读取次数倒叙
select 
TextData as '文本数据(sql语句)',
Reads as '读取-次数',
Writes as '写-次数',
Duration as '持续时间',
RowCounts as '行数',
DatabaseName as '数据库名称',
HostName as '主机名',
LoginName as '登录名',
SPID,
StartTime,
EndTime,
CPU,
ServerName as '服务器名称',
EventClass as '事件类型',
EventSequence as '事件序列'  
from ::fn_trace_gettable('D:\5sql\SQLTrace1.trc',default)
order by Reads desc

四、参考文章

SQL Server中关于跟踪(Trace)那点事

SQL Server中关于跟踪(Trace)那点事 - 文章详情

9大步骤解决SQL Server故障 

9大步骤解决SQL Server故障_武哥博文的博客-CSDN博客

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...