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 语句的行号。 |
NTUserName | NT用户名 | Windows 用户名。 |
NTDomainName | NT域名 | 用户所属的 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。 |
XactSequence | Xact序列 | 用于说明当前事务的标记。 |
EventSequence | 事件序列 | 给定事件在请求中的顺序。 |
BigintData1 | 长整型数字数据1 | 重新编译此计划的累积次数。 |
BigintData2 | 长整型数字数据2 | 在编译过程中使用的总内存 (KB)。 |
GUID | GUID | |
IntegerData2 | 整数数据2 | 存储过程或批处理中的语句的结尾。 对于存储过程或批处理的结尾,此值为 -1。 |
ObjectID2 | 对象ID 2 | |
Type | 类型 | |
OwnerID | 所有者ID | int 1 = TRANSACTION SHARED_TRANSACTION_WORKSPACE EXCLUSIVE_TRANSACTION_WORKSPACE |
ParentName | 父名字 | |
IsSystem | 是否系统 | 指示事件是发生在系统进程中还是发生在用户进程中。 1 = 系统,0 = 用户。 |
Offset | 偏移量 | 存储过程或批查询中的语句的起始偏移量。 |
SourceDatabaseID | 源数据库ID | |
SqlHandle | Sql处理 | 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 |
----- | ----- | ----- |
----- | ----- | ----- |
----- | ----- | ----- |
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)
--读取次数倒叙
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博客
上一篇:Kotlin中数组和集合的使用
下一篇:运维经典面试题