用于MySQL的快速回收回滚空间的方法和装置制造方法及图纸

技术编号:11980823 阅读:94 留言:0更新日期:2015-09-02 11:12
本申请公开了一种用于MySQL的快速回收回滚空间的方法,包括:采用在关闭过程中清除无效回滚数据的方式关闭MySQL数据库;以待回收回滚空间的原始系统表空间文件为基础,生成一个不包含回滚空间的新的系统表空间文件;用所述新的系统表空间文件替换所述原始系统表空间文件。本申请同时提供一种用于MySQL的快速回收回滚空间的装置。采用本申请提供的方法,可以快速回收MySQL的回滚空间,提高整个数据库系统的可用性。

【技术实现步骤摘要】

本申请涉及数据库回滚空间的回收技术,具体涉及一种用于MySQL的快速回收回 滚空间的方法。本申请同时涉及一种用于MySQL的快速回收回滚空间的装置。
技术介绍
MyS化是一个关系型数据库管理系统,支持多种数据库引擎,其主流是支持事务机 制的InnoDB存储引擎,而回滚日志(undolog)则是InnoDB引擎中用于实现事务回滚的日 志,通常存储在InnoDB的系统表空间文件(例如;ibdatal文件)中。化dolog的工作原理 是该样的;在执行事务中的任何数据库操作之前,首先将与该操作相关的数据备份到undo log中,然后执行该数据库操作,如果后续需要撤销该操作或者获取执行该操作之前的数据 信息,系统可W利用undolog中的备份实现上述功能。MySQLInnoDB使用undolog主要实现W下两个方面的用途;一方面,用于保证事 务的原子性,当数据库事务未能正确完成,或者在执行期间由于异常原因需要恢复到事务 开始的状态,该种情况下需要使用undolog进行回滚操作;另一方面,用于进行多版本并 发控制(MVCC),从而实现InnoDB事务间的缺省隔离级别:可重复读(r巧eat油le-read),该 隔离级别要求用户在事务持续期间看到的数据视图与事务开始前一致,当某个事务中的一 个数据库操作发现其要访问的数据的最新版本已经被修改(从本事务启动到当前的该段时 间内,该数据已被其他事务修改),该时就需要结合最新版本的undolog获取该数据未更新 前的值,即本事务本应看到的版本。当数据库事务结束后,InnoDB会判定并标记与该事务相 关的undolog可W被回收且重新利用,之后其他事务再次需要申请新的undolog时,就可 W从该些被标记为已回收且可重新利用的回滚空间(即;系统表空间文件中用于记录undo log的部分)中申请。 虽然已经申请并且分配的回滚空间可W重复利用,但是InnoDB对上述可重复读 隔离级别的支持,可能会导致回滚空间的过度膨胀。如果系统启动了一个执行时间较长的 事务,例如selec巧化om&_namewhereid=x,为了能够维持该个事务始终能够看到开始 执行时的相同视图,那么在该个事务启动后的undolog都不能被InnoDB回收并重新利用, 该就导致当空闲undolog使用完成W后,必须向操作系统申请新的空间,从用户角度看,就 是系统表空间文件变大了。膨胀后的回滚空间虽然可W重复利用,但是却没有机会返回给 操作系统,因此回滚空间只可能越来越大,甚至可能出现接近100G的情况,那么包含该回 滚空间的系统表空间文件就会始终占据磁盘空间,造成磁盘浪费。 针对上述MyS化回滚空间过大的问题,现有技术采用重建用户数据的方式回收回 滚空间,通常采用W下步骤: 1)将待回收回滚空间的数据库的数据全部导出; 2)删除待回收回滚空间的数据库实例;[000引 3)重新创建一个空的数据库实例; 4)将之前全部导出的数据导入新创建的空数据库实例中。 上述现有技术方案虽然可W有效地回收回滚空间,使系统表空间文件的长度缩小 为系统配置文件中设置的初始值,例如200M,但是上述回收回滚空间的过程非常耗时,主要 是步骤1)和步骤4)的数据导出和导入操作,对于数据量大的、达到百G级别的实例来说, 通常需要一个甚至数个小时才能完成数据的导出和导入操作。而在具体的应用中,为了保 证服务的可用性,MyS化数据库系统通常采用主备服务器的架构,那么当其中一台服务器执 行上述耗时的回收回滚空间操作时,另一台作为主库工作的服务器就缺少实时备份实例, 该意味着在此期间若主库出现故障,系统无法提供直接可用的备机,从而直接影响数据库 服务的可用性。
技术实现思路
本申请提供一种用于MyS化的快速回收回滚空间的方法,W解决现有技术回收 MyS化回滚空间耗时长的问题。本申请另外提供一种用于MyS化的快速回收回滚空间的装 置。 本申请提供一种用于MySQL的快速回收回滚空间的方法,包括: 采用在关闭过程中清除无效回滚数据的方式关闭MyS化数据库;W待回收回滚空间的原始系统表空间文件为基础,生成一个不包含回滚空间的新 的系统表空间文件; 用所述新的系统表空间文件替换所述原始系统表空间文件。 可选的,在执行所述用所述新的系统表空间文件替换所述原始系统表空间文件的 步骤后,重新启动所述MyS化数据库。 可选的,所述采用在关闭过程中清除无效回滚数据的方式关闭MyS化数据库的步 骤,包括: 将所述MyS化数据库的关闭选项设置为,MyS化数据库系统预定义的在关闭过程 中包含清除无效回滚数据操作的特定值; 关闭所述MyS化数据库。 可选的,执行所述关闭MyS化数据库的步骤之前,执行下述操作: 减少缓冲池中的未同步到磁盘的已修改数据页的数量,使其小于预先设定的值。 可选的,所述减少缓冲池中的未同步到磁盘的已修改数据页的数量,使其小于预 先设定的值,包括: 设置未同步到磁盘的已修改数据页在缓冲池中所占比例为0 ; 监测缓冲池中的未同步到磁盘的已修改数据页的数量,直至所述数量小于预先设 定的值。可选的,所述W待回收回滚空间的原始系统表空间文件为基础,生成一个不包含 回滚空间的新的系统表空间文件,包括: 创建一个新的系统表空间文件; 按照系统表空间文件的格式,将所述原始系统表空间文件中包含的、且类型不是 回滚页的数据页写入所述新的系统表空间文件中; 更新所述新的系统表空间文件中与回滚空间相关的统计信息的内容为,系统表空 间文件默认的代表当前无回滚空间的值; 判断所述新的系统表空间文件的长度是否小于系统设定的系统表空间文件的初 始长度;若是,调整所述新的系统表空间文件的长度,使其大于或者等于系统设定的系统表 空间文件的初始长度。 可选的,所述按照系统表空间文件的格式,将所述原始系统表空间文件中包含的、 且类型不是回滚页的数据页写入所述新的系统表空间文件中,包括: W系统设定的数据页的长度为单位,依次读取所述原始系统表空间文件中的数据 页; 判断当前所读数据页的类型是否为系统字典页或者二次写缓冲页; 若是,将当前数据页的内容写入所述新的系统表空间文件;并更新该数据页在新 的系统表空间文件中的位置信息、W及该数据页与同类型的前一个数据页之间的相对位置 关系信息。 重复执行上述步骤,直至将所述原始系统表空间文件中的系统字典页和二次写缓 冲页都写入所述新的系统表空间文件为止。 可选的,所述调整所述新的系统表空间文件的长度,使其大于或者等于系统设定 的系统表空间文件的初始长度,包括:W系统设定的数据页的长度为单位,向所述新的系统表空间文件的尾部追加一个 类型为空闲页的数据页; 判断所述新的系统表空间文件的长度是否小于系统设定的系统表空间文件的初 始长度;若是,返回至W系统设定的数据页的长度为单位,向所述新的系统表空间文件的尾 部追加一个类型为空闲页的数据页的步骤。 可选的,所述调整所述新的系统表空间文件的长度,使其大于或者等于系统设定 的系统表空间文件的初始长度,包括:计算所述系统设定的系统表空间文件的初始长度与所述新的系统表空间文件长 度的差值; 获取所述差值与系统设定的数据页长度的比值,W大于或者等于该比值的最小整 数作为需要追加本文档来自技高网
...

【技术保护点】
一种用于MySQL的快速回收回滚空间的方法,其特征在于,包括:采用在关闭过程中清除无效回滚数据的方式关闭MySQL数据库;以待回收回滚空间的原始系统表空间文件为基础,生成一个不包含回滚空间的新的系统表空间文件;用所述新的系统表空间文件替换所述原始系统表空间文件。

【技术特征摘要】

【专利技术属性】
技术研发人员:林晓斌
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1