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

文档序号:9929539阅读:339来源:国知局
用于对MySQL数据库的并发操作进行控制的方法及装置的制造方法
【技术领域】
[0001]本申请涉及数据库领域,具体涉及一种用于对MySQL数据库的并发操作进行控制的方法。本申请同时提供一种用于对MySQL数据库的并发操作进行控制的装置。
【背景技术】
[0002]MySQL是一个开放源码的关系型数据库管理系统,通过将数据保存在不同的相互关联的数据表中,而不是将所有数据放在一个大仓库内,加快了数据访问速度并提高了灵活性。MySQL支持插件式的多种数据库引擎,其主流是支持事务机制的InnoDB存储引擎,此外还支持MylSAM、BDB、Memory等存储引擎。
[0003]MySQL数据库的体系结构通常包括两层,第一层为MySQL server层,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括:客户端身份验证、连接管理、以及针对客户端的数据库操作请求进行解析、优化、查询高速缓存等操作;第二层就是存储引擎层(Storage Engine Layer),也就是底层数据存取操作实现部分,由多种存储引擎共同组成,负责执行数据的存储,读取,索引的建立等操作。
[0004]通常情况下,来自客户端(例如:上层应用)的数据库操作请求是随机的,因此可能会出现大量请求并发的情况,现有技术针对这种情况通常采用两种方式来保障MySQL数据库的可用性:
[0005]I)依赖上层应用限流进行保护,例如:当上层应用发现MySQl数据库的响应时间超过预先设置的阈值,则暂停或者减缓与MySQL数据库建立连接并发送数据库操作请求的动作;
[0006]2)依赖底层存储引擎自身的并发控制机制。以存储引擎InnoDB为例,当线程进入InnoDB执行时,如果发现InnoDB内部并发执行的线程数目超过了预先设置的并发数后,该线程会在InnoDB的FIFO队列中等待,而不会进入InnoDB内部直接执行,直到有线程执行完毕从InnoDB退出,在FIFO队列中等待的线程才会被唤醒并进入InnoDB内部执行。
[0007]上述两种方式在一定程度上可以对MySQL数据库起到保护的作用,但是在实际应用中,都存在一定的缺陷:采用方式I),由于需要经过上层应用的反馈,通常处理时间比较长,不能及时缓解MySQL数据库的负载压力,可能会出现限流尚未发挥效果而MySQL数据库已经崩溃的情况;采用方式2),在MySQL数据库的负载压力大到一定程度的情况下,虽然存储引擎本身具有并发控制机制,但是由于MySQL server层缺乏有效的自我保护能力,如果并发操作的规模超过MySQL Server层的处理能力,可能导致MySQL数据库无法稳定地提供服务,对上层应用的响应时间出现较大范围的波动、甚至无法响应,MySQL数据库的可用性得不到有效的保障。

【发明内容】

[0008]本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,以解决MySQL数据库在大量并发操作的情况下可能无法稳定地提供服务的问题。本申请另外提供一种用于对MySQL数据库的并发操作进行控制的装置。
[0009]本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,包括:
[0010]接收针对MySQL数据库的数据库操作请求;
[0011]判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
[0012]若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理。
[0013]可选的,当所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由存储引擎执行之前,执行下述操作:
[0014]判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
[0015]当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一;
[0016]所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目。
[0017]可选的,所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值具体是指,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
[0018]可选的,在所述判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,执行下述操作:
[0019]判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
[0020]若否,转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行。
[0021]可选的,所述第一限流类型包括:查询操作。
[0022]可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,执行下述操作:
[0023]判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行:
[0024]所述数据库操作请求的发起方具有对数据库操作的超级权限;
[0025]所述数据库操作请求涉及操作所属的数据库事务已经启动;
[0026]所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
[0027]可选的,所述第二限流类型包括:查询操作、插入操作、更新操作和删除操作。
[0028]可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设定的第二阈值时,首先执行下述操作:
[0029]判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述继续处理所述数据库操作请求并交由存储引擎执行的步骤执行:
[0030]所述数据库操作请求的发起方具有对数据库操作的超级权限;
[0031]所述数据库操作请求涉及操作所属的数据库事务已经启动;
[0032]所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
[0033]可选的,所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
[0034]可选的,所述方法还包括:
[0035]监测每个线程在所述先进先出队列中的等待时间;
[0036]当所述等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
[0037]可选的,所述先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
[0038]可选的,在所述接收数据库操作请求的步骤后,首先执行下述操作:
[0039]判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;
[0040]判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
[0041]相应的,本申请还提供一种用于对MySQL数据库的并发操作进行控制的装置,包括:
[0042]操作请求接收单元,用于接收针对MySQL数据库的数据库操作请求;
[0043]负载压力判断单元,用于判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
[0044]操作请求处理单元,用于当所述负载压力判断单元的输出为“是”时,继续处理所述数据库操作请求并交由存储引擎执行;
[0045]操作请求结束单元,用于当所述负载压力判断单元的输出为“否”时,结束对所述数据库操作请求的处理。
[0046]可选的,所述装置包括:
[0047]并发线程判断单元,用于当所述负载压力判断单元的输出为“是”时,判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
[0048]线程等待单元,用于当所述并发线程判断单元的输出为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;
[0049]继续处理单元,用于当所述并发线程判断单元的输出为“否”时,触发所述操作请求处理单元工作,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一。
[0050]可选的,所述负载压力判断单元具体用于,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
[0051]可选的,所述装置包括:
[0052]第一限流类型判断单元,用于在判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
[0053]跳转控制单元,用于当所述第一限流类型判断单元的输出为“是”时,触发所述负载压力判断单元工作,否则触发并发线程判断单元工作。
[0054]可选的,所述装置包括:
[0055]第一条件判断单元,用于在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述并发线程判断单元工作,若否,触发所述第一限流类型判断单元工作:
[0056]所述数据库操作请求的发起方具有对数据库操作
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1