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

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

Info

Publication number
CN105718474B
CN105718474B CN201410727590.8A CN201410727590A CN105718474B CN 105718474 B CN105718474 B CN 105718474B CN 201410727590 A CN201410727590 A CN 201410727590A CN 105718474 B CN105718474 B CN 105718474B
Authority
CN
China
Prior art keywords
database
database manipulation
thread
threshold
mysql
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.)
Active
Application number
CN201410727590.8A
Other languages
English (en)
Other versions
CN105718474A (zh
Inventor
黄欢欢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910859269.8A priority Critical patent/CN110781244B/zh
Priority to CN201410727590.8A priority patent/CN105718474B/zh
Priority to PCT/CN2015/095832 priority patent/WO2016086800A1/zh
Publication of CN105718474A publication Critical patent/CN105718474A/zh
Application granted granted Critical
Publication of CN105718474B publication Critical patent/CN105718474B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

用于对MySQL数据库的并发操作进行控制的方法及装置
技术领域
本申请涉及数据库领域,具体涉及一种用于对MySQL数据库的并发操作进行控制的方法。本申请同时提供一种用于对MySQL数据库的并发操作进行控制的装置。
背景技术
MySQL是一个开放源码的关系型数据库管理系统,通过将数据保存在不同的相互关联的数据表中,而不是将所有数据放在一个大仓库内,加快了数据访问速度并提高了灵活性。MySQL支持插件式的多种数据库引擎,其主流是支持事务机制的InnoDB存储引擎,此外还支持MyISAM、BDB、Memory等存储引擎。
MySQL数据库的体系结构通常包括两层,第一层为MySQL server层,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括:客户端身份验证、连接管理、以及针对客户端的数据库操作请求进行解析、优化、查询高速缓存等操作;第二层就是存储引擎层(Storage Engine Layer),也就是底层数据存取操作实现部分,由多种存储引擎共同组成,负责执行数据的存储,读取,索引的建立等操作。
通常情况下,来自客户端(例如:上层应用)的数据库操作请求是随机的,因此可能会出现大量请求并发的情况,现有技术针对这种情况通常采用两种方式来保障MySQL数据库的可用性:
1)依赖上层应用限流进行保护,例如:当上层应用发现MySQl数据库的响应时间超过预先设置的阈值,则暂停或者减缓与MySQL数据库建立连接并发送数据库操作请求的动作;
2)依赖底层存储引擎自身的并发控制机制。以存储引擎InnoDB为例,当线程进入InnoDB执行时,如果发现InnoDB内部并发执行的线程数目超过了预先设置的并发数后,该线程会在InnoDB的FIFO队列中等待,而不会进入InnoDB内部直接执行,直到有线程执行完毕从InnoDB退出,在FIFO队列中等待的线程才会被唤醒并进入InnoDB内部执行。
上述两种方式在一定程度上可以对MySQL数据库起到保护的作用,但是在实际应用中,都存在一定的缺陷:采用方式1),由于需要经过上层应用的反馈,通常处理时间比较长,不能及时缓解MySQL数据库的负载压力,可能会出现限流尚未发挥效果而MySQL数据库已经崩溃的情况;采用方式2),在MySQL数据库的负载压力大到一定程度的情况下,虽然存储引擎本身具有并发控制机制,但是由于MySQL server层缺乏有效的自我保护能力,如果并发操作的规模超过MySQL Server层的处理能力,可能导致MySQL数据库无法稳定地提供服务,对上层应用的响应时间出现较大范围的波动、甚至无法响应,MySQL数据库的可用性得不到有效的保障。
发明内容
本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,以解决MySQL数据库在大量并发操作的情况下可能无法稳定地提供服务的问题。本申请另外提供一种用于对MySQL数据库的并发操作进行控制的装置。
本申请提供一种用于对MySQL数据库的并发操作进行控制的方法,包括:
接收针对MySQL数据库的数据库操作请求;
判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理。
可选的,当所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由存储引擎执行之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一;
所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目。
可选的,所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值具体是指,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
可选的,在所述判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
若否,转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行。
可选的,所述第一限流类型包括:查询操作。
可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
可选的,所述第二限流类型包括:查询操作、插入操作、更新操作和删除操作。
可选的,在判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设定的第二阈值时,首先执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述继续处理所述数据库操作请求并交由存储引擎执行的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
可选的,所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
可选的,所述方法还包括:
监测每个线程在所述先进先出队列中的等待时间;
当所述等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
可选的,所述先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
可选的,在所述接收数据库操作请求的步骤后,首先执行下述操作:
判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;
判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
相应的,本申请还提供一种用于对MySQL数据库的并发操作进行控制的装置,包括:
操作请求接收单元,用于接收针对MySQL数据库的数据库操作请求;
负载压力判断单元,用于判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
操作请求处理单元,用于当所述负载压力判断单元的输出为“是”时,继续处理所述数据库操作请求并交由存储引擎执行;
操作请求结束单元,用于当所述负载压力判断单元的输出为“否”时,结束对所述数据库操作请求的处理。
可选的,所述装置包括:
并发线程判断单元,用于当所述负载压力判断单元的输出为“是”时,判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
线程等待单元,用于当所述并发线程判断单元的输出为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;
继续处理单元,用于当所述并发线程判断单元的输出为“否”时,触发所述操作请求处理单元工作,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一。
可选的,所述负载压力判断单元具体用于,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
可选的,所述装置包括:
第一限流类型判断单元,用于在判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
跳转控制单元,用于当所述第一限流类型判断单元的输出为“是”时,触发所述负载压力判断单元工作,否则触发并发线程判断单元工作。
可选的,所述装置包括:
第一条件判断单元,用于在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述并发线程判断单元工作,若否,触发所述第一限流类型判断单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
可选的,所述并发线程判断单元除了包含实现其功能的本体子单元外,还包括:
第二条件判断子单元,用于判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述操作请求处理单元工作,否则触发所述本体子单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
可选的,所述装置包括:
等待队列唤醒单元,用于当所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
可选的,所述装置还包括:
等待时间监测单元,用于监测每个线程在所述先进先出队列中的等待时间;
线程终止单元,用于当所述等待时间监测单元监测到某个线程在先进先出队列中的等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
可选的,所述线程等待单元中采用的先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
可选的,所述装置包括:
阈值设置单元,用于在接收数据库操作请求后,判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
与现有技术相比,本申请具有以下优点:
本申请提供的用于对MySQL数据库的并发操作进行控制的方法,在接收数据库操作请求后,通过实时检测表征MySQL数据库负载压力的指标值,当该数值小于预先设置的第一阈值时,继续处理所述数据库操作请求并交由存储引擎执行,否则结束对所述数据库操作请求的处理。采用上述方法,在MySQL数据库负载压力大的情况下,通过直接结束对所述数据库操作请求的处理,实现了对MySQL数据库负载的精细控制,将针对数据库操作请求的响应时间维持在应用能接受的范围之内,提高了MySQL数据库整体的可用性。
附图说明
图1是本申请的一种用于对MySQL数据库的并发操作进行控制的方法实施例的流程图;
图2是本实施例提供的根据threads_running进行限流的处理流程图;
图3是本实施例提供的采用FIFO排队方式进行限流的处理流程图;
图4是本实施例提供的不同限流方式下QPS与活动线程数目关系的曲线图;
图5是本申请的一种用于对MySQL数据库的并发操作进行控制的装置实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,分别提供了一种用于对MySQL数据库的并发操作进行控制的方法、以及一种用于对MySQL数据库的并发操作进行控制的装置,在下面的实施例中逐一进行详细说明。
请参考图1,其为本申请的一种用于对MySQL数据库的并发操作进行控制的方法实施例的流程图,所述方法包括如下步骤:
步骤101:接收针对MySQL数据库的数据库操作请求。
本申请所述的针对MySQL数据库的数据库操作请求是指,从客户端(例如:上层应用)发送给所述MySQL数据库的操作请求,该操作请求中通常会包含请求MySQL数据库执行的SQL语句,例如:查询、插入、删除、更新、以及数据表的创建、修改、删除等SQL语句,以及其他MySQL数据库支持的SQL语句。
在具体实施中,所述数据库操作请求由MySQL的server层接收,由于MySQL通常采用多线程机制,其server层针对每个接收到的数据库操作请求,都会分配一个用于处理该数据库操作请求的线程,这里所说的分配操作可以是创建一个新的线程,也可以是从线程缓冲池(thread cache)中直接获取一个空闲的线程。也可以这样理解,MySQL数据库接收到的每个数据库操作请求都由一个线程承载,或者都有一个线程与其对应。
步骤102:判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值,若是,执行步骤103,否则执行步骤104。
本申请提供的技术方案,在MySQL数据库负载压力大的情况下,可以直接结束对接收到的数据库操作请求的处理,即:不进行处理,从而缓解MySQL数据库负载压力,保障MySQL数据库的可用性。
为了实现上述目的,首先需要能够判断出MySQL数据库当前的负载状况。在具体运行过程中,可用于判断MySQL负载状况的依据有很多,例如:TPS(Transaction PerSecond—系统吞吐量)、QPS(Query Per Second—每秒查询率)、RT(Response Time—响应时间)、TR(Threads_Running—活动线程数)、Context Switch per Second(每秒线程上下文切换次数)等。其中有的是MySQL数据库所在主机的运行指标,有些则是从MySQL数据库内部进行考量,从通用性以及尽可能准确、实时反映MySQL负载状况的角度出发,本实施例选择TR作为表征MySQL数据库负载压力的指标。在其他实施方式中,可以选择上述或者其他能够表征MySQL数据库负载压力状况的指标,同样可以实现本申请的技术方案。
数据库操作请求经过MySQL的server层进行必要的处理后,通常都会进入存储引擎层(例如:InnoDB)执行实际的数据库操作,MySQL数据库维护的Threads_Running变量就是进入存储引擎层(可能在执行也可能在等待获取执行的机会)的线程数目,也可以称作是处于执行状态的线程数目或者活动线程数目,通常可以认为在该数值比较大的情况下,说明MySQL数据库整体的负载压力也相对比较大。
本步骤就是根据Threads_Running的数值判断是否继续处理所述数据库操作请求,如果所述数值小于预先设置的第一阈值,说明MySQL数据库的负载压力还在其处理能力范围之内,因此执行步骤103继续处理所述数据库操作请求,否则说明MySQL数据库的负载压力可能已经超出了其处理能力范围,此时应该采取限流措施,即:执行步骤104结束对所述数据库操作请求的处理。
在本实施例的一个具体例子中,在上述判断方式的基础上,还根据实际运行中的需求将数据库操作请求的类型或者发起方权限等作为是否限流的考虑因素,因此本步骤的处理过程包括以下步骤102-1至102-3,下面结合附图2进行说明。
步骤102-1:判断所述数据库操作请求是否满足预先设定的不限流条件,若是,转到步骤103执行,否则执行步骤102-2。
考虑到来自客户端(例如:上层应用)的数据库操作请求可能涉及MySQL数据库支持的各种数据库操作,其中有些是具有超级权限(即:super权限)的用户才能执行的有特殊作用或者相对重要的操作(例如:与数据库同步操作有关的binlog操作),这种操作通常可以不采取限流措施,直接转到步骤103执行。
此外,如果底层存储引擎采用的是InnoDB,那么为了保证数据库事务的原子性,或者事务处理过程的完整性,有一些与事务处理相关的操作,例如:事务的提交操作(commit)、回滚(rollback)操作、以及包含在已开启事务中的各个操作,通常也可以不采取限流措施,而是直接转到步骤103执行。
在本实施例的上述具体例子中,本步骤所述的不限流的条件是指:
1)所述数据库操作请求的发起方具有对数据库操作的超级权限;
2)所述数据库操作请求所涉及的操作所属的数据库事务已经启动;
3)所述数据库操作请求的操作类型是事务提交(commit)或者事务回滚(rollback)中的一种。
当所述数据库操作请求满足上述任意一个条件时不进行限流判断,而是直接转到步骤103执行。
步骤102-2:判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种,若是,执行步骤102-3,否则转到步骤103执行。
在实际的业务场景下,大量的数据库操作请求的操作类型,即:该请求中携带的SQL语句的类型都是DML(数据操纵语言)语句涉及的操作类型,例如:查询select、插入insert、更新update、删除delete等,这些数据库操作请求通常认为是业务层面的操作请求;此外,MySQL接收到的数据库操作请求也会有其他涉及数据库层面的操作请求,例如:DDL(数据定义语言)语句涉及的操作或者DCL语句涉及的操作等,这类操作请求的数量相对比较少。
在常规应用中,业务层面的数据库操作请求通常是执行限流操作的关注点,而且其中查询操作的执行时间可能会比较长,大量并发的查询操作可能对MySQL数据库造成比较大的压力。因此,权衡考虑本方法的执行效率以及限流效果,可以设置所述第一限流类型仅包括:查询操作,也就是说如果所述数据库操作请求是查询操作,就转到步骤102-3执行,否则不用限流,直接转到步骤103执行。
当然,在其他实施方式中,根据实际业务场景的数据库操作特点,预先设置的所述第一限流类型可以不同于本实施例中的设置,同样可以实现本申请的技术方案,也在本申请的保护范围之内。
步骤102-3:判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值,若是,执行步骤103,否则,执行步骤104。
执行到本步骤,说明所述数据库操作请求属于可以被限流的操作类型,因此本步骤通过判断threads_running变量的值来决定是否限流,如果threads_running的值小于预先设置的第一阈值,说明MySQL数据库当前的负载压力还在其处理能力范围内,因此不需限流,执行步骤103,否则转到步骤104结束对所述数据库操作请求的处理。
上面描述了根据threads_running的数值决定是否需要进行限流的判断过程,该过程相当于为threads_running变量设置了一个硬上限,当活动线程数目超过该上限时,所述数据库操作请求将不被处理(参见后续步骤104),从而使threads_running的数值能够基本维持在可控的范围之内。
在具体实施过程中,为了取得更好的限流效果,本实施例还提供了一种优选实施方式,即:采用两级限流措施,在上述限流方案的基础上采用FIFO队列进一步进行限流,从而可以有效保证MySQL数据库的可用性。为了将两种限流方式相区分,将上述根据threads_running进行限流的方式称为高水位限流,而将下面描述的利用FIFO队列实现限流的方式称为低水位限流。也就是说,在高水位限流没有限制所述数据库操作请求的情况下,可以不直接转到步骤103执行,而是通过低水位限流进行必要的排队等待处理,从而可以提前缓解MySQLserver层的负载压力。
所述低水位限流的处理过程包括如下所示的步骤102-4至步骤102-7,下面结合附图3进行说明。
步骤102-4:判断所述数据库操作请求是否满足预先设置的不进行低水位限流的条件,若是,转到步骤103执行,否则执行步骤102-5。
与步骤102-1中描述的原因类似,为了保证一些特殊或者重要的数据库操作请求能够得到及时的处理,以及尽量保证数据库事务的完整性,当所述数据库操作请求满足预先设置的不进行低水位限流的条件时,直接转到步骤103执行,否则执行步骤102-5继续进行低水位限流判断。
在本实施例的上述具体例子中,本步骤所述的不进行低水位限流的条件是指:
1)所述数据库操作请求的发起方具有对数据库操作的超级权限;
2)所述数据库操作请求所涉及的操作所属的数据库事务已经启动;
3)所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
当所述数据库操作请求满足上述任意一个条件时,则转到步骤103执行。
步骤102-5:判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值,上述两个判断结果都为“是”时,执行步骤102-7进入FIFO队列等待,否则,执行步骤102-6。
与步骤102-2中描述的原因类似,本步骤所述的第二限流类型主要是指涉及业务层面的数据库操作类型,在本实施例的一个具体例子中,预先设置的第二限流类型包括:查询操作、插入操作、更新操作和删除操作。在其他实施方式中,预先设置的所述第二限流类型可以不同于上述具体例子中的设置。
所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理的数据库操作请求对应的线程的数目。也就是说,如果有符合上述限流类型要求的线程要继续在server层进行后续处理并进入存储引擎层执行(包括未被低水位限流限制以及FIFO队列中唤醒两种情况),则将所述并发线程数目加一,当符合上述限流类型要求的线程从存储引擎层退出时,将所述并发线程数目减一。
在本步骤的判断中,如果两个判断结果都为“是”,说明并发线程的数目已经不小于预先设置的第二阈值,此时为了将所述并发线程的数目控制在预先设置的第二阈值之内,则需要转到步骤102-7进行排队处理。
步骤102-6:当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一,并转到步骤103执行。
步骤102-7:将对应于所述数据库操作请求的线程分配到先进先出队列中等待。
对于在上述步骤102-5的判断中被限流的数据库操作请求,不能继续进行处理,因此在本步骤将所述数据库操作请求对应的线程分配到先进先出(First In First Out—FIFO)队列中等待,等到其他承载数据库操作请求的线程从存储引擎层退出后,会依次唤醒在先进先出队列中等待的线程,继续进行处理并进入存储引擎层执行(即:执行后续的步骤103)。
通常情况下,在采用多线程机制的系统中,CPU以时间片轮转调度的方式执行多个线程,在当前时间片结束并开始下一个线程的调度时,通常需要进行上下文切换(contextswitch)过程,这个过程也是有时间损耗的,而且频繁的切换操作可能影响系统的稳定性。采用本申请的低水位限流处理方式,可以将在MySQL server层并发运行的线程控制在一定数目之内,减少上下文切换及大量线程之间可能的锁竞争,从而使MySQL数据库能够保持比较好的性能和稳定性。
在具体实施过程中,为了防止因为一些意外情况导致线程在FIFO中长时间等待而得不到处理,可以对每个进入先进先出队列中的线程监测其等待时间,当发现某个线程的等待时间超出了预先设置的等待阈值时,则主动终止该线程的运行,并向该线程承载的数据库操作请求的发起方返回拒绝执行的应答,该发起方在收到应答后,可以根据一定的策略再次发送该数据库操作请求。
考虑到FIFO队列是共享资源,为了避免操作冲突,线程在进入或者退出FIFO队列时,通常需要执行加锁/解锁操作,在大量线程并发运行的状况下,必然就会出现锁竞争,从而影响运行效率。为了解决上述问题,本实施例提供了一种优选实施方式,即:采用多个先进先出队列(multi-FIFO),需要进入等待状态的线程,按照round robin(轮询调度)方式依次被分配到不同的先进先出队列中。采用这种实施方式,由于增加了共享资源,可以起到缓解锁竞争的作用,从而达到提高运行效率的目的。
上面介绍了本实施例采用的两级限流机制,主要是根据第一阈值和第二阈值进行限流。在具体实施中,可以在实施本方法之前,设置好这两个阈值,也可以在接收数据库操作请求时(或者之前)进行如下所示的初始化检测和必要的设置:
1)判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;
2)判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
为了让高水位限流和低水位限流都发挥效果,通常设置第一阈值大于第二阈值,至于具体设置为何值,可以根据实际的应用场景和业务需求进行调整,本申请不做具体的限定。
步骤103:继续处理所述数据库操作请求并交由存储引擎执行。
如果步骤102的判断结果表明当前不需要对所述数据库操作请求进行限流,则继续处理所述数据库操作请求并交由存储引擎执行。本步骤所述的继续处理所述数据库操作请求是指,在MySQL server层继续执行相应的处理,例如:对数据库操作请求进行解析、存取控制管理、对查询操作进行必要的优化、根据解析结果选择各个处理分支:表管理器模块、表修改模块、表维护模块、状态报告模块等。本步骤所述的交由存储引擎执行,则是指完成上述必要的处理后,调度承载所述数据库操作请求的线程进入存储引擎层执行,即:执行实际的数据查询、存储、更新等操作。这部分功能的实现,可以参照MySQL数据库开源代码的相关部分,此处不再赘述。
需要说明的是,所述数据库操作请求经由存储引擎执行完毕并退出时,如果在步骤102中采用了低水位限流,则应该查看所述FIFO队列中是否存在处于等待状态的线程,如果存在,则按照进入顺序逐个唤醒其中的等待线程(保证本申请所述的并发线程数目在预先设置的第二阈值范围内),被唤醒的线程继续处理其承载的数据库操作请求并进入存储引擎执行;如果FIFO队列中没有处于等待状态的线程,则对所述并发线程数目执行减一操作,从而保证该数目能够正确反映经过低水位检测后继续被处理并进入存储引擎执行的线程数目。
步骤104:结束对所述数据库操作请求的处理。
如果步骤102的判断结果表明当前需要对所述数据库操作请求进行限流,说明MySQL数据库的负载压力已经或者即将超出其处理能力,此时MySQLserver层不能继续处理所述数据库操作请求,而是直接结束对所属数据库操作请求的处理。
在具体实施中,结束对所述数据库操作请求的处理,通常需要终止承载该请求的线程,如果创建该线程时是从线程缓冲区(thread cache)中获取的,则不需销毁该线程,而是让其重新进入线程缓冲区中,等待处理下一个数据库操作请求。
结束对数据库操作请求的处理后,可以向发出所述请求的客户端(例如:上层应用)返回拒绝执行的应答,这样客户端可以比较及时地获知所述数据库操作请求的处理情况,并根据自己的策略进行后续的处理。
至此,对本申请提供的用于对MySQL数据库的并发操作进行控制的方法进行了详细的描述。在具体实施中,由于MySQL是开放源码的关系型数据库系统,因此可以在已有代码的基础上添加本技术方案关于高水位限流和低水位限流的处理,例如:可以将进行高水位限流的相关代码添加在进行sql解析的代码之前,可以将低水位限流的相关代码添加在进行sql解析之后、以及根据解析结果选择不同的处理器进行处理并交由存储引擎执行之前,例如可以添加在调用Mysql_execute_command()之前;当然,也可以将高水位限流和低水位限流的处理代码都添加在sql解析之后,Mysql_execute_command()函数执行之前。上述实施方式的变更以及这里没有列举的其他不偏离本申请核心的实施方式,只要能够实现本申请技术方的限流功能,保障MySQL数据库的可用性,就都在本申请的保护范围内。
本实施例在高水位限流的基础上,采用低水位限流,从而能够获取满意的实施效果。MySQL数据库支持多线程机制,采用高水位限流可以将MySQL server层的并发线程数目控制在一定范围之内,尽量避免出现MySQL在大量并发请求的情况下出现无法提供稳定服务的现象。而低水位限流可以进一步保障MySQL的可用性,由于第二阈值通常小于第一阈值,也就是说随着数据库负载的逐渐增大,在高水位限流起作用之前,低水位限流会先发挥作用,通过FIFO排队的方式减少MySQL server层的并发线程的数量,减少上下文切换的代价,从而可以在高水位限流发挥作用之前,保障数据库的可用性,为上层应用提供稳定的服务。
上面描述的是本实施例提供的优选实施方式,在其他实施过程中,也可以仅采用高水位限流方案或者仅采用低水位限流方案,同样可以达到保障MySQL数据库可用性的目的。具体说,可以为高水位限流和低水位限流分别设置一个表示功能开启或者禁用的变量,根据实际应用中的需要设置该变量的值,从而启用或者禁用相关的功能;也可以直接使用本申请所述的第一阈值或者第二阈值实现上述功能开启或者禁用功能,例如,所述第一阈值为0时,表示不进行高水位限流,所述第二阈值为0时,表示不进行低水位限流。
在具体实施中,仅采用高水位限流或者低水位限流,都可以保障数据库的可用性、为上层应用提供稳定服务。请参见附图4,其为采用InnoDB存储引擎、在不同限流方式下QPS(每秒查询率)与活动线程数目的关系曲线图,其中normal mysql-0是InnoDB内部不启用并发控制机制的曲线,normal mysql-1是InnoDB内部启用并发控制机制、并设置最大并发数为32时的曲线,patched mysql则是实施了本申请提供的低水位限流方案的曲线。从图中可以看出,在活动线程数目逐渐增加的情况下,normal mysql-0和normal mysql-1曲线的QPS指标都出现了不同程度的明显下降,而采用本申请技术方案的patched mysql曲线的QPS指标则相对比较平稳。
综上所述,本申请提供的用于对MySQL数据库的并发操作进行控制的方法,在接收数据库操作请求后,通过实时检测表征MySQL数据库负载压力的指标值,并当该数值小于预先设置的第一阈值时,继续处理所述数据库操作请求并交由存储引擎执行,否则结束对所述数据库操作请求的处理。采用上述方法,在MySQL数据库负载压力大的情况下,通过直接结束对所述数据库操作请求的处理,实现了对MySQL数据库负载的精细控制,保证针对每个数据库操作请求的响应时间维持在应用能接受的范围之内,从而提高MySQL数据库整体的可用性。特别是,与本申请提供的低水位限流方案一起使用,能够获得更好的实施效果。
在上述的实施例中,提供了一种用于对MySQL数据库的并发操作进行控制的方法,与之相对应的,本申请还提供一种用于对MySQL数据库的并发操作进行控制的装置。请参看图5,其为本申请的一种用于对MySQL数据库的并发操作进行控制的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于对MySQL数据库的并发操作进行控制的装置,包括:操作请求接收单元501,用于接收针对MySQL数据库的数据库操作请求;负载压力判断单元502,用于判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;操作请求处理单元503,用于当所述负载压力判断单元的输出为“是”时,继续处理所述数据库操作请求并交由存储引擎执行;操作请求结束单元504,用于当所述负载压力判断单元的输出为“否”时,结束对所述数据库操作请求的处理。
可选的,所述装置包括:
并发线程判断单元,用于当所述负载压力判断单元的输出为“是”时,判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
线程等待单元,用于当所述并发线程判断单元的输出为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;
继续处理单元,用于当所述并发线程判断单元的输出为“否”时,触发所述操作请求处理单元工作,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一。
可选的,所述负载压力判断单元具体用于,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
可选的,所述装置包括:
第一限流类型判断单元,用于在判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
跳转控制单元,用于当所述第一限流类型判断单元的输出为“是”时,触发所述负载压力判断单元工作,否则触发并发线程判断单元工作。
可选的,所述装置包括:
第一条件判断单元,用于在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述并发线程判断单元工作,若否,触发所述第一限流类型判断单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
可选的,所述并发线程判断单元除了包含实现其功能的本体子单元外,还包括:
第二条件判断子单元,用于判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述操作请求处理单元工作,否则触发所述本体子单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
可选的,所述装置包括:
等待队列唤醒单元,用于当所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
可选的,所述装置还包括:
等待时间监测单元,用于监测每个线程在所述先进先出队列中的等待时间;
线程终止单元,用于当所述等待时间监测单元监测到某个线程在先进先出队列中的等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
可选的,所述线程等待单元中采用的先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
可选的,所述装置包括:
阈值设置单元,用于在接收数据库操作请求后,判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (20)

