本文介绍PolarDB-X的长事务日志监控功能。
PolarDB-X中慢日志记录了执行时间超过某个阈值的SQL语句,而长事务日志则记录了执行时间超过某个阈值(默认为5秒)的事务。长事务的存在会导致连接、锁资源被长期占用,影响数据库的并发处理能力,因此PolarDB-X提供了长事务日志监控的能力。
前提条件
计算节点版本需要不低于5.4.17-16859297。关于如何查看实例版本,请参见查看和升级实例版本。
仅企业版的实例支持本功能。
查看长事务日志
在页面左上角选择目标实例所在地域。
在实例列表页,单击PolarDB-X 2.0页签。
找到目标实例,单击实例ID。
在左侧导航栏中,单击诊断与优化 > 长事务日志。
名称
描述
长事务日志趋势
展示长事务日志数量和CPU使用率一起随时间的变化趋势,判断两者的关联关系。
节点列表
展示指定时间范围内,各个计算节点上产生的长事务日志的数量。单击某个节点后,可以跳转到针对该节点的长事务日志页面。
长事务日志明细
各个长事务日志的明细数据。
长事务日志统计
长事务日志的统计数据。
长事务日志统计
根据事务模板对给定时间范围内的长事务日志做统计。
事务模板
每个事务由一个SQL序列组成,每条SQL有其SQL模板,可以由SQL序列得到一个SQL模板序列。SQL序列因为查询参数等变量,两个序列不一定相同,而业务中往往存在代表某一类业务操作的SQL模板序列,在此我们称之为事务模板。
示例
以一个转账事务的例子进行说明。
事务1:Mike向John转账1元。
begin;
update account set balance = balance + 1 where name = 'Mike';
update account set balance = balance - 1 where name = 'John';
commit;
事务2:Mike向John转账10元。
begin;
update account set balance = balance + 10 where name = 'Mike';
update account set balance = balance - 10 where name = 'John';
commit;
事务1和事务2的事务模板为:某人向某人转账某元。
update account set balance = balance + ? where name = ?;
update account set balance = balance - ? where name = ?;
如果给定时间范围内,发生类似这样的转账N次,则这个长事务模板的统计次数为N。
字段说明
名称 | 说明 |
事务模板ID | 事务模板的HASH值。 |
库名 | 数据库名称。 |
执行次数 | 总计执行次数。 |
平均执行时间 | 平均执行时间=执行时间总和/执行次数,单位:秒。 |
最大执行时间 | 最大执行时间=max(每个事务的执行时间),单位:秒。 |
平均空闲时间 | 平均空闲时间=总空闲时间/执行次数,单位:秒。 |
平均写行数 | 平均写行数=总写行数/执行次数。 |
最大写行数 | 最大写行数=max(每个事务的写行数)。 |
平均读行数 | 平均读行数=从CN上读取行数总和/执行次数。 |
最大返回行 | 最大返回行数=max(每个事务的返回行)。 |
SQL数量 | 事务中包含的SQL数量,不包含begin、commit、rollback语句。 |
操作 | 可以查看长事务日志的样本。 |
长事务日志明细
长事务日志明细查看针对单个节点查询,需要在下拉框里选择节点。
字段说明
名称 | 说明 |
执行完成时间 | 事务的结束时间。 |
事务ID | 事务的编号。 |
状态 | 事务结束时的状态。 |
客户端 | 客户端的地址,格式为{ip}:{port}。 |
库名 | 数据库名称。 |
用户 | 数据库用户名称。 |
执行耗时(秒) | 执行耗费的时间,单位:秒。 |
空闲时间 | 事务空闲的时间,单位:秒。 |
写行数 | 写入的行数。 |
读行数 | 从DN读取的行数。 |
SQL数量 | 发送给DN的SQL数量。 |
操作 | 查看SQL,跳转到SQL洞察页面查看该事务下的SQL列表。 说明 需要该实例已经预先打开SQL洞察。 |