在线重建索引方法及装置的制造方法

文档序号:9616285阅读:190来源:国知局
在线重建索引方法及装置的制造方法
【技术领域】
[0001 ] 本发明涉及数据库领域,尤其涉及一种在线重建索引方法及装置。
【背景技术】
[0002]关系数据库一般采用B树索引,B树索引会需要对数据表的数据反复插入和删除等动作,这样会产生大量索引碎片,顺序扫描时间会加长。数据反复被删除后,索引中的索引条目并不是真正被删除,而只是被标记为删除,并没有被清除,这会使得虽然数据量减小,但是导致索引空间变大的问题。因此需要通过重建索引提升数据访问速度,并释放空间,另外,索引树高度过高时,也需要重建索引。
[0003]目前,索引重建包括有三种方式:离线丢弃(drop)后重新创立(re-create)、离线重建(rebuild)和在线重建,其中,drop后re-create索引方式一般在应用部署阶段使用,离线重建适合上线后,系统可以短时间停下来进行维护,例如在夜间进行维护。而对7*24小时运行系统,一般采用在线重建方式进行,这种方式下,重建索引过程中,不需要中断现有业务,影响较小。
[0004]现有技术中,在在线重建索引过程中,需要获得对数据表的排它锁的控制权,而获得排它锁的控制权需要该数据表上无其它的排它锁或者共享锁,如果该数据表上一直存在其它的排它锁或者共享锁,那么将始终无法获得排它锁的控制权,从而影响在线重建索引的效率和成功率。

【发明内容】

[0005]针对上述问题,本发明的目的在于提供一种提高在线重建索引的效率和成功率的在线重建索引方法及装置。
[0006]第一方面,本发明提供一种在线重建索引装置,包括:
[0007]接收模块,用于接收在线重建索引请求,所述在线重建索引请求包含数据表的标识;
[0008]锁处理模块,用于根据所述在线重建索引请求,对所述数据表的标识对应的数据表加架构共享锁;
[0009]所述锁处理模块,还用于获得円锁,通过所述円锁获得所述数据表的结构控制权;
[0010]入口地址分配模块,用于在所述锁处理模块获得闩锁后,为所述数据表的原始索引预留影子索引存储空间,分配所述影子索引的入口地址,在所述数据表的根页上添加所述影子索引的入口地址;
[0011]所述锁处理模块,还用于所述影子索引创建模块完成在所述数据表的根页上添加所述影子索引的入口地址后,释放所述闩锁;
[0012]影子索引创建模块,用于根据所述原始索引的数据,在所述影子索引存储空间中创建影子索引;
[0013]所述锁处理模块,还用于所述影子索引创建模块完成在所述影子索引存储空间中创建影子索引后,重新获得闩锁;
[0014]入口地址处理模块,用于所述锁处理模块重新获得闩锁后,将所述数据表的根页的索引入口地址更新为影子索引入口地址;
[0015]所述锁处理模块,还用于所述入口地址处理模块在所述数据表的根页的索引入口地址更新为影子索引入口地址后,释放所述重新获得的闩锁和所述架构共享锁。
[0016]在第一方面的第一种可能的实现方式中,还包括:事务处理模块,用于接收对所述数据表的数据的更新请求,根据所述更新请求,对数据表的数据进行更新。
[0017]结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,还包括:更新模块,用于在索引数据需要更新时,确定所述数据表的根页中包含所述影子索引的入口地址,将需要更新的索引数据在所述原始索引和所述影子索引上进行更新。
[0018]结合第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述入口地址处理模块,具体用于将所述数据表的根页上的索引入口地址更改为所述影子索引的入口地址,删除所述原始索引的入口地址。
[0019]结合第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述入口地址处理模块,具体用于将所述影子索引的入口地址修改为有效,删除所述原始索引的入口地址。
[0020]第二方面,本发明提供一种在线重建索引的方法,包括:
[0021]接收在线重建索引请求,所述在线重建索引请求包含数据表的标识;
[0022]根据所述在线重建索引请求,对所述数据表的标识对应的数据表加架构共享锁;
[0023]获得闩锁,通过所述闩锁获得所述数据表的结构控制权;
[0024]在所述获得闩锁后,为所述数据表的原始索引预留影子索引存储空间,分配影子索引的入口地址,在所述数据表的根页上添加所述影子索引的入口地址;
[0025]在完成在所述数据表的根页上添加所述影子索引的入口地址后,释放所述闩锁;
[0026]根据所述原始索引的数据,在所述影子索引存储空间中创建影子索引;
[0027]在完成在所述影子索引存储空间中创建影子索引后,重新获得闩锁;
[0028]在重新获得闩锁后,将所述数据表的根页的索引入口地址更新为影子索引入口地址;
[0029]在所述数据表的根页的索引入口地址更新为影子索引入口地址后,释放所述重新获得的闩锁和所述架构共享锁。
[0030]在第二方面的第一种可能的实现方式中,还包括:接收对所述数据表的数据的更新请求,根据所述更新请求,对数据表的数据进行更新。
[0031]结合第二方面的第一种可能的实现方式,还包括:在所述对数据表的数据进行更新后,当索引数据需要更新时,确定所述数据表的根页中包含所述影子索引的入口地址,将需要更新的索引数据在所述原始索引和所述影子索引上进行更新。
[0032]在第二方面的第二种可能的实现方式中,所述将所述数据表的根页的索引入口地址更新为影子索引入口地址,具体为:将所述数据表的根页上的索引入口地址更改为所述影子索引的入口地址,删除所述原始索引的入口地址。
[0033]在第二方面的第二种可能的实现方式中,所述将所述数据表的根页的索引入口地址更新为影子索引入口地址,具体为:将所述影子索引的入口地址修改为有效,删除所述原始索引的入口地址。
[0034]本发明实施例的方案在启动在线重建索引时,无需加schema排它锁,而改为先加上共享锁,防止重建期间的DDL操作,数据库服务器通过获取到latch,使原始索引TI1瞬间静止无并发,在数据表T的root页上添加影子索引的入口地址后,开始在线重建索引。在重建过程中,如果有事务操作,要以加独立的共享锁,互不干扰。通过本发明实施例的方法,提高了在线重建索引的方法和装置。
【附图说明】
[0035]为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0036]图1是本发明实施例提供的一种在线重建索引的装置的结构示意图;
[0037]图2是本发明实施例提供的另一种在线重建索引的装置的结构示意图;
[0038]图3是本发明实施例提供的另一种在线重建索引的装置的结构示意图;
[0039]图4是本发明实施例提供的一种在线重建索引方法的流程示意图;
[0040]图5是本发明实施例提供的另一种在线重建索引方法的流程示意图;
[0041]图6是本发明实施例提供的另一种在线重建索引方法的流程示意图;
[0042]图7是本发明实施例提供的另一种在线重建索引方法的流程示意图。
【具体实施方式】
[0043]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044]本发明实施例提供了一种在线重建索引方法及装置,用于提高在线重建索引的效率和成功率,以下分别进行详细说明。
[0045]为了便于理解本发明实施例,下面先对本发明实施例的数据库系统进行描述。在一个数据库系统中,包含了数据库客户端、数据库服务器和数据源,数据库客户端用于接收第三方软件或者管理员等发送的各类请求或者命令,并把各类请求或者命令发送给数据库服务器,数据库服务器根据不同的请求或者命令,做相应处理。数据源为数据库中对数据表、视图、储存过程等资源进行管理的一个对象,如Oracle数据库中的一个架构(schema)或MySQL数据库中的一个数据库(database)。数据源可以包含了多张不同的数据表,而每张数据表都有一个根页(root),在根页上包含了该数据表的索引的入口地址,通过该入口地址可以查询到该数据表的索引,通过索引可以查询到该数据表的各个数值。数据源还保存了该数据表的根页,以及原始索引和影子索引,数据
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1