1.一种用于对MySQL数据库的并发操作进行控制的方法,其特征在于,包括:
接收针对MySQL数据库的数据库操作请求;
判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
若是,继续处理所述数据库操作请求并交由存储引擎执行;若否,结束对所述数据库操作请求的处理;
其中,当所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由存储引擎执行之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;
当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一;
所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目。
2.根据权利要求1所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值具体是指,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
3.根据权利要求2所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,在所述判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,执行下述操作:
判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
若否,转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行。
4.根据权利要求3所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,所述第一限流类型包括:查询操作。
5.根据权利要求4所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
6.根据权利要求2-5任一所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,所述第二限流类型包括:查询操作、插入操作、更新操作和删除操作。
7.根据权利要求2-5任一所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,在判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设定的第二阈值时,首先执行下述操作:
判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则转到所述继续处理所述数据库操作请求并交由存储引擎执行的步骤执行:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
8.根据权利要求2-5任一所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
9.根据权利要求8所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,还包括:
监测每个线程在所述先进先出队列中的等待时间;
当所述等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
10.根据权利要求8所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,所述先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
11.根据权利要求1所述的用于对MySQL数据库的并发操作进行控制的方法,其特征在于,在所述接收数据库操作请求的步骤后,首先执行下述操作:
判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;
判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
12.一种用于对MySQL数据库的并发操作进行控制的装置,其特征在于,包括:
操作请求接收单元,用于接收针对MySQL数据库的数据库操作请求;
负载压力判断单元,用于判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值;
操作请求处理单元,用于当所述负载压力判断单元的输出为“是”时,继续处理所述数据库操作请求并交由存储引擎执行;其中,当所述判断表征MySQL数据库负载压力的指标值是否小于预先设置的第一阈值的结果为“是”时,在继续处理所述数据库操作请求并交由存储引擎执行之前,执行下述操作:判断所述数据库操作请求的操作类型是否属于预先设置的第二限流类型中的一种、且并发线程数目是否不小于预先设置的第二阈值;当上述两个判断的结果都为“是”时,将对应于所述数据库操作请求的线程分配到先进先出队列中等待;否则,执行继续处理所述数据库操作请求并交由存储引擎执行的步骤,并且当所述数据库操作请求的操作类型属于预先设置的第二限流类型中的一种时,将所述并发线程数目加一;所述并发线程数目是指,其操作类型属于预先设置的第二限流类型中的一种、并且被继续处理并交由存储引擎执行的数据库操作请求对应的线程的数目;
操作请求结束单元,用于当所述负载压力判断单元的输出为“否”时,结束对所述数据库操作请求的处理。
13.根据权利要求12所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,所述负载压力判断单元具体用于,判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值。
14.根据权利要求13所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,包括:
第一限流类型判断单元,用于在判断MySQL数据库的threads_running变量的值是否小于预先设置的第一阈值之前,判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种;
跳转控制单元,用于当所述第一限流类型判断单元的输出为“是”时,触发所述负载压力判断单元工作,否则触发并发线程判断单元工作。
15.根据权利要求14所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,包括:
第一条件判断单元,用于在判断所述数据库操作请求的操作类型是否属于预先设置的第一限流类型中的一种之前,判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述并发线程判断单元工作,若否,触发所述第一限流类型判断单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型是事务提交或者事务回滚中的一种。
16.根据权利要求13-15任一所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,所述并发线程判断单元除了包含实现其功能的本体子单元外,还包括:
第二条件判断子单元,用于判断所述数据库操作请求是否满足下述三个条件中的任意一个,若是,则触发所述操作请求处理单元工作,否则触发所述本体子单元工作:
所述数据库操作请求的发起方具有对数据库操作的超级权限;
所述数据库操作请求涉及操作所属的数据库事务已经启动;
所述数据库操作请求的操作类型为事务提交、事务回滚、或者数据定义语言涉及的数据库操作中的一种。
17.根据权利要求13-15任一所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,包括:
等待队列唤醒单元,用于当所述数据库操作请求经由存储引擎执行完毕后,依次唤醒所述先进先出队列中的等待线程继续处理所述线程对应的数据库操作请求并交由存储引擎执行。
18.根据权利要求17所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,还包括:
等待时间监测单元,用于监测每个线程在所述先进先出队列中的等待时间;
线程终止单元,用于当所述等待时间监测单元监测到某个线程在先进先出队列中的等待时间大于预先设置的等待阈值时,向与该线程对应的数据库操作请求的发起方返回拒绝执行的应答,并终止该线程的运行。
19.根据权利要求17所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,所述线程等待单元中采用的先进先出队列为多个,需要进入等待状态的线程依次被分配到不同的先进先出队列中。
20.根据权利要求12所述的用于对MySQL数据库的并发操作进行控制的装置,其特征在于,包括:
阈值设置单元,用于在接收数据库操作请求后,判断所述预先设置的第一阈值是否为零;若是,将所述预先设置的第一阈值设置为MySQL数据库支持的最大连接数;判断所述预先设置的第一阈值是否小于所述预先设置的第二阈值;若是,将所述预先设置的第一阈值设置为所述预先设置的第二阈值。
CN201410727590.8A 2014-12-03 2014-12-03 用于对MySQL数据库的并发操作进行控制的方法及装置 Active CN105718474B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201910859269.8A CN110781244B (zh) 2014-12-03 2014-12-03 用于对数据库的并发操作进行控制的方法及装置
CN201410727590.8A CN105718474B (zh) 2014-12-03 2014-12-03 用于对MySQL数据库的并发操作进行控制的方法及装置
PCT/CN2015/095832 WO2016086800A1 (zh) 2014-12-03 2015-11-27 用于对MySQL数据库的并发操作进行控制的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410727590.8A CN105718474B (zh) 2014-12-03 2014-12-03 用于对MySQL数据库的并发操作进行控制的方法及装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201910859269.8A Division CN110781244B (zh) 2014-12-03 2014-12-03 用于对数据库的并发操作进行控制的方法及装置

