一种数据库中动态多粒度锁的事务冲突判决方法

文档序号:6587458阅读:205来源:国知局
专利名称:一种数据库中动态多粒度锁的事务冲突判决方法
技术领域
本发明涉及数据库技术领域,尤其涉及到数据库并发控制过程中对事务的冲突程度进行 统计和判决。
背景技术
在基于锁的事务并发控制技术中,数据库经常采用多粒度加锁机制,可以使用库级锁、 表级锁、行级锁等不同粒度的锁。其中,粗粒度的表级锁加锁开销小,但是并发能力差,容 易造成事务锁冲突;细粒度的行级锁并发能力强,但行级锁的数量较多,加行级锁的开销大 。磁盘数据库实现了很多不同的存储引擎,不同的存储引擎支持不同粒度的锁,表级锁的加 锁效率相对较高,行级锁并发能力相对较高,用户可以根据实际应用的并发特点,选择最合 适的存储引擎,从而达到最好的效率。这种锁粒度的选择是在数据库存储引擎的选择做出的 , 一旦选择了一种存储引擎,就不能动态的改变了动态多粒度锁机制正是基于这种思想设计 的。这种静态的使用多粒度锁的机制不能有效解决具有高突发性的事务流模型。

发明内容
本发明所要解决的技术问题是提供一种考虑锁的相容特性和事务操作开销的事务冲突判 决方法。
为解决上述技术问题,本发明根据事务冲突级别,采用锁粒度细化检测算法动态决定在 表上是使用粗粒度的表级锁还是细粒度的行级锁。
按上述方案,所述事务冲突级别由如下公式计算 TC = aXNx+bXNs
其中,TC为事务的冲突级别,Ns为不相容共享锁的数量,Nx是锁等待队列中排他锁的数 量,a、 b为事务冲突权重系数,取值范围。
按上述方案,所述锁粒度细化检测算法是指系统初始化的时候,表上的锁粒度默认初始 化为粗粒度的表级锁,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的 行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁;当系统初始化时表上的锁粒度为表级锁,或者当表上锁粒度刚刚由行级锁转化为表级锁,系统执行粒度细 化检测流程。
按上述方案,所述粒度细化检测流程具体步骤如下
初始化监视阈值C1和锁粒度细化阈值C2, 一般状态下,系统以周期T1周期性的计算每个
表上的冲突级别TC;
比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设置一 个周期为T2的定时器;如果TC小于C1,该表继续进行一般状态下的检测; 每当表上周期T2的定时器消息到达时,重新计算TC;
比较当前TC和C1的大小,如果TC小于C1,该表进入一般状态下的检测,销毁周期T2的定 时器;如果TC大于或者等于C1,进行后面的步骤;
比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2二C2—C0, CO为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2二C2+C0;如果TC和前一 周期内的TC相等,那么C2不变;
比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的表级 锁转化为行级锁,销毁周期为T2的监视定时器,否则继续等待监视状态下的定时器消息到达
按上述方案,所述Ns的统计具体步骤如下 系统初始化时,初始化每个表上的共享锁计数器Ns为O;
当表上一个共享锁加锁请求到达时,检査表锁控制块上是否有加锁请求正在等待;
如果有加锁请求等待,检査等待队列中的最后一个加锁请求是否是共享锁,如果是共享 锁,Ns保持不变,如果不是共享锁,Ns自增l;
如果没有加锁请求等待,检査当前授予锁队列是否还有其它共享锁,如果是,Ns保持不 变,如果不是Ns自增l;
当一个共享锁的解锁请求到达时,检査锁的授予队列上还有没有其他共享锁存在,如果 存在,Ns保持不变,如果不存在,Ns自减l。
按上述方案,所述Nx根据应用,可以分为插入、更新、删除类型互斥锁,可以在表级锁 上设置三个计数器Nins、 Nupd、 Ndel,分别表示插入、更新、删除类型互斥锁的数量,那么Nx =Nins+ Nupd + Ndd,其统计具体步骤如下
系统初始化时,初始化Nins、 NUpd、 Nd^为0;
当有互斥锁加锁请求到来时,如果是插入数据型的互斥锁,则Nins自增l,如果是更新数据型的互斥锁,则Nupd自增l,如果是删除数据型的互斥锁,则Nd^自增l;
当有互斥锁解锁请求到来时,如果是插入数据型的互斥锁,则Nins自减l,如果是更新数 据型的互斥锁,则Nupd自减l,如果是删除数据型的互斥锁,则Ndd自减l。
按上述方案,所述系数b为l,所述系数a是是动态变化的,是与锁等待队列中互斥锁的 事务类型和事务数量相关的。
a= AinsXPins+AUpdXPupd+AdeiXPdei
在以上公式中,Ains、 Aupd、 Add分别是插入、更新、删除类型事务的复杂度参数,Ains 、Aupd、 Ad^取值2 10。 Pins、 Pupd、 Pdel分别是互斥锁中插入、更新、删除类型事务的比例 ,Pins=Nins/(Nins+Nupd+Ndel) , PUpd=Nupd / (Nins+NUpd+Ndel) , Pdel=Ndei /( Nins+Nupd+Ndel)。
优选地,所述锁粒度细化算法是通过单独设置一个后台线程来完成的,该后台线程周期 性的访问锁管理器,计算表上的冲突级别。所述周期T1取值为20秒,Cl取值为lO, C2的初 始化值为40。所述T2取2 5秒,C0取值为2 4。
本发明考虑了锁的相容性和读写事务开销,提出一种事务冲突判决方法,当监视到表上 事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后 ,表上的锁粒度也由行级锁变为表级锁,可以有效解决具有高突发性的事务流模型。


