CN101667211B - 一种数据库中动态多粒度锁的事务冲突判决方法 - Google Patents
一种数据库中动态多粒度锁的事务冲突判决方法 Download PDFInfo
- Publication number
- CN101667211B CN101667211B CN2009103058450A CN200910305845A CN101667211B CN 101667211 B CN101667211 B CN 101667211B CN 2009103058450 A CN2009103058450 A CN 2009103058450A CN 200910305845 A CN200910305845 A CN 200910305845A CN 101667211 B CN101667211 B CN 101667211B
- Authority
- CN
- China
- Prior art keywords
- lock
- granularity
- upd
- del
- ins
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库中动态多粒度锁的事务冲突判决方法,根据事务冲突级别,采用锁粒度细化检测算法动态决定在表上是使用粗粒度的表级锁还是细粒度的行级锁,本发明考虑了锁的相容性和读写事务开销,提出一种事务冲突判决方法,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁,可以有效解决具有高突发性的事务流模型。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及到数据库并发控制过程中对事务的冲突程度进行统计和判决。
背景技术
在基于锁的事务并发控制技术中,数据库经常采用多粒度加锁机制,可以使用库级锁、表级锁、行级锁等不同粒度的锁。其中,粗粒度的表级锁加锁开销小,但是并发能力差,容易造成事务锁冲突;细粒度的行级锁并发能力强,但行级锁的数量较多,加行级锁的开销大。磁盘数据库实现了很多不同的存储引擎,不同的存储引擎支持不同粒度的锁,表级锁的加锁效率相对较高,行级锁并发能力相对较高,用户可以根据实际应用的并发特点,选择最合适的存储引擎,从而达到最好的效率。这种锁粒度的选择是在数据库存储引擎的选择做出的,一旦选择了一种存储引擎,就不能动态的改变了动态多粒度锁机制正是基于这种思想设计的。这种静态的使用多粒度锁的机制不能有效解决具有高突发性的事务流模型。
发明内容
本发明所要解决的技术问题是提供一种考虑锁的相容特性和事务操作开销的事务冲突判决方法。
为解决上述技术问题,本发明根据事务冲突级别,采用锁粒度细化检测算法动态决定在表上是使用粗粒度的表级锁还是细粒度的行级锁;所述事务冲突级别由如下公式计算:TC=a×Nx+b×Ns,其中,TC为事务的冲突级别,Ns为不相容共享锁的数量,Nx是锁等待队列中排他锁的数量,a、b为事务冲突权重系数;
所述Ns的统计具体步骤如下:
a.系统初始化时,初始化每个表上的共享锁计数器Ns为0;
b.当表上一个共享锁加锁请求到达时,检查表锁控制块上是否有加锁请求正在等待;
c.如果有加锁请求等待,检查等待队列中的最后一个加锁请求是否是共享锁,如果是共享锁,Ns保持不变,如果不是共享锁,Ns自增1;
d.如果没有加锁请求等待,检查当前授予锁队列是否还有其它共享锁,如果是,Ns保持不变,如果不是Ns自增1;
e.当一个共享锁的解锁请求到达时,检查锁的授予队列上还有没有其他共享锁存在,如果存在,Ns保持不变,如果不存在,Ns自减1;
所述Nx根据应用,可以分为插入、更新、删除类型互斥锁,可以在表级锁上设置三个计数器Nins、Nupd、Ndel,分别表示插入、更新、删除类型互斥锁的数量,那么Nx=Nins+Nupd+Ndel,其统计具体步骤如下:系统初始化时,初始化Nins、Nupd、Ndel为0;当有互斥锁加锁请求到来时,如果是插入数据型的互斥锁,则Nins自增1,如果是更新数据型的互斥锁,则Nupd自增1,如果是删除数据型的互斥锁,则Ndel自增1;当有互斥锁解锁请求到来时,如果是插入数据型的互斥锁,则Nins自减1,如果是更新数据型的互斥锁,则Nupd自减1,如果是删除数据型的互斥锁,则Ndel自减1;
所述系数b为1,所述系数a是是动态变化的,是与锁等待队列中互斥锁的事务类型和事务数量相关的;a=Ains×Pins+Aupd×Pupd+Adel×Pdel;在以上公式中,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);
所述锁粒度细化检测算法是指系统初始化的时候,表上的锁粒度默认初始化为粗粒度的表级锁,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁;当系统初始化时表上的锁粒度为表级锁,或者当表上锁粒度刚刚由行级锁转化为表级锁,系统执行粒度细化检测流程;所述粒度细化检测流程具体步骤如下:
a.初始化监视阈值C1和锁粒度细化阈值C2,一般状态下,系统以周期T1周期性的计算每个表上的冲突级别TC;
b.比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设置一个周期为T2的定时器,执行步骤c;如果TC小于C1,该表返回步骤a,继续进行一般状态下的检测;
c.每当表上周期T2的定时器消息到达时,重新计算TC;
d.比较当前TC和C1的大小,如果TC小于C1,销毁周期T2的定时器,该表返回步骤a进入一般状态下的检测;如果TC大于或者等于C1,进行后面的步骤;
e.比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2=C2-C0,C0为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2=C2+C0;如果TC和前一周期内的TC相等,那么C2不变;
f.比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的表级锁转化为行级锁,销毁周期为T2的监视定时器,否则继续等待监视状态下的定时器消息到达。
优选的,所述锁粒度细化算法是通过单独设置一个后台线程来完成的,该后台线程周期性的访问锁管理器,计算表上的冲突级别。
更为优选的,所述周期T1取值为20秒,所述C1取值为10,所述C2的初始化值为40。
更为优选的,所述T2取2~5秒,C0取值为2~4。
本发明考虑了锁的相容性和读写事务开销,提出一种事务冲突判决方法,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁,可以有效解决具有高突发性的事务流模型。
附图说明
下面结合附图和具体实施方式对本发明的技术方案作进一步具体说明。
图1为锁粒度细化检测流程。
图2是Ns统计方法。
具体实施方式
系统初始化的时候,表上的锁粒度默认初始化为粗粒度的表级锁,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁。当系统初始化时表上的锁粒度为表级锁,或者当表上锁粒度刚刚由行级锁转化为表级锁,系统执行粒度细化检测流程,如图1所示,锁粒度细化检测流程的实施步骤如下:
1.初始化监视阈值C1和锁粒度细化阈值C2,一般状态下,系统以周期T1周期性的计算每个表上的冲突级别TC。
锁粒度细化算法是通过单独设置一个后台线程来完成的,它周期性的访问锁管理器,计算表上的冲突级别,周期T1一般取值为20秒,这是系统一般状态下的检测周期。监视阈值C1是一个常数,它与具体数据库事务实现的方式和系统运行硬件环境有关,应根据实际情况选择最合适的值,一般地来说,C1取值为10。锁粒度细化阈值C2初始化值是一个常数,但是在系统的运行过程中,它是动态变化的,C2的初始化值也是与具体数据库事务实现的方式和系统运行硬件环境有关,一般取值为40。
2.比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设置一个周期为T2的定时器;如果TC小于C1,该表继续进行一般状态下的检测。
C1是监视状态的阈值,监视状态下面,事务的冲突具有一定的级别,可能会在不久的将来就需要细化锁的粒度,所以设计一个周期更小的定时器来检测冲突情况,T2一般取2~5秒,比T1小一些。
3.每当表上周期T2的定时器消息到达时,重新计算TC。
4.比较当前TC和C1的大小,如果TC小于C1,销毁周期T2的定时器,该表进入一般状态下的检测;如果TC大于或者等于C1,进行后面的步骤。
在监视状态下,当事务冲突降低到监视阈值以下时,系统没有必要重点监视该表上的冲突,重点监视会消耗更多的系统资源,此时该表回到一般监视状态。
5.比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2=C2-C0,C0为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2=C2+C0;如果TC和前一周期内的TC相等,那么C2不变。
如果TC是逐渐增加的,说明事务冲突也在逐渐增大,这个时候可以通过降低锁粒度细化阈值C2的方法,是该表上锁的粒度尽早地细化;如果TC中途减小,说明冲突在中途也在一定程度地降低,这时通过增加C2的方法,推迟锁粒度的细化继续监视事务冲突情况。C0为细化阈值变化的步值,是一个常数,这个与C1和C2的取值也有关系,一般取值为2~4。
6.比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的表级锁转化为行级锁,销毁周期为T2的监视定时器。否则继续等待监视状态下的定时器消息到达。
当细化锁的粒度后,就不需要在监视事务的冲突级别了。粗化锁的粒度的原则是尽可能早的,当检测到表上的行级锁数量不多,并且转化为表级锁不会带来冲突的时候,就粗化锁的粒度,这个时候就要重新对该表执行锁粒度细化检测流程了。
Ns是等待的相容共享锁的数量,在表级锁上设置一个不相容共享锁计数器Ns,Ns的统计方法如图2所示,具体步骤如下:
1.系统初始化时,初始化每个表上的共享锁计数器Ns为0。
2.当表上一个共享锁加锁请求到达时,检查表锁控制块上是否有加锁请求正在等待。
3.如果有加锁请求等待,检查等待队列中的最后一个加锁请求是否是共享锁,如果是共享锁,Ns保持不变,如果不是共享锁,Ns自增1。
4.如果没有加锁请求等待,检查当前授予锁队列是否还有其它共享锁,如果是,Ns保持不变,如果不是Ns自增1。
5.当一个共享锁的解锁请求到达时,检查锁的授予队列上还有没有其他共享锁存在,如果存在,Ns保持不变,如果不存在,Ns自减1。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (4)
1.一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,根据事务冲突级别,采用锁粒度细化检测算法动态决定在表上是使用粗粒度的表级锁还是细粒度的行级锁;所述事务冲突级别由如下公式计算:TC=a×Nx+b×Ns,其中,TC为事务的冲突级别,Ns为不相容共享锁的数量,Nx是锁等待队列中排他锁的数量,a、b为事务冲突权重系数;
所述Ns的统计具体步骤如下:
a.系统初始化时,初始化每个表上的共享锁计数器Ns为0;
b.当表上一个共享锁加锁请求到达时,检查表锁控制块上是否有加锁请求正在等待;
c.如果有加锁请求等待,检查等待队列中的最后一个加锁请求是否是共享锁,如果是共享锁,Ns保持不变,如果不是共享锁,Ns自增1;
d.如果没有加锁请求等待,检查当前授予锁队列是否还有其它共享锁,如果是,Ns保持不变,如果不是Ns自增1;
e.当一个共享锁的解锁请求到达时,检查锁的授予队列上还有没有其他共享锁存在,如果存在,Ns保持不变,如果不存在,Ns自减1;
所述Nx根据应用,可以分为插入、更新、删除类型互斥锁,可以在表级锁上设置三个计数器Nins、Nupd、Ndel,分别表示插入、更新、删除类型互斥锁的数量,那么Nx=Nins+ Nupd + Ndel,其统计具体步骤如下:系统初始化时,初始化Nins、Nupd、Ndel为0;当有互斥锁加锁请求到来时,如果是插入数据型的互斥锁,则Nins自增1,如果是更新数据型的互斥锁,则Nupd自增1,如果是删除数据型的互斥锁,则Ndel自增1;当有互斥锁解锁请求到来时,如果是插入数据型的互斥锁,则Nins自减1,如果是更新数据型的互斥锁,则Nupd自减1,如果是删除数据型的互斥锁,则Ndel自减1;
所述系数b为1,所述系数a是动态变化的,是与锁等待队列中互斥锁的事务类型和事务数量相关的;a= Ains×Pins+Aupd×Pupd+Adel×Pdel;在以上公式中,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);
所述锁粒度细化检测算法是指系统初始化的时候,表上的锁粒度默认初始化为粗粒度的表级锁,当监视到表上事务冲突到达一定级别后,将锁的粒度转化为细粒度的行级锁,当事务冲突降到一定级别后,表上的锁粒度也由行级锁变为表级锁;当系统初始化时表上的锁粒度为表级锁,或者当表上锁粒度刚刚由行级锁转化为表级锁,系统执行粒度细化检测流程;所述粒度细化检测流程具体步骤如下:
a.初始化监视阈值C1和锁粒度细化阈值C2,一般状态下,系统以周期T1周期性的计算每个表上的冲突级别TC;
b.比较当前TC和C1的大小,当TC大于或者等于C1,该表进入冲突监视状态,为该表设置一个周期为T2的定时器,执行步骤c;如果TC小于C1,该表返回步骤a,继续进行一般状态下的检测;
c.每当表上周期T2的定时器消息到达时,重新计算TC;
d.比较当前TC和C1的大小,如果TC小于C1,销毁周期T2的定时器,该表返回步骤a进入一般状态下的检测;如果TC大于或者等于C1,进行后面的步骤;
e.比较当前TC和前一周期内TC的大小,如果TC比前一周期内的TC大,那么C2=C2-C0,C0为细化阈值变化的步值;如果TC比前一周期内的TC要小,那么C2=C2+C0;如果TC和前一周期内的TC相等,那么C2不变;
f.比较TC和C2的大小,如果TC大于或者等于C2,那么细化该表上的锁粒度,将现有的表级锁转化为行级锁,销毁周期为T2的监视定时器,否则继续等待监视状态下的定时器消息到达。
2.根据权利要求1所述的一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,所述锁粒度细化算法是通过单独设置一个后台线程来完成的,该后台线程周期性的访问锁管理器,计算表上的冲突级别。
3.根据权利要求1或2所述的一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,所述周期T1取值为20秒,所述C1取值为10,所述 C2的初始化值为40。
4.根据权利要求1或2所述的一种数据库中动态多粒度锁的事务冲突判决方法,其特征在于,所述T2取2~5秒,C0取值为2~4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009103058450A CN101667211B (zh) | 2009-08-20 | 2009-08-20 | 一种数据库中动态多粒度锁的事务冲突判决方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009103058450A CN101667211B (zh) | 2009-08-20 | 2009-08-20 | 一种数据库中动态多粒度锁的事务冲突判决方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101667211A CN101667211A (zh) | 2010-03-10 |
CN101667211B true CN101667211B (zh) | 2011-04-20 |
Family
ID=41803829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009103058450A Expired - Fee Related CN101667211B (zh) | 2009-08-20 | 2009-08-20 | 一种数据库中动态多粒度锁的事务冲突判决方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101667211B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102355473B (zh) * | 2011-06-28 | 2013-12-25 | 用友软件股份有限公司 | 分布式计算环境下的锁定控制系统和方法 |
KR20170100643A (ko) * | 2014-12-31 | 2017-09-04 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 트랜잭션 충돌 검출 방법과 장치 및 컴퓨터 시스템 |
CN104679881B (zh) * | 2015-03-13 | 2019-03-08 | 华为技术有限公司 | 一种并发控制方法及装置 |
CN106919640A (zh) * | 2016-11-16 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 一种业务处理方法和装置 |
CN107193688A (zh) * | 2017-04-25 | 2017-09-22 | 北京潘达互娱科技有限公司 | 数据表结构修改方法及装置 |
CN108459913B (zh) * | 2017-12-26 | 2022-06-10 | 创新先进技术有限公司 | 数据并行处理方法、装置及服务器 |
CN111475262B (zh) * | 2020-04-02 | 2024-02-06 | 百度国际科技(深圳)有限公司 | 区块链中事务请求处理方法、装置、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5485607A (en) * | 1993-02-05 | 1996-01-16 | Digital Equipment Corporation | Concurrency-control method and apparatus in a database management system utilizing key-valued locking |
US6772155B1 (en) * | 2001-04-04 | 2004-08-03 | Ncr Corporation | Looking data in a database system |
CN1975675A (zh) * | 2006-12-13 | 2007-06-06 | 天津理工大学 | 一种适合移动分布式实时数据库的安全实时并发控制协议 |
-
2009
- 2009-08-20 CN CN2009103058450A patent/CN101667211B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5485607A (en) * | 1993-02-05 | 1996-01-16 | Digital Equipment Corporation | Concurrency-control method and apparatus in a database management system utilizing key-valued locking |
US6772155B1 (en) * | 2001-04-04 | 2004-08-03 | Ncr Corporation | Looking data in a database system |
CN1975675A (zh) * | 2006-12-13 | 2007-06-06 | 天津理工大学 | 一种适合移动分布式实时数据库的安全实时并发控制协议 |
Non-Patent Citations (1)
Title |
---|
刘晖,徐兰芳.数据仓库的动态粒度锁管理机制.《软件天地》.2004,(第11期),10~12. * |
Also Published As
Publication number | Publication date |
---|---|
CN101667211A (zh) | 2010-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101667211B (zh) | 一种数据库中动态多粒度锁的事务冲突判决方法 | |
US20220214930A1 (en) | Systems and Methods for Performing Concurrency Restriction and Throttling over Contended Locks | |
US9135085B2 (en) | Exclusive control method of resource and exclusive controller of resource | |
US9430388B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
CN101102281B (zh) | 移动通信系统中大量数据上报时的数据处理方法 | |
US20120117304A1 (en) | Managing memory with limited write cycles in heterogeneous memory systems | |
US20090307696A1 (en) | Thread management based on device power state | |
CN102063338B (zh) | 一种请求独占资源的方法及装置 | |
US8220001B2 (en) | Adaptive cluster timer manager | |
CN105893120B (zh) | 一种线程同步资源的获取方法和装置 | |
CN103995755A (zh) | 基于移动终端的服务器优化方法及服务器系统 | |
US20100211681A1 (en) | Intelligent flood control management | |
CN103246696A (zh) | 高并发数据库的访问方法及应用于多服务器系统的方法 | |
US20180107514A1 (en) | Generic Concurrency Restriction | |
CN102129391A (zh) | 一种数据库中自旋锁的实现方法 | |
CN106021468A (zh) | 分布式缓存和本地缓存的更新方法和系统 | |
CN102902583A (zh) | 在挂起状态和执行状态下管理进程 | |
CN112866136B (zh) | 业务数据处理方法和装置 | |
CN110781244A (zh) | 用于对数据库的并发操作进行控制的方法及装置 | |
CN104376096A (zh) | 基于缓冲区的异步更新的方法 | |
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN105830029B (zh) | 用于在计算环境中支持自适应忙等待的系统和方法 | |
CN110888739B (zh) | 延迟任务的分布式处理方法与装置 | |
KR100379949B1 (ko) | 상승불가능 로크 개념에 기반한 적응형 로크 상승방법 | |
CN103995743B (zh) | 基于资源预约的两级混合任务调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110420 Termination date: 20120820 |