Publications (2)

Publication Number Publication Date
CN105718474A CN105718474A (zh) 2016-06-29
CN105718474B true CN105718474B (zh) 2019-10-18

Family

ID=56091007

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201910859269.8A Active CN110781244B (zh) 2014-12-03 2014-12-03 用于对数据库的并发操作进行控制的方法及装置
CN201410727590.8A Active CN105718474B (zh) 2014-12-03 2014-12-03 用于对MySQL数据库的并发操作进行控制的方法及装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910859269.8A Active CN110781244B (zh) 2014-12-03 2014-12-03 用于对数据库的并发操作进行控制的方法及装置

Country Status (2)

Country Link
CN (2) CN110781244B (zh)
WO (1) WO2016086800A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107528885B (zh) * 2017-07-17 2021-01-26 创新先进技术有限公司 一种业务请求处理方法及装置
CN110147508A (zh) * 2017-10-26 2019-08-20 北京京东尚科信息技术有限公司 一种系统限流的方法和装置
CN109145015B (zh) * 2018-08-02 2022-12-23 北京百度网讯科技有限公司 基于结构化查询语言的数据查询方法、装置和系统
CN110865926A (zh) * 2019-11-20 2020-03-06 珠海格力电器股份有限公司 数据库系统及其控制方法
CN111083063B (zh) * 2019-11-22 2023-04-18 北京云杉信息技术有限公司 一种动态调整下发压力的方法及装置
CN112181948B (zh) * 2020-09-30 2024-02-02 中国工商银行股份有限公司 数据库操作语句的处理方法、装置、电子设备和介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102752387A (zh) * 2012-06-29 2012-10-24 用友软件股份有限公司 数据存储处理系统和数据存储处理方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5991792A (en) * 1998-01-02 1999-11-23 International Business Machines Corporation Method, apparatus and computer program product for dynamically managing a thread pool of reusable threads in a computer system
JP3932965B2 (ja) * 2002-04-22 2007-06-20 日本電気株式会社 マルチスレッドプログラム
EP2096564B1 (en) * 2008-02-29 2018-08-08 Euroclear SA/NV Improvements relating to handling and processing of massive numbers of processing instructions in real time
US9129000B2 (en) * 2010-04-30 2015-09-08 International Business Machines Corporation Method and system for centralized control of database applications
CN102143380A (zh) * 2010-12-31 2011-08-03 华为技术有限公司 内容传送网络内容提供的控制方法、装置和系统
CN103810203B (zh) * 2012-11-13 2018-02-27 深圳市腾讯计算机系统有限公司 一种数据库管理系统连接复用方法及装置
CN103853986B (zh) * 2014-01-03 2017-02-15 李凤华 一种访问控制方法和装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102752387A (zh) * 2012-06-29 2012-10-24 用友软件股份有限公司 数据存储处理系统和数据存储处理方法

