[发明专利]任务的处理方法和处理装置在审
申请号: | 201611094438.6 | 申请日: | 2016-12-01 |
公开(公告)号: | CN108132831A | 公开(公告)日: | 2018-06-08 |
发明(设计)人: | 章颖强 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48;G06F17/30 |
代理公司: | 北京博浩百睿知识产权代理有限责任公司 11134 | 代理人: | 宋子良 |
地址: | 英属开曼群岛大开*** | 国省代码: | 开曼群岛;KY |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 更新请求 处理进程 更新结果 数据库记录 处理装置 标识信息 等待状态 记录行 触发 互斥 更新 数据库 全局 | ||
本发明公开了一种任务的处理方法和处理装置。其中,该方法包括:获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。本发明解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
技术领域
本发明涉及数据库技术领域,具体而言,涉及一种任务的处理方法和处理装置。
背景技术
随着互联网技术的快速发展,由于在线交易具有方便快捷的优点,其已成为人们日常生活中进行购物、娱乐所必不可少的途径。
当用户进行在线交易时,后台数据库中的某些记录由于在短时间内被多次更新,从而形成热点记录,例如,在“双十一购物节”中爆款商品的抢购,其爆款商品的数量在数据库中所在的记录就会形成热点记录。此外,热点记录的问题同样会出现在限购、红包等大量的业务数据库中。
在现有的关系型数据库中,通过以下方法对热点记录进行处理:
(1)找到对应的热点记录(例如,通过B树或哈希表等查找到热点记录),并对该热点记录进行加行锁处理(例如对该热点记录进行加X锁处理),然后再判断是否存在行锁冲突,如果存在行锁冲突,则等待预定时间后,再重复上述操作,否则,执行步骤(2)。
(2)更新已经过加锁处理的热点记录,生成重做日志。
(3)当收到提交命令或者根据autocommit等配置自动提交时,释放任务所持有的行锁,其中,在持有行锁的任务提交以前,其他更新同一记录的任务只能在行锁上等待。
上述对热点记录处理的方法存在以下问题:
(1)单一热点行锁的互斥形成全局串行点
由于从对热点记录进行加锁开始,到任务提交释放锁为止,这段时间其他任务是无法进行的,从而形成了提高热点记录更新的性能瓶颈。
(2)大量连接对同一行锁的争抢和等待引发资源空耗和系统拥堵
当大量连接对同一热点记录争抢时,可能使得死锁的检测时间变长,引擎层中活跃的线程过多,从而导致热点记录的吞吐量进一步下降。
由上可知,在目前的关系型数据库中,当对数据库中的一行进行更新操作时,需要先对改行进行行锁,由于这些行锁之间是相互排斥的,从而导致在对数据库中的热点记录进行更新时,所有的更新步骤必须串行执行。同时,在对数据库进行更新操作时,需要进行数据库连接以及其他操作,这些操作又增加了检测页面锁/死锁的耗时,从而进一步影响了数据库更新的速度。
针对上述问题,现有技术大多都是通过如下方法来改进热点记录的吞吐量的:
(1)通过特定的语法和语法标记,降低热点记录持有行锁的时间
例如,通过对SQL语言加入特定的语法和语法标记,使得本来要多个SQL才能完成的功能,现在只需要一个带有语法标记的特殊语法的SQL就能完成,这样使得热点记录持有行锁时间降低到一个SQL执行时间以内。
(2)通过限制活跃线程,降低热点记录的行锁的争抢
通过在存储引擎中限制持有锁的活跃线程的数量,使得不会有过多的连接/线程同时争抢热点记录的行锁,进而可以降低系统的内耗以及死锁检测的代价。
(3)通过外部队列,降低热点行锁争抢
例如,通过在SQL中注入特定的语法标记,使相同热点记录的SQL在引擎外的一个队列中等待,从而降低系统的内耗和死锁检测代价。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611094438.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种任务调度方法、装置及系统
- 下一篇:应用程序启动方法和装置