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

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

    1. 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. select * from __all_virtual_partition_sstable_image_info;
    字段名称类型NULL描述
    zonevarchar(256)NOzone名称
    svr_ipvarchar(32)NOIP地址
    svr_portbigint(20)NO端口号
    major_versionbigint(20)NO大版本号
    min_versionbigint(20)NO小版本号
    ss_store_countbigint(20)NOSSStore 总数量
    merged_ss_store_countbigint(20)NO合并完成的 SSStore 总数量
    modified_ss_store_countbigint(20)NO修改过的 SSStore 总数量
    macro_block_countbigint(20)NO宏块总数量
    use_old_macro_block_countbigint(20)NO重用的宏块数量
    merge_start_timetimestamp(6)NO合并开始时间
    merge_finish_timetimestamp(6)NO合并结束时间
    merge_processbigint(20)NO合并进度
    rewrite_macro_old_micro_block_countbigint(20)NO重用的微块数量
    rewrite_macro_total_micro_block_countbigint(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 这两列,当他们的值在不断变化,表示合并仍然在进行。