长事务日志

本文介绍PolarDB-X的长事务日志监控功能。

PolarDB-X中慢日志记录了执行时间超过某个阈值的SQL语句,而长事务日志则记录了执行时间超过某个阈值(默认为5秒)的事务。长事务的存在会导致连接、锁资源被长期占用,影响数据库的并发处理能力,因此PolarDB-X提供了长事务日志监控的能力。

前提条件

  • 计算节点版本需要不低于5.4.17-16859297。关于如何查看实例版本,请参见查看和升级实例版本

  • 仅企业版的实例支持本功能。

查看长事务日志

  1. 登录PolarDB分布式版控制台

  2. 在页面左上角选择目标实例所在地域。

  3. 实例列表页,单击PolarDB-X 2.0页签。

  4. 找到目标实例,单击实例ID。

  5. 在左侧导航栏中,单击诊断与优化 > 长事务日志

    名称

    描述

    长事务日志趋势

    展示长事务日志数量和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洞察。