用于对MySQL数据库的并发操作进行控制的方法及装置制造方法及图纸

技术编号:15087716 阅读:62 留言:0更新日期:2017-04-07 17:25
本申请公开了一种用于对MySQL数据库的并发操作进行控制的方法,所述方法包括:接收针对MySQL数据库的数据库操作请求;判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理。本申请同时提供一种用于对MySQL数据库的并发操作进行控制的装置。采用本申请提供的方法,能够对MySQL数据库的负载压力进行精细控制,将针对数据库操作请求的响应时间维持在应用能接受的范围之内,提高了MySQL数据库整体的可用性。

【技术实现步骤摘要】

本申请涉及数据库领域,具体涉及一种用于对MySQL数据库的并发操作进行控制的方法。本申请同时提供一种用于对MySQL数据库的并发操作进行控制的装置。
技术介绍
MySQL是一个开放源码的关系型数据库管理系统,通过将数据保存在不同的相互关联的数据表中,而不是将所有数据放在一个大仓库内,加快了数据访问速度并提高了灵活性。MySQL支持插件式的多种数据库引擎,其主流是支持事务机制的InnoDB存储引擎,此外还支持MyISAM、BDB、Memory等存储引擎。MySQL数据库的体系结构通常包括两层,第一层为MySQLserver层,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括:客户端身份验证、连接管理、以及针对客户端的数据库操作请求进行解析、优化、查询高速缓存等操作;第二层就是存储引擎层(StorageEngineLayer),也就是底层数据存取操作实现部分,由多种存储引擎共同组成,负责执行数据的存储,读取,索引的建立等操作。通常情况下,来自客户端(例如:上层应用)的数据库操作请求是随机的,因此可能会出现大量请求并发的情况,现有技术针对这种情况通常采用两种方式来保障MySQL数据库的可用性:1)依赖上层应用限流进行保护,例如:当上层应用发现MySQl数据库的响应时间超过预先设置的阈值,则暂停或者减缓与MySQL数据库建立连接并发送数据库操作请求的动作;2)依赖底层存储引擎自身的并发控制机制。以存储引擎InnoDB为例,当线程进入InnoDB执行时,如果发现InnoDB内部并发执行的线程数目超过了预先设置的并发数后,该线程会在InnoDB的FIFO队列中等待,而不会进入InnoDB内部直接执行,直到有线程执行完毕从InnoDB退出,在FIFO队列中等待的线程才会被唤醒并进入InnoDB内部执行。上述两种方式在一定程度上可以对MySQL数据库起到保护的作用,但是在实际应用中,都存在一定的缺陷:采用方式1),由于需要经过上层应用的反馈,通常处理时间比较长,不能及时缓解MySQL数据库的负载压力,可能会出现限流尚未发挥效果而MySQL数据库已经崩溃的情况;采用方式2),在MySQL数据库的负载压力大到一定程度的情况下,虽然存储引擎本身具有并发控制机制,但是由于MySQLserver层缺乏有效的自我保护能力,如果并发操作的规模超过MySQLServer层的处理能力,可能导致MySQL数据库无法稳定地提供服务,对上层应用的响应时间出现较大范围的波动、甚至无法响应,MySQL数据库的可用性得不到有效的保障。
技术实现思路
本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,以解决MySQL数据库在大量并发操作的情况下可能无法稳定地提供服务的问题。本申请另外提供一种用于对MySQL数据库的并发操作进行控制的装置。本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,包括:接收针对MySQL数据库的数据库操作请求;判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理。可选的,当所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由存储引擎执行之前,执行下述操作:判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一;所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目。可选的,所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值具体是指,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。可选的,在所述判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,执行下述操作:判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;若否,转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行。可选的,所述第一限流类型包括:查询操作。可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,执行下述操作:判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行:所述数据库操作请求的发起方具有对数据库操作的超级权限;所述数据库操作请求涉及操作所属的数据库事务已经启动;所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。可选的,所述第二限流类型包括:查询操作、插入操作、更新操作和删除操作。可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设定的第二阈值时,首先执行下述操作:判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述继续处理所述数据库操作请求并交由存储引擎执行的步骤执行:所述数据库操作请求的发起方具有对数据库操作的超级权限;所述数据库操作请求涉及操作所属的数据库事务已经启动;所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。可选的,所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。可选的,所述方法还包括:监测每个线程在所述先进先出队列中的等待时间;当所述等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。可选的,所述先进先出队列为多个,需要进入等待状态的线程依次被分配...

【技术保护点】
一种用于对MySQL数据库的并发操作进行控制的方法,其特征在于,包括:接收针对MySQL数据库的数据库操作请求;判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理。

【技术特征摘要】
1.一种用于对MySQL数据库的并发操作进行控制的方法,其特征在于,
包括:
接收针对MySQL数据库的数据库操作请求;
判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对
所述数据库操作请求的处理。
2.根据权利要求1所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,当所述判断表征MySQL数据库负载压力的指标值是否小于预
先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由
存储引擎执行之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中
的一种、且并发线程数目是否不小于预先设置的第二阈值;
当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线
程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交
由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置
的第二限流类型中的一种时,将所述并发线程数目加一;
所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一
种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目。
3.根据权利要求2所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,所述判断表征MySQL数据库负载压力的指标值是否小于预先
设置的第一阈值具体是指,判断MySQL数据库的threads_running变量的值是否
小于预先设置的第一阈值。
4.根据权利要求3所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,在所述判断MySQL数据库的threads_running变量的值是否小
于预先设置的第一阈值之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中
的一种;
若否,转到所述判断所述数据库操作请求的操作类型是否属于预先设置的
第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步
骤执行。
5.根据权利要求4所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,所述第一限流类型包括:查询操作。
6.根据权利要求5所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,在判断所述数据库操作请求的操作类型是否属于预先设置的
第一限流类型中的一种之前,执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则
转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类
型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
7.根据权利要求3-6任一所述的用于对MySQL数据库的并发操作进行控
制的方法,其特征在于,所述第二限流类型包括:查询操作、插入操作、更新
操作和删除操作。
8.根据权利要求3-6任一所述的用于对MySQL数据库的并发操作进行控
制的方法,其特征在于,在判断所述数据库操作请求的操作类型是否属于预先
设置的第二限流类型中的一种、且并发线程数目是否不小于预先设定的第二阈
值时,首先执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则
转到所述继续处理所述数据库操作请求并交由存储引擎执行的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语
言涉及的数据库操作中的一种。
9.根据权利要求3-6任一所述的用于对MySQL数据库的并发操作进行控
制的方法,其特征在于,所述数据库操作请求经由存储引擎执行完毕后,依次
唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求
并交由存储引擎执行。
10.根据权利要求9所述的用于对MySQL数据库的并发操作进行控制的方

\t法,其特征在于,还包括:
监测每个线程在所述先进先出队列中的等待时间;
当所述等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操
作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
11.根据权利要求9所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,所述先进先出队列为多个,需要进入等待状态的线程依次被
分配到不同的先进先出队列中。
12.根据权利要求2所述的用于对MySQL数据库的并发操作进行控制的方
法,其特征在于,在所述接收数据库操作请求的步骤后,首先执行下述操作:
判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈
值设置为MySQL数据...

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

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

1