欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/
租户内存(memstore)写满多数情况下是由突发的批量导入操作导致的,应急的操作主要以开启写入限速以及调整转储阈值等手段。
应急处理流程
租户内存写满一般表现为写入失败,报错No memory or reach tenant memory limit 或者 Over tenant memory limits。应急策略的优先级选择一般从高到低分别为:
增加租户内存配置。建议直接在 OCP 执行租户内存扩容操作,详见 OCP 使用指南。命令行修改详见如下步骤:
执行以下 SQL 语句,确认当前租户使用的
unit_config。注意
多个副本可能使用了不同的
resource_pool,您需要分别做出调整。SELECT a.tenant_name,a.tenant_id,b.name unit_config,c.name pool_name,b.max_cpu,b.min_cpu FROM OCEANBASE.DBA_OB_TENANTS a, OCEANBASE.DBA_OB_UNIT_CONFIGS b, OCEANBASE.DBA_OB_RESOURCE_POOLS c WHERE a.tenant_id=c.tenant_id AND b.unit_config_id = c.unit_config_id ORDER BY a.tenant_id desc;执行生成的 SQL 语句。
注意
截止 OceanBase V3.2 版本,修改
resource unit配置仅 CPU、Memory 配置是实际生效的,其他 IO 参数例如磁盘、iops 等都暂时无效,默认即可。ALTER resource unit unit_config_name min_cpu = 2,max_cpu = 2,MEMORY_SIZE = '2G',max_iops = 10000,min_iops = 10000;
调高转储线程数,加快转储,让内存尽快释放。
转储前数据会大量占据内存,快速转储结束能释放被占用的内存,
minor_merge_concurrency是控制并行转储线程数,您可以通过调高该参数值来达到快速释放内存的目的。该参数默认值为0,表示只有一个线程数,修改该参数无需重启 OBServer 即刻生效。注意
该参数调大的代价为 CPU 使用率升高,请根据具体情况决定是否开启。
具体方法如下:使用
root用户登录到数据库的sys租户。ALTER SYSTEM SET minor_merge_concurrency=x;修改成功后,可以通过
SHOW PARAMETERS语句查看是否修改成功。SHOW PARAMETERS LIKE 'minor_merge_concurrency';您还可以在 OCP 界面通过修改转储策略调高转储线程数,具体参见修改转储配置。
当集群已经无法扩容租户总内存时,可调高租户 memstore 的比例,临时扩大可写入内存,并且调低转储阈值,让转储更快发生。
OceanBase中一个租户的 MemTable 内存的使用量达到配置项 freeze_trigger_percentage 所限制使用的百分比时,就会自动触发转储,转储后会释放占用的内存。该参数默认值为 70 ,表示当 memstore 使用率超过70%,就会触发转储。
另一个相关的参数是
memstore_limit_percentage,也就是租户内存中可用于 memstore 写入的比例,默认为 50%,意为租户使用 memstore 的内存占其总可用内存50%。例如一个内存配置为 10GB 的租户,memstore 可写入部分为 5G。该参数的取值范围为[1, 99],修改该参数无需重启 OBServer 即刻生效。在应急场景下,可以调大
memstore_limit_percentage的同时,调低freeze_trigger_percentage,达到临时扩容和尽快转储释放的目的。具体方法如下:使用
root用户登录到数据库的sys租户。ALTER SYSTEM SET freeze_trigger_percentage=40; ALTER SYSTEM SET memstore_limit_percentage=70;开启写入限速,内存写入达到一定阈值 OB 会主动限制客户端导入速度。
writing_throttling_trigger_percentage是租户级参数,该参数是调整写入速度的阈值,当 memstore 已使用的内存达到该阈值时,触发写入限速。该参数的默认值是 100,表示关闭写入限速机制。该参数的取值范围为[0, 100],修改该参数无需重启 OBServer 即刻生效。另一个参数writing_throttling_maximum_duration表示触发限速后,剩余内存最多支持多长时间的写入时间,默认为1小时,该项一般不做修改。ALTER SYSTEM SET writing_throttling_trigger_percentage = 80; ALTER SYSTEM SET writing_throttling_maximum_duration = '1h';应用侧降级批处理任务。
当用户内存写满时,您可以考虑在应用侧降级对应租户的批处理任务。
欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/




