
小批量、频繁的数据写入和更新会产生小文件。如果数据库系统中存在大量的小文件,可能会影响查询性能。为了避免小文件问题导致查询性能下降,我们提供高效的小文件合并机制。
本节主要包括小文件概述、手动合并小文件 、 自动合并小文件 、管理Compact任务
ArgoDB 的 compact 操作的主要目的是为了减少小文件数量,但是暂不支持跨分区 compact 功能。 |
小文件概述
小文件生成
ArgoDB 所有的写操作都会在底层写入一个新的文件,而不是写入已有文件中。
-
insert 操作生成 base 文件。
-
update/delete 操作生成 delta 文件。
小文件的影响
当进行频繁的小数据量的写入操作,会导致出现大量的 base/delta 文件,并且内容很少(KB 级别),小文件过多可能导致如下问题:
-
IO开销大,影响性能
-
shiva tserver 启动慢,内存占用高,甚至崩溃
-
argodb server 内存占用过高
自动合并小文件
用户可以根据业务特点,调整下述参数,平衡小文件数量和合并开销。
holodesk.compact.init.interval
参数说明:指定 Init 线程运行周期中的 Sleep 时间,单位为秒。
默认值:1
取值范围:自定义。
注意事项:在高频的数据 INSERT 场景下,可能出现 Compact 效率跟不上小文件生成的速率,此时可适当调小该值来提升执行频率。
holodesk.compact.worker.interval
参数说明:指定 Worker 线程运行周期中的 Sleep 时间,单位为秒。
默认值:1
取值范围:自定义。
注意事项:在高频的数据 INSERT 场景下,可能出现 Compact 效率跟不上小文件生成的速率,此时可适当调小该值来提升执行频率。
holodesk.compact.table.interval
参数说明:指定系统对同一张表同一分区执行 Compact 的最低间隔,单位为秒。
默认值:5
取值范围:自定义。
注意事项:
-
在 Clean 阶段删除队列中的任务时,只有(当前时间-任务完成时间)大于该值时,会进行删除。
-
在高频的数据 INSERT 场景下,可能出现 Compact 效率跟不上小文件生成的速率,此时可适当调小该值(例如 30)来提升执行频率。
holodesk.compaction.trigger.enabled
参数说明:用于控制是否通过 Compact Service 服务执行 Compact 任务。若设置为 false,则由计算引擎服务执行 Compact 任务。
默认值:true
取值范围: true、false
注意事项:
推荐通过 Compact Service 进行小文件合并任务,小文件合并效果更好,如设置该参数 false,则通过计算引擎服务执行 Compact 任务,可能占用计算资源。
如果 Compact Service 服务服务/异常,那么该参数失效,此时通过计算引擎服务执行 Compact 任务。
holodesk.fullcompaction.filesize.threshold
参数说明:用于控制一个 Base 文件是否属于小文件,大于阈值的 Base 文件不是小文件,不会进行 Full Compact。
Full compaction 通过合并 base 文件来减少小文件数量。
默认值:134217728(128MB),单位为字节
取值范围: 自定义
注意事项:阈值越大,越容易触发 Full Compact,需通过 Manager 对 Compact Service 设置参数。
holodesk.fullcompaction.filenum.threshold
参数说明:用于控制full compact触发阈值,当小文件数量(block)超过阈值时合并:
-
如果是非分区分桶表,那么相同 tablet 上的小文件超过阈值时合并
-
如果是分区表,那么相同分区,相同 tablet 的小文件超过阈值时合并
-
如果是分桶表,那么相同bucket,相同 tablet 的小文件超过阈值时合并
-
如果是分区分桶表,那么相同分区、相同 bucket、相同 tablet 的小文件超过阈值时合并
默认值:3
取值范围:[1,+∞)
注意事项:阈值越小,越容易触发 Full Compact,需通过 Manager 对 Compact Service 设置参数。
holodesk.majorcompaction.delta.filesize.ratio
参数说明:用于控制 Major Compact 触发阈值,当 delta size/ base size 超过阈值时合并。
Major Compact 通过合并 Base 文件以及 Delta 文件来减少小文件数量。
默认值:0.2
取值范围:(0,1)
注意事项:阈值越小,越容易触发 Major Compact,需通过 Manager 对 Compact Service 设置参数。
holodesk.minorcompaction.delta.filenum.threshold
参数说明:用于控制 Minor Compact 触发阈值,当一个 Base 文件的 Delta 文件数量超过阈值时,触发 delta 文件之间的合并。
Minor Compact 通过合并 Base 文件的多个 Delta 文件来减少小文件数量。
默认值:3
取值范围:[1,+∞)
注意事项:阈值越小,越容易触发 Minor Compact,需通过 Manager 对 Compact Service 设置参数。
手动合并小文件
通过 DBA Service 的存储 > 数据库菜单页面,我们可以查看各表当前的小文件数量。在特殊情况下,例如未合理设置自动合并策略或某个表因历史原因小文件数量过多,我们可以通过手动触发命令,立即执行小文件合并任务。
ArgoDB 执行 SQL 任务时,其 Task 数量与数据文件数量(base文件)有关,因此 full compact 能够通过减少数据文件数量来减少 Task 数。 |
接下来,我们介绍如何通过 DBA Service 查看表的小文件数量,找出异常表后并执行手动 Compact 操作。
-
登录 Transwarp Manager 平台。
-
选择仪表盘 > 集群页面,单击 DBAService 进入服务详情界面。
-
选择角色,然后查看 DBA Service Server 角色网址并访问。
-
输入账号和密码,填写验证码后进入 DBAService 首页,然后单击对应的 Qaruk 服务。
-
在左侧导航栏,单击存储 > 数据库,然后在统计标签页筛选表类型(如 Holodesk),并基于小文件数量排序,查看是否存在小文件异常多的表。
图 33. 小文件示例 -
单击相关库名后,下拉查看对应的表名,随后登录 ArgoDB 数据库,在业务低峰期执行下述格式的命令,对指定的表执行合并小文件任务。
ALTER TABLE <table_name> compact "full"|"major"|"minor";
复制-
full:将 base 文件合并成一个 base 文件,并且删除无用的 delta 文件
-
major:将 base 及其 delta 文件合并,生成一个新的 base 文件
-
minor:将 base 的 delta 文件合并,生成一个新的 delta 文件
SQL 使用案例
-- 对 demodb 数据库中的 customer 表执行 FULL COMPACT 操作 ALTER TABLE demodb.customer COMPACT "full";
复制
-
-
操作完毕后,可单击顶部的实时标签,查找对应表名以查看小文件数量变化。
-
检查自动 Compact 相关参数设置,使其覆盖本次出现的表未被自动 Compact 特例情况。
管理 Compact 任务
通过 DBA Service,您可以便捷地监控和管理 Compact 任务,为您的后续操作(例如调整 Compact 频率)提供数据支持。
-
登录 Transwarp Manager 平台。
-
选择仪表盘 > 集群页面,单击 DBAService 进入服务详情界面。
-
选择角色,然后查看 DBA Service Server 角色网址并访问。
-
输入账号和密码,填写验证码后进入 DBAService 首页。
-
单击 Compact Service 卡片。
-
单击左侧导航栏的查询,可查看 Compact 任务的执行情况,例如任务类型、是否成功、耗时等信息。
通过查询语句的前缀可判断任务类型:
-
前缀为 Checking:表示为 Compact 检查操作,系统会定期检查表是否满足小文件触发条件。一旦满足,则会自动创建小文件合并任务。
-
前缀为 isCompact: true:表示 Compact 执行操作,执行小文件合并。
-
-
单击左侧导航栏的存储 > 合并,基于阈值来查看是否存在 Compact 慢的表。
本案例中,我们选择最近 7 天中,Compact 任务执行超过 5 分钟,且表的小文件数量大于 10 的条件进行筛选,列出小文件数量最多的 3 个表,我们可以基于此信息判断是否存在较多 Compact 慢的表,然后调整 Compact 参数,例如频率、资源分配等。