转储操作命令

转储操作命令的语法如下所示:

  1. ALTER SYSTEM MINOR FREEZE [zone] | [server_list] | [tenant_list] | [replica]

下表为上述语法中各参数的取值格式:

参数

格式

zone

Zone_name 

server_list

SERVER = ip_port_list
tenant_listTENANT = tenant_name [, tenant_name …]
replicaPARTITION_ID = ‘partition_idx%0@table_id

示例 1

集群级别转储:

  1. ALTER system minor freeze;

示例 2

Server 级别转储:

  1. ALTER system minor freeze server = ('192.168.1001:2882');

示例 3

租户级别转储:

  1. ALTER system minor freeze tenant = ('prod_tenant');

示例 4

Replica 级别转储:

  1. ALTER system minor freeze partition_id = '8%0@1099511627933';

转储控制参数

最常用的控制参数是 minor_freeze_times ,该参数控制在转储多少次后自动转化为合并。如果该参数设置为 0,表示关闭转储功能,每次租户 Memtable 内存使用达到阀值不会触发转储而是直接进行合并。通常根据具体的业务需求来进行配置。

参数名

参数描述

默认值

设定范围

minor_compact_trigger

mini merge sstable 个数阈值,达到触发 minor merge compact

2

0~16

minor_freeze_times

转储多少次后触发合并

0

0~64K

minor_merge_concurrency

并行转储线程数或并行度

0

0~64

minor_deferred_gc_time

sstable gc 的时间

0s

0s~24h

minor_warm_up_duration_time

转储后的 warm up 时间

30s

0s~60m

freeze_trigger_percentage

租户 Memstore 占用内存的比例阈值,达到触发 Freeze

70

0~100

memstore_limit_percentage

租户 Memstore 占租户总内存的百分比

50

0~100

说明

参数 minor_freeze_times 的增长是依赖 Memtable 内存达到设定阀值而触发的转储。而手动运行的转储命令不会进行计数。因此,无论手动转储多少次,都不会记录 minor_freeze_times

比如, minor_freeze_times 的值为 3 时,手动运行 3 次 ALTER system minor freeze 后,当 Memtable 内存使用达到阈值后,并不会触发合并。因为之前的手动转储不做计数。

转储查看

转储的动作可以通过系统表进行查看。通过查看转储的时间点,转储的触发和转储的次数可以观察集群内存的使用情况。同时可以调整租户内存的大小,可以配置转储次数进而满足不同的业务需求场景。

示例 1

下述示例语句展示了通过系统租户如何从 Root Service 角度查看最近 10 次的转储记录。

  1. select * from __all_rootservice_event_history where event like '%minor%' order by gmt_create limit 10;

示例 2

下述示例语句展示了通过系统租户如何查看具体的某台 OBServer 的转储情况。

  1. select * from __all_server_event_history where svr_ip='192.168.100.1' and module in ('freeze', 'minor_merge') order by gmt_create desc limit 10;

示例 3

下述示例语句展示了通过系统租户如何查看转储后租户的 Active MemStore 是否释放,同时查看 freeze_cnt 的计数情况。

  1. select * from __all_virtual_tenant_memstore_info;

上述示例语句中查询的内部表 __all_virtual_tenant_memstore_info 的参数说明如下所示:

参数

说明

tenant_id

租户的 ID

svr_ip

租户所在服务器 IP

svr_port

RPC 端口

active_memstore_used

租户在某台服务器上的活动 MemStore 大小

total_memstore_used

租户在某台服务器上的总 MemStore 使用大小

major_freeze_trigger

活动 MemStore 使用量触发转储或合并的阈值

memstore_limit

租户在某台服务器上的 Memstore 的上限

freeze_cnt

活动 Memstore 达到阈值触发转储的计数器

  • __all_rootservice_event_history 表中保留7天内数据。 __all_server_event_history 表的记录保留2天。
  • 每次合并都需要先进行一次转储,因此在每天的合并 Duty Time 时间点(默认凌晨 2 点)可以看到转储动作。
  • __all_virtual_tenant_memstore_info 表中 major_freeze_trigger 参数对应的是转储和合并的阈值。当参数 minor_freeze_times 值为 0 时, 列 active_memstore_used 达到这个阈值时触发合并。如果参数 minor_freeze_times 不为 0,则当列 active_memstore_used 达到这个阈值时,触发转储还是合并主要取决于上次合并之后发生的转储次数 。
  • __all_virtual_tenant_memstore_info 中的 freeze_cnt 的统计对应的是参数 minor_freeze_times 。当 freeze_cnt 计数达到 minor_freeze_times 这个阈值时,下次租户内存使用率达到阈值将触发合并而不是转储。手动触发的转储不会导致 freeze_cnt 的计数增加。合并会将 freeze_cnt 计数清零。