本文介绍在使用 HTAP 功能时常用的问题排查方法。
说明
在排查常见问题时,需要使用高权限账号进行查询。
对于分流到 AP 的查询,或尝试分流到 AP 的查询,却回退到 TP 的查询原因,可以通过 performance_schema.htap_routing_table
进行查询。
select * from performance_schema.htap_routing_table;
说明
htap_routing_table
中记录了所在节点的执行信息。当存在多个只读节点,则每个只读节点中仅有部分数据。若要查看所有的执行信息,可通过 Hint 语法,分别指定查询语句在对应的只读节点上执行,详情请参见 Hint 语法使用。
HTAP 系统保证 RC 隔离级别下的一致性,因此查询可以下发到 AP 侧的一个必要条件是对应表在 AP 与 TP 的数据是一样新的(即 AP 侧数据的新鲜度),通过如下方式可以查看一张表的数据新鲜度。
SELECT * FROM performance_schema.htap_tables WHERE schema_name = 'db' AND table_name = 'table';
字段说明:
字段 | 级别 | 说明 |
---|---|---|
HTAP_SHIPPING_LSN | 实例级 | 当前实例 AP 系统数据新鲜度已经达到这个点位。 |
BINLOG_COMMITTED_LSN | 实例级 | 当前实例 TP 最新点位。 |
TRX_COMMITTED_LSN | 表级 | 对应表最后一次提交事务的点位。 |
TRX_COMMITTED_TIMESTAMP | 表级 | 对应表最后一次提交事务的时间。 |
当查询涉及的表均满足 HTAP_SHIPPING_LSN
> TRX_COMMITTED_LSN
时,该查询允许下发到 AP。
对于系统已经加载的表,可以通过查看元数据表来查看加载进度(只读):
SELECT * FROM __bytehtap__.htap_loaded_tables WHERE db_name = 'XXX' and table_name = 'XXX';
字段说明:
字段 | 说明 |
---|---|
load_state | 加载的状态,目前有以下几种状态:
|
load_progress | 加载的进度,取值为 [0, 100]。 |
is_unload | 表是否被卸载,取值 0 或 1 。 |
注意
__bytehtap__
库后续版本可能会发生变动,请勿依赖该库做业务逻辑。
显示所有 HTAP 表名:
SELECT db_name, table_name FROM __bytehtap__.htap_loaded_tables WHERE load_state = 'AVAIL' AND is_unload = 0;
SELECT db_name, table_name FROM __bytehtap__.htap_tables_meta WHERE is_committed = true;