Also Published As

Publication number Publication date
CN105718474A (zh) 2016-06-29
WO2016086800A1 (zh) 2016-06-09
CN110781244B (zh) 2023-06-13
CN110781244A (zh) 2020-02-11

Similar Documents

Publication Publication Date Title
CN105718474B (zh) 用于对MySQL数据库的并发操作进行控制的方法及装置
US11630832B2 (en) Dynamic admission control for database requests
JP6423518B2 (ja) マルチプロセッサシステムのための指向性イベントシグナリング
CN109828833B (zh) 一种神经网络训练任务的排队系统及其方法
CN107329814B (zh) 一种基于rdma的分布式内存数据库查询引擎系统
US9495411B2 (en) Increased parallelism performance of batch requests
US9747334B2 (en) Managing excess capacity of database systems in a capacity controlled computing environment
US9128895B2 (en) Intelligent flood control management
JP5744707B2 (ja) メモリ使用量照会ガバナのためのコンピュータ実装方法、コンピュータ・プログラム、およびシステム(メモリ使用量照会ガバナ)
US9996404B2 (en) Message cache management for message queues
CN104272256B (zh) 任务处理装置
US8825959B1 (en) Method and apparatus for using data access time prediction for improving data buffering policies
US10080233B2 (en) Method for providing M2M data
CN104536724A (zh) 一种多核环境下哈希表并发访问性能优化方法
US9747323B1 (en) Method for reconstruction of a distributed lock state after a node addition or removal using a consistent hash
CN107111349A (zh) 用于片上多核系统的驱动基于访问的资源的低功耗控制和管理
CN104376096B (zh) 基于缓冲区的异步更新的方法
CN102629220A (zh) 一种动态任务分配管理方法
US8055806B2 (en) Autonomic threading model switch based on input/output request type
US8510273B2 (en) System, method, and computer-readable medium to facilitate application of arrival rate qualifications to missed throughput server level goals
CN115237885A (zh) 数据存储系统的参数调整方法及装置
CN104765572B (zh) 一种节能的虚拟存储服务器系统及其调度方法
CN111290858B (zh) 输入输出资源管理方法、装置、计算机设备和存储介质
WO2016078388A1 (zh) 一种数据老化方法及装置
WO2023066070A1 (zh) 一种sql语句的控制方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant