空间碎片自动回收是数据库自治服务DAS进行空间自动优化的一种方式,开启该功能后,主实例会自动执行Optimize Table或Alter Table命令来回收表空间碎片,帮助您整理物理空间碎片。
前提条件
- 实例已开启DAS专业版,详情请参见DAS专业版。
- 实例类型为RDS MySQL或MyBase MySQL高可用版,且实例已成功创建14天或以上。
- CPU规格不小于4核。
- 物理表必须是InnoDB引擎。
背景信息
产生表空间碎片的常见原因:
- 记录被Delete,且原空间无法复用。
- 记录被Update(通常出现在变长字段中),原空间无法复用。
- 记录插入导致页分裂,页的填充率降低。
优化前的检查项
为了保证在执行空间碎片自动回收操作时,减少对数据库性能和空间的影响,会进行如下检查:
- 如下检测项如有一项或多项未通过,对应表的空间碎片自动回收操作将结束。
- 剩余可用空间至少是需回收表的物理空间的3倍。说明 例如:需回收的表Table_1,该表的物理空间为30 GB,那么需要有90 GB的剩余可用空间,才可启动自动空间碎片回收。
- 表上无fulltext索引。
- 剩余可用空间至少是需回收表的物理空间的3倍。
- 如下检测项如有一项或者多项未通过,会等待1至5分钟,再次检查,直至运维窗口期结束。
- 目标实例上没有备份任务。
- 没有正在执行的表结构变更操作。
- 查看实例的CPU使用率,预估空间碎片自动回收需花费的时间,确保前一天和上周同一时间段的CPU使用率低于70%,且执行前的CPU使用率低于80%。说明 例如:表的物理空间为90 GB,预计空间碎片回收需花费30分钟,并且计划12月10号凌晨3点执行,那么需确认如下3点:
- 2020-12-9 03:00至03:30的CPU使用率需小于70%。
- 2020-12-3 03:00至03:30的CPU使用率需小于70%。
- 在执行前检测2020-12-9 03:00开始的CPU使用率需小于80%。
- 在执行空间碎片自动回收操作前,会自动检测如下三点:
- 需碎片回收的表上,没有执行时间超过3秒的SQL。
- 无悬挂事务(持有锁但是超过15秒未提交的事务)。
- 活跃会话数小于64。
说明 如果未通过检查,无法使用空间碎片自动回收功能,您可以手动执行Optimize Table命令回收表空间碎片,详情请参见使用“optimize table”命令释放MySQL实例的表空间。
操作步骤
- 登录DAS控制台。
- 在页面左侧导航栏单击实例监控,选择MySQL引擎后单击目标高可用实例,进入实例页面。
- 在实例页面的左侧导航栏单击自治中心,在页面右侧单击自治功能开关。
- 在优化和限流页签勾选空间碎片自动回收。 页签中,打开自治功能开关,并在
- 开启空间碎片自动回收后,设置以下参数,单击确定。重要 当数据库实例空间状态达到设置的阈值时,DAS将在数据库实例的可维护时间段内进行空间碎片自动回收。
参数 说明 表空间 触发空间碎片自动回收单个物理表的最小空间,取值范围:5 GB~100 GB,默认为10 GB。
单表空间过大会导致回收时间长,请根据实际业务情况选择合适的数值。
说明 如果数据库实例上所有的表空间均小于5 GB,或者所有的表空间均大于100 GB,那么系统不会进行空间碎片回收。碎片率 触发空间碎片自动回收单个物理表的碎片率,取值范围:10%~99%,默认为20%。
碎片率过大会降低空间优化频率,请根据实际业务情况选择合适的数值。
说明 如果数据库实例上所有表的碎片率均低于10%,那么系统不会进行空间碎片回收。说明 例如表空间取值为5 GB,碎片率取值为10%时,所有表空间大于等于5 GB,小于等于100 GB,且碎片率大于等于10%的表,都会触发空间碎片自动回收。