下面结合附图和具体实施方式
对本发明的技术方案作进一步具体说明。
图l为锁粒度细化检测流程。
图2是Ns统计方法。
具体实施例方式
系统初始化的时候,表上的锁粒度默认初始化为粗粒度的表级锁,当监视到表上事务冲 突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上 的锁粒度也由行级锁变为表级锁。当系统初始化时表上的锁粒度为表级锁,或者当表上锁粒 度刚刚由行级锁转化为表级锁,系统执行粒度细化检测流程,如图1所示,锁粒度细化检测 流程的实施步骤如下
1.初始化监视阈值C1和锁粒度细化阈值C2, 一般状态下,系统以周期T1周期性的计算每 个表上的冲突级别TC。
锁粒度细化算法是通过单独设置一个后台线程来完成的,它周期性的访问锁管理器,计算表上的冲突级别,周期T1一般取值为20秒,这是系统一般状态下的检测周期。监视阈值 Cl是一个常数,它与具体数据库事务实现的方式和系统运行硬件环境有关,应根据实际情况 选择最合适的值, 一般地来说,Cl取值为lO。锁粒度细化阈值C2初始化值是一个常数,但是 在系统的运行过程中,它是动态变化的,C2的初始化值也是与具体数据库事务实现的方式和 系统运行硬件环境有关, 一般取值为40。
2. 比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设置 一个周期为T2的定时器;如果TC小于C1,该表继续进行一般状态下的检测。
Cl是监视状态的阈值,监视状态下面,事务的冲突具有一定的级别,可能会在不久的将 来就需要细化锁的粒度,所以设计一个周期更小的定时器来检测冲突情况,T2—般取2 5秒 ,比T1小一些。
3. 每当表上周期T2的定时器消息到达时,重新计算TC。
4. 比较当前TC和C1的大小,如果TC小于C1,该表进入一般状态下的检测,销毁周期T2的 定时器;如果TC大于或者等于C1,进行后面的步骤。
在监视状态下,当事务冲突降低到监视阈值以下时,系统没有必要重点监视该表上的冲 突,重点监视会消耗更多的系统资源,此时该表回到一般监视状态。
5. 比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2二C2—C0, CO为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2二C2+C0;如果TC和前一 周期内的TC相等,那么C2不变。
如果TC是逐渐增加的,说明事务冲突也在逐渐增大,这个时候可以通过降低锁粒度细化 阈值C2的方法,是该表上锁的粒度尽早地细化;如果TC中途减小,说明冲突在中途也在一定 程度地降低,这时通过增加C2的方法,推迟锁粒度的细化继续监视事务冲突情况。CO为细化 阈值变化的步值,是一个常数,这个与C1和C2的取值也有关系, 一般取值为2 4。
6. 比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的表 级锁转化为行级锁,销毁周期为T2的监视定时器。否则继续等待监视状态下的定时器消息到 达。
当细化锁的粒度后,就不需要在监视事务的冲突级别了。粗化锁的粒度的原则是尽可能 早的,当检测到表上的行级锁数量不多,并且转化为表级锁不会带来冲突的时候,就粗化锁 的粒度,这个时候就要重新对该表执行锁粒度细化检测流程了 。
Ns是等待的相容共享锁的数量,在表级锁上设置一个不相容共享锁计数器Ns, Ns的统计 方法如图2所示,具体步骤如下1. 系统初始化时,初始化每个表上的共享锁计数器Ns为O。
2. 当表上一个共享锁加锁请求到达时,检査表锁控制块上是否有加锁请求正在等待。
3. 如果有加锁请求等待,检査等待队列中的最后一个加锁请求是否是共享锁,如果是共 享锁,Ns保持不变,如果不是共享锁,Ns自增l。
4. 如果没有加锁请求等待,检査当前授予锁队列是否还有其它共享锁,如果是,Ns保持 不变,如果不是Ns自增l。
5. 当一个共享锁的解锁请求到达时,检査锁的授予队列上还有没有其他共享锁存在,如 果存在,Ns保持不变,如果不存在,Ns自减l。
最后所应说明的是,以上具体实施方式
仅用以说明本发明的技术方案而非限制,尽管参 照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的 技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本 发明的权利要求范围当中。
权利要求
1.一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,根据事务冲突级别,采用锁粒度细化检测算法动态决定在表上是使用粗粒度的表级锁还是细粒度的行级锁。
2.根据权利要求l所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述事务冲突级别由如下公式计算 TC = aXNx+bXNs其中,TC为事务的冲突级别,Ns为不相容共享锁的数量,Nx是锁等待队列中排他锁的 数量,a、 b为事务冲突权重系数,取值范围。
3.根据权利要求1或2所述的一种数据库中动态多粒度锁的事务冲突 判决方法,其特征在于,所述锁粒度细化检测算法是指系统初始化的时候,表上的锁粒度默 认初始化为粗粒度的表级锁,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细 粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁;当系统 初始化时表上的锁粒度为表级锁,或者当表上锁粒度刚刚由行级锁转化为表级锁,系统执行 粒度细化检测流程。
4.根据权利要求3所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述粒度细化检测流程具体步骤如下a. 初始化监视阈值C1和锁粒度细化阈值C2, 一般状态下,系统以周期T1周期性的计算 每个表上的冲突级别TC;b. 比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设 置一个周期为T2的定时器;如果TC小于C1,该表继续进行一般状态下的检测; c. 每当表上周期T2的定时器消息到达时,重新计算TC;d. 比较当前TC和C1的大小,如果TC小于C1,该表进入一般状态下的检测,销毁周期T2 的定时器;如果TC大于或者等于C1,进行后面的步骤;e. 比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2二C2—C0,CO为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2二C2+C0;如果TC和前 一周期内的TC相等,那么C2不变;f. 比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的 表级锁转化为行级锁,销毁周期为T2的监视定时器,否则继续等待监视状态下的定时器消息 到达。
5.根据权利要求2所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述Ns的统计具体步骤如下a. 系统初始化时,初始化每个表上的共享锁计数器Ns为O;b. 当表上一个共享锁加锁请求到达时,检査表锁控制块上是否有加锁请求正在等待;c. 如果有加锁请求等待,检査等待队列中的最后一个加锁请求是否是共享锁,如果是 共享锁,Ns保持不变,如果不是共享锁,Ns自增l;d. 如果没有加锁请求等待,检査当前授予锁队列是否还有其它共享锁,如果是,Ns保 持不变,如果不是Ns自增l;e. 当一个共享锁的解锁请求到达时,检査锁的授予队列上还有没有其他共享锁存在, 如果存在,Ns保持不变,如果不存在,Ns自减l。
6.根据权利要求2所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述Nx根据应用,可以分为插入、更新、删除类型互斥锁,可以在表级 锁上设置三个计数器Nins、 Nupd、 Ndel,分别表示插入、更新、删除类型互斥锁的数量,那么 Nx=Nins+ Nupd + Ndel,其统计具体步骤如下 系统初始化时,初始化Nins、 Nupd、 Ndel为O;当有互斥锁加锁请求到来时,如果是插入数据型的互斥锁,则Nins自增l,如果是更新 数据型的互斥锁,则Nupd自增l,如果是删除数据型的互斥锁,贝IJNdel自增l;当有互斥锁解锁请求到来时,如果是插入数据型的互斥锁,则Nins自减l,如果是更新 数据型的互斥锁,则Nupd自减l,如果是删除数据型的互斥锁,则Ndel自减l。
7.根据权利要求2所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述系数b为l,所述系数a是是动态变化的,是与锁等待队列中互 斥锁的事务类型和事务数量相关的,在以上公式中,Ains、 Aupd、 Adel分别是插入、更新、删除类型事务的复杂度参数, Ains、 Aupd、 Adel取值2 10, Pins、 Pupd、 Pdel分别是互斥锁中插入、更新、删除类型事务的比例,Pins=Nins/(Nins+Nupd+Ndel) , Pupd=Nupd /(Nins+Nupd+Ndel), Pdel=Ndel /( Nins+Nupd+Ndel)。
8.根据权利要求4所述的一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,所述锁粒度细化算法是通过单独设置一个后台线程来完成的,该后台线程周期性的访问锁管理器,计算表上的冲突级别。
9.根据权利要求8所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述周期T1取值为20秒,所述Cl取值为lO,所述C2的初始化值为40。
10.根据权利要求8所述的一种数据库中动态多粒度锁的事务冲突判决 方法,其特征在于,所述T2取2 5秒,C0取值为2 4。
全文摘要
本发明公开了一种数据库中动态多粒度锁的事务冲突判决方法,根据事务冲突级别,采用锁粒度细化检测算法动态决定在表上是使用粗粒度的表级锁还是细粒度的行级锁,本发明考虑了锁的相容性和读写事务开销,提出一种事务冲突判决方法,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁,可以有效解决具有高突发性的事务流模型。
文档编号G06F17/30GK101667211SQ20091030584
公开日2010年3月10日 申请日期2009年8月20日 优先权日2009年8月20日
发明者卢正新, 非 王, 王芙蓉, 董晓辉, 黄本雄 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1