合并的过程可以通过内部表进行查看,通常合并的时间是取决于两次合并之间的数据变化量。两次合并之间的数据变化大,合并的时间会更长。同时,合并的线程数,合并时的集群压力,是否轮转合并等都影响合并的时间长短。

    观察合并的过程可以通过如下语句查询:

    1. obclient> SELECT * FROM __all_zone WHERE name LIKE '%merge%';

    参数

    说明

    is_merge_error

    合并是否出错。

    last_merged_version

    集群所有 Zone 和最后合并版本。

    merge_status

    合并状态 IDLE,ERROR,TIMEOUT,MERGING。

    all_merged_version

    所有 Zone 合并的版本。

    is_merge_timeout

    合并是否超时。

    last_merged_time

    最后合并的时间。

    last_merged_version

    最后合并的版本。

    merge_start_time

    Zone 开始的合并时间。

    如果合并时间比较长,并且两次合并之间的增量很大,可以通过一下语句查看内部表来查看合并进度:

    1. obclient> SELECT * FROM __all_virtual_partition_sstable_image_info;

    字段名称

    类型

    NULL

    描述

    zone

    varchar(256)

    NO

    zone 名称

    svr_ip

    varchar(32)

    NO

    IP 地址

    svr_port

    bigint(20)

    NO

    端口号

    major_version

    bigint(20)

    NO

    大版本号

    min_version

    bigint(20)

    NO

    小版本号

    ss_store_count

    bigint(20)

    NO

    SSStore 总数量

    merged_ss_store_count

    bigint(20)

    NO

    合并完成的 SSStore 总数量

    modified_ss_store_count

    bigint(20)

    NO

    修改过的 SSStore 总数量

    macro_block_count

    bigint(20)

    NO

    宏块总数量

    use_old_macro_block_count

    bigint(20)

    NO

    重用的宏块数量

    merge_start_time

    timestamp(6)

    NO

    合并开始时间

    merge_finish_time

    timestamp(6)

    NO

    合并结束时间

    merge_process

    bigint(20)

    NO

    合并进度

    rewrite_macro_old_micro_block_count

    bigint(20)

    NO

    重用的微块数量

    rewrite_macro_total_micro_block_count

    bigint(20)

    NO

    写入的微块数量

    除了通过内部表查看合并进度,也可以通过日志查看 Partiton 粒度的合并,每个 Partition 开始和成功合并的记录:

    1. egrep "begin to merge partition|succ to merge partition" observer.log

    通过内部表 __all_virtual_partition_sstable_image_info 除了可以查看 progress,也可以查看 Macro Block 级别的进度。Macro Block 为 2 MB 大小,因此比 Partition 级别的粒度更细。在合并中如果遇到单一 Partition 非常大的情况,可以观察这个内部表的 macro_block_countuse_old_macro_block_count 这两列,当他们的值在不断变化,表示合并仍然在进行。