CN111752901A - 索引创建方法及装置、电子设备、存储介质 - Google Patents
索引创建方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN111752901A CN111752901A CN202010582356.6A CN202010582356A CN111752901A CN 111752901 A CN111752901 A CN 111752901A CN 202010582356 A CN202010582356 A CN 202010582356A CN 111752901 A CN111752901 A CN 111752901A
- Authority
- CN
- China
- Prior art keywords
- database index
- statement
- index creation
- log information
- creation statement
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 90
- 238000003860 storage Methods 0.000 title claims abstract description 25
- 230000006870 function Effects 0.000 claims description 72
- 238000012545 processing Methods 0.000 claims description 31
- 238000004590 computer program Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 8
- 230000000903 blocking effect Effects 0.000 description 7
- 238000012360 testing method Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000010076 replication Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开实施例提供了一种索引创建方法及装置、电子设备、存储介质,涉及数据库技术领域。该方法包括:获取数据库索引创建语句,将数据库索引创建语句写入第一系统表中;将数据库索引创建语句写入第一日志文件中,并将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息;从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。本公开可以缩短主库和从库整体完成索引创建的时间。
Description
技术领域
本公开实施例涉及数据库技术领域,更具体地,涉及一种索引创建方法、索引创建装置、电子设备及计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
MySQL数据库是目前比较流行的开源数据库,已经获得了广泛的应用。数据库管理员在日常运维中,可以进行必要的DDL(Data DefinitionLanguage,数据定义语言)操作,例如给表新增一个列、修改列的属性、给某个/些列添加索引等。
目前,数据库管理员可以通过MySQL原生支持的在线DDL命令进行DDL操作。然而,该方法在创建索引时存在的从库复制阻塞,以及主库和从库整体完成索引创建时花费时间较长的问题。
发明内容
本公开的目的在于提供一种索引创建方法、索引创建装置、电子设备及计算机可读存储介质,从而至少在一定程度上克服由于相关技术的缺陷和限制而导致的从库复制阻塞以及主库和从库整体完成索引创建时花费时间较长等问题。
根据本公开的第一方面,提供一种索引创建方法,包括:
获取数据库索引创建语句,将所述数据库索引创建语句写入第一系统表中;
将所述数据库索引创建语句写入第一日志文件中,并将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至从库,以使所述从库回放所述日志信息;
从所述第一系统表中读取所述数据库索引创建语句,并执行所述数据库索引创建语句。
可选地,在所述执行所述数据库索引创建语句之后,所述方法还包括:
在所述数据库索引创建语句执行失败时,返回所述执行所述数据库索引创建语句的步骤,直至所述数据库索引创建语句执行成功。
可选地,在所述执行所述数据库索引创建语句之后,所述方法还包括:
在所述数据库索引创建语句执行成功之后,不将所述数据库索引创建语句写入所述第一日志文件中。
可选地,在所述获取数据库索引创建语句之后,所述方法还包括:
在第一异步功能开启时,执行所述将所述数据库索引创建语句写入第一系统表中的步骤;
在所述第一异步功能关闭时,执行所述数据库索引创建语句,并在所述数据库索引创建语句执行成功之后,将所述数据库索引创建语句写入所述第一日志文件中;
将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至所述从库,以使所述从库回放所述日志信息。
可选地,所述第一异步功能开启或关闭的确定方法,包括:
通过第一工作线程读取全局变量,在所述全局变量的值为第一参数值时,确定所述第一异步功能开启;
在所述全局变量的值为第二参数值时,确定所述第一异步功能关闭。
可选地,所述从所述第一系统表中读取所述数据库索引创建语句,包括:
通过所述第一工作线程从所述第一系统表中读取所述数据库索引创建语句。
可选地,所述从库回放所述日志信息,包括:
在第二异步功能开启时,将所述日志信息写入第二系统表中,从所述第二系统表中读取所述日志信息,并回放所述日志信息;其中,所述第二系统表不存储所述从库接收到的其他日志信息;
在所述第二异步功能关闭时,将所述日志信息写入第二日志文件中,从所述第二日志文件中读取所述日志信息,并回放所述日志信息;其中,所述第二日志文件用于存储所述从库接收到的所有日志信息。
可选地,所述索引创建方法还包括:
在所述第二异步功能开启时,在回放所述日志信息的同时,回放所述第二日志文件中存储的所述其他日志信息;
在所述第二异步功能关闭时,在所述日志信息回放成功之后,回放所述第二日志文件中存储的下一个日志信息。
可选地,所述第二异步功能开启或关闭的确定方法包括:
通过第二工作线程读取全局变量,在所述全局变量的值为第一参数值时,确定所述第二异步功能开启;
在所述全局变量的值为第二参数值时,确定所述第二异步功能关闭。
可选地,所述从所述第二系统表中读取所述日志信息,包括:
通过所述第二工作线程从所述第二系统表中读取所述日志信息。
可选地,所述索引创建方法还包括:
在将所述数据库索引创建语句写入第一系统表中时,将所述数据库索引创建语句对应的任务状态设置为待处理状态;
在执行所述数据库索引创建语句之前,将所述数据库索引创建语句对应的任务状态由所述待处理状态更新为处理中状态;
在所述数据库索引创建语句执行失败时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已失败状态;
在所述数据库索引创建语句执行成功时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已成功状态。
可选地,在将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已失败状态之后,在返回所述执行所述数据库索引创建语句的步骤之前,所述方法还包括:
将所述数据库索引创建语句对应的任务状态由所述已失败状态更新为所述处理中状态。
根据本公开的第二方面,提供一种索引创建装置,包括:
写入第一系统表模块,被配置为执行获取数据库索引创建语句,将所述数据库索引创建语句写入第一系统表中;
语句发送模块,被配置为执行将所述数据库索引创建语句写入第一日志文件中,并将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至从库,以使所述从库回放所述日志信息;
语句执行模块,被配置为执行从所述第一系统表中读取所述数据库索引创建语句,并执行所述数据库索引创建语句。
可选地,本公开实施例的索引创建装置,还包括:
执行失败模块,被配置为执行在所述数据库索引创建语句执行失败时,通过所述语句执行模块执行所述数据库索引创建语句的步骤,直至所述数据库索引创建语句执行成功。
可选地,本公开实施例的索引创建装置,还包括:
未写入模块,被配置为执行在所述数据库索引创建语句执行成功之后,不将所述数据库索引创建语句写入所述第一日志文件中。
可选地,所述写入第一系统表模块,具体被配置为执行在第一异步功能开启时,执行所述将所述数据库索引创建语句写入第一系统表中的步骤;
本公开实施例的索引创建装置,还包括:
语句执行及写入模块,被配置为执行在所述第一异步功能关闭时,执行所述数据库索引创建语句,并在所述数据库索引创建语句执行成功之后,将所述数据库索引创建语句写入所述第一日志文件中;
日志信息发送模块,被配置为执行将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至所述从库,以使所述从库回放所述日志信息。
可选地,本公开实施例的索引创建装置,还包括:
确定第一异步功能开启模块,被配置为执行通过第一工作线程读取全局变量,在所述全局变量的值为第一参数值时,确定所述第一异步功能开启;
确定第一异步功能关闭模块,被配置为执行在所述全局变量的值为第二参数值时,确定所述第一异步功能关闭。
可选地,所述语句执行模块,包括:
语句读取单元,被配置为执行通过所述第一工作线程从所述第一系统表中读取所述数据库索引创建语句。
可选地,本公开实施例的索引创建装置,还包括:从库回放模块;
所述从库回放模块包括:
写入第二系统表单元,被配置为执行在第二异步功能开启时,将所述日志信息写入第二系统表中;其中,所述第二系统表不存储所述从库接收到的其他日志信息;
第一回放单元,被配置为执行从所述第二系统表中读取所述日志信息,并回放所述日志信息;
写入第二日志文件单元,被配置为执行在所述第二异步功能关闭时,将所述日志信息写入第二日志文件中;
第二回放单元,被配置为执行从所述第二日志文件中读取所述日志信息,并回放所述日志信息;其中,所述第二日志文件用于存储所述从库接收到的所有日志信息。
可选地,所述从库回放模块,还包括:
异步回放单元,被配置为执行在所述第二异步功能开启时,在回放所述日志信息的同时,回放所述第二日志文件中存储的所述其他日志信息;
同步回放单元,被配置为执行在所述第二异步功能关闭时,在所述日志信息回放成功之后,回放所述第二日志文件中存储的下一个日志信息。
可选地,本公开实施例的索引创建装置,还包括:
确定第二异步功能开启模块,被配置为执行通过第二工作线程读取全局变量,在所述全局变量的值为第一参数值时,确定所述第二异步功能开启;
确定第二异步功能关闭模块,被配置为执行在所述全局变量的值为第二参数值时,确定所述第二异步功能关闭。
可选地,所述第一回放单元,被配置为执行通过所述第二工作线程从所述第二系统表中读取所述日志信息。
可选地,本公开实施例的索引创建装置,还包括:
待处理状态设置模块,被配置为执行在将所述数据库索引创建语句写入第一系统表中时,将所述数据库索引创建语句对应的任务状态设置为待处理状态;
处理中状态第一更新模块,被配置为执行在执行所述数据库索引创建语句之前,将所述数据库索引创建语句对应的任务状态由所述待处理状态更新为处理中状态;
已失败状态更新模块,被配置为执行在所述数据库索引创建语句执行失败时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已失败状态;
已成功状态更新模块,被配置为执行在所述数据库索引创建语句执行成功时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已成功状态。
可选地,本公开实施例的索引创建装置,还包括:
处理中状态第二更新模块,被配置为执行将所述数据库索引创建语句对应的任务状态由所述已失败状态更新为所述处理中状态。
根据本公开的第三方面,提供一种电子设备,包括:处理器和存储器,所述存储器存储有可执行指令,所述处理器用于调用所述存储器存储的可执行指令执行上述索引创建方法。
根据本公开的第四方面,提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现上述索引创建方法。
在本公开提供的技术方案中,通过在主库上将数据库索引创建语句分别写入第一系统表和第一日志文件中,主库可以从第一系统表中获取并执行数据库索引创建语句,从库可以根据日志信息进行回放。这样,可以使主库和从库同时执行创建索引的操作,缩短了主库和从库完成创建索引操作的整体时间跨度,提高了MySQL实例的服务可靠性。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示出了通过pt-osc执行DDL操作的流程示意图;
图2示出了通过gh-ost执行DDL操作的示意图;
图3示出了相关技术中主库和从库执行DDL操作和DML操作的示意图;
图4示出了应用本公开示例性实施方式的系统架构示意图;
图5示出了本公开实施例中主库和从库执行DDL操作和DML操作的示意图;
图6示出了本公开实施例中索引创建方法的一种流程图;
图7示出了本公开实施例中索引创建方法的又一种流程图;
图8示出了本公开实施例中任务执行过程的一种流程图;
图9示出了本公开实施例中索引创建装置的结构示意图;
图10示出了本公开实施例中电子设备的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
本公开中涉及的技术术语解释如下:
DDL,指在数据库系统中使用create、alter和drop等命令进行表、索引和用户等对象的创建、修改和删除操作,本申请中主要指的是索引创建操作。
DML(Data Manipulation Language,数据操作语句),指在数据库系统中使用insert、update和delete等命令对表中记录/行进行创建、修改和删除操作。
在线DDL:指MySQL原生支持的在线DDL,操作简单、性能较好。
此外,本公开中涉及的相关元素数量仅用于示例而非限制,以及相关元素的命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
在本公开的相关技术中,可以通过第三方工具和MySQL原生支持的在线DDL执行DDL操作。其中,第三方工具包括:pt-osc(全称pt-在线-schema-change)和gh-ost等。pt-osc和gh-ost均采用拷表方式实现,即创建一个空的新表,通过select和insert将旧表中的记录逐次读取并插入到新表中,不同之处在于处理DDL期间业务对表的DML操作(增删改)。
1)pt-osc是Percona运维工具包中提供的表结构变更工具,其执行过程可参见图1,包括以下步骤:
S110,创建一张表结构与旧表相同的新表。
S120,修改新表。
S130,在原表上创建INSERT、UPDATE、DELETE三种类型的触发器。
S140,将旧表的数据拷贝到新表中,同时通过触发器将就表中的操作映射到新表。
S150,如果原表有外键约束,处理外键。
S160,将原表重命名为旧表,新表重命名为原表。
S170,删除旧表。
根据上述步骤可知,采用触发器来应用DDL执行期间对表所做的DML操作,每种DML操作均对应一个触发器,将delete变为delete ignore、update和insert均转换为replaceinto。pt-osc同时处理全量和增量数据,即一边拷表一边回放增量DML。
根据pt-osc上述实现,可以发现其存在的使用约束至少包括:
1.需要该表存在主键:因为进行每个select+insert事务拆分时用到了‘FORCEINDEX(PRIMARY)’;
2.需要确保表上没有触发器,否则会导致触发器冲突;
3.在使用过程中,会出现因存在触发器导致与业务事务冲突死锁的问题。
2)gh-ost是github针对pt-osc用触发器带来的问题而重新设计的一款较新的表结构变更工具。其使用binlog(二进制日志文件)+回放线程来替换掉触发器。下面以读取从库binlog模式为例做流程说明:
参见图2,图2示出了通过gh-ost执行DDL操作的示意图。其中,gh-ost先连接到主库上,根据alter语句创建所需的新表。之后作为一个“备库”连接到真正的备库上,在主库上拷贝已有的数据到新表的同时,从备库上拉取增量数据的binlog。然后不断的把binlog应用回主库。最后,锁住主库的源表,等待binlog应用完毕,然后替换gh-ost表为源表。
由于使用单线程回放binlog来替换触发器,所以增量DML回放效率不如触发器,因为pt-osc的增量回放并发度是与业务DML并发度相同的,是多线程的。因此,从实现层面,gh-ost对业务负载敏感度会远高于pt-osc。
3)在线DDL是MySQL官方原生的表结构修改工具。在线DDL在MySQL 5.6才开始支持的,在5.5及之前版本,使用alter table/create index等命令进行表结构修改操作均会锁表,这在生产环境上是不可接受的。在MySQL 5.7,在线DDL在性能和稳定性上不断得到优化,比如通过bulk load方式来去除表重建时的redo日志等。在MySQL 8.0,在线DDL已经支持秒级加列特性。
其中,在线DDL可以分为3个阶段:
1.初始化阶段,确定DDL操作支持的最优LOCK和ALGORITHM设置,并与用户指定的设置相比,若无法做到则报错。
2.执行阶段,如果需要拷表或修改引擎层数据,则该阶段是最耗时的阶段。
3.提交阶段,该阶段会加锁进行新旧表切换。
与pt-osc/gh-ost不同,在线DDL的执行阶段可以分为前后2个步骤,首先是拷贝全量数据,然后才回放增量DML日志。在全量拷贝期间,增量DML日志被保存在日志文件中,由参数innodb__alter_log_max_size确定文件最大阈值,若积累的DML日志超过该阈值,则DDL操作返回失败。
在线DDL也是采用单线程回放DML日志,因此对负载也比较敏感,而且由于拷贝和增量回放是先后进行的,负载高时对性能影响会更加明显。但DML日志回放行为是在引擎层进行的,因此在效率上会更高。
通过SysBench来模拟有负载和无负载的场景,测试基于上述三种方法加索引所花费的时间(单位为秒),测试数据量为1000万条,测试结果可参见表1。其中,SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
表1
pt-osc | gh-ost | 在线DDL | |
无负载 | 275 | 294 | 29 |
有负载 | 491 | 564 | 53 |
可见,综合考虑有无负载的情况,在线DDL的性能均大大优于2种第三方工具。进一步对比在这2种工具,可以看到pt-osc在性能和高负载情况下的稳定性均好于gh-ost。
与第三方工具相比,在线DDL包括以下优点:
1.性能有显著优势,且对业务负载影响小,停写时间可控;
2.操作简单,直接执行alter table或类似命令即可,无需安装第三方工具和依赖包;
3.所需存储空间少,pt-osc/gh-ost均需要创建新表并拷贝数据,因此需要有不小于表大小的空闲存储空间。但对于加列和加索引等支持Inplace算法的在线DDL,无需拷表,空间大大节省;
4.不会产生大量binlog,pt-osc/gh-ost拷表时会产生大量binlog文件,这即增大了最多表空间大小一倍的存储空间,而且也容易造成复制延迟,降低了从库的可读性,放大了服务不可用风险。
然而,在线DDL也会导致复制阻塞。具体如下:
参见图3,主库上DDL和DML可以并发执行,在组提交阶段依次写入到binlog文件中,这些binlog传到从库上,由并行复制的worker线程回放。由于并行复制是以group(组)为单位进行回放的,DDL作为单独一个group,只有执行完才能进行下一个group回放,这意味在主库上与DDL差不多时间提交但binlog写在DDL之后的那些DML,其复制延迟会大于DDL的执行时间。其中,组提交是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。
例如,一个DDL操作在主库上执行了5小时,在主库上执行时,虽然执行该DDL的session(会话)一直阻塞,但不影响其他session执行DML操作,即主库中的业务正常操作。可在从库回放时,由于DDL单独一个group,就会导致该group之后的DML都一起被阻塞5小时。也就是说复制延迟至少是5小时。显然,如果从库上有业务查询,那么相比当前数据有5小时延迟,用户体验较差。
基于以上问题,本公开提出了一种索引创建方法。该方法首先可以将该索引创建语句进行注册,即写入第一系统表中,并将该索引创建语句写入binlog文件中,并交由MySQL后台工作线程异步执行。这样,索引创建语句对应的binlog可以迅速传递到从库进行回放,避免从库复制阻塞的问题。在没有主从复制延迟的情况下,主库和从库基本上可以同时完成索引的创建,从而可以缩短主库和从库整体完成创建索引的时间跨度,提高了MySQL实例的服务可靠性。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
应用场景总览
需要注意的是,下述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
图4示出了应用本公开示例性实施方式的系统架构示意图。如图4所示,系统架构400可以包括客户端410、网络420和服务端430。客户端410可以包括智能手机、平板电脑、笔记本电脑、台式电脑等各种终端设备。服务端430可以包括网络服务器、应用服务器、数据库服务器等各种服务器设备,服务端430可以为客户端410提供网络资源和数据服务。网络420可以是能够在客户端410和服务端430之间提供通信链路的各种连接类型的通信介质,例如可以是有线通信链路、无线通信链路或者光纤电缆等等。
根据实现需要,应用本公开示例性实施方式的系统架构可以具有任意数目的客户端、网络和服务端。例如,服务端430可以是由多个服务器设备组成的服务器群组。本公开示例性实施方式提供的索引创建方法可以应用于客户端410,也可以应用于服务端430,本公开对此不做特殊限定。
例如,当本公开示例性实施方式提供的索引创建方法应用于服务端430时,客户端410可以通过网络420向服务端430发送数据库索引创建语句,然后由服务端430执行数据库索引创建语句,最后再通过网络420将索引创建结果返回给客户端410。
图5示出了本公开实施例中创建索引的一种示意图。如图5所示,首先将索引创建语句写入第一系统表中,并将该索引创建语句写入日志文件中。主库从第一系统表中获取任务并执行该任务,从库根据从主库接收的日志信息进行回放,可以看出,主库和从库执行该任务的过程可以是并行的,因此,可以有效降低主库和从库完成索引创建的时间差。
示例性方法
下面结合上述的应用场景,参考6至图7来描述根据本公开示例性实施方式的索引创建方法。
图6示出了本公开实施例中索引创建方法的一种流程图,如图6所示,该索引创建方法可以包括以下步骤:
步骤S610,获取数据库索引创建语句,将数据库索引创建语句写入第一系统表中。
步骤S620,将数据库索引创建语句写入第一日志文件中,并将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息。
步骤S630,从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。
本公开实施例的索引创建方法,通过在主库上将数据库索引创建语句分别写入第一系统表和第一日志文件中,主库可以从第一系统表中获取并执行数据库索引创建语句,从库可以根据日志信息进行回放。这样,可以使主库和从库同时执行创建索引的操作,缩短了主库和从库完成创建索引操作的整体时间跨度,提高了MySQL实例的服务可靠性。
图7示出了本公开实施例中索引创建方法的又一种流程图,如图7所示,该索引创建方法可以包括以下步骤:
步骤S710,获取数据库索引创建语句。
本公开实施例中,数据库索引创建语句可以是数据库管理员在创建索引时生成的DDL语句。数据库索引创建语句可以包括:alter table add index.../create index...等,...表示索引名称。
步骤S720,判断第一异步功能是否开启,在第一异步功能开启时,执行步骤S730;在第一异步功能关闭时,执行步骤S750。
本公开实施例中,用户可以选择采用默认方式或异步方式创建索引。默认方式即现有技术中创建索引的方式,异步方式即本公开实施例中创建索引的方式。例如,可以通过修改数据库索引创建语句、新增异步关键字或新增全局变量online_ddl_async_index_creating来实现第一异步功能的开启或关闭。
其中,通过新增全局变量可以更好的兼容不同版本的数据库。具体的,可以通过第一工作线程读取全局变量,在全局变量的值为第一参数值时,确定第一异步功能开启;在全局变量的值为第二参数值时,确定第一异步功能关闭。其中,第一参数值和第二参数值分别用于表示开启或关闭,可以分别为on和off,或者分别为1和0等,在此不做限定。第一工作线程可以是在主库中创建的一个独立的线程,用于执行数据库索引创建语句。
相应地,在第一异步功能开启时,走异步流程。在第一异步功能关闭时,则采用默认的阻塞式回放方式。
下面参考图5中主库对DDL操作和DML操作的示意图,对下述步骤S730至步骤S740中主要的操作过程进行说明。
步骤S730,将数据库索引创建语句分别写入第一系统表和第一日志文件中,并将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息。
本公开实施例中,在获取数据库索引创建语句后,可以对数据库索引创建语句进行词法解析、语法解析,并进行必要的预检查,之后将数据库索引创建语句写入第一系统表和第一日志文件中。其中,预检查包括但不限于对应数据库、表和字段是否存在,是否存在同名的索引,是否存在待创建的同名索引,是否满足创建索引的规范性约束等。
在数据库技术中,第一日志文件可以记录数据库操作的所有日志信息,包括:索引创建语句的日志信息、索引修改语句的日志信息、表创建语句的日志信息等等。而第一系统表不同于第一日志文件,该第一系统表中可以记录索引创建任务的任务信息,而不用不记录其他任务的任务信息。索引创建任务的任务信息包括:发起创建索引操作的用户、发起时间、数据库名、表名、数据库索引创建语句和任务状态等。
参考图5所示,主库的工作负载包括:DML操作和DDL操作,DML操作包括:Delete和Update,DDL操作包括:创建索引。主库中全局变量online_ddl_async_index_creating=on,也就是全局变量online_ddl_async_index_creating开启,此时,可以将数据库索引创建语句写入第一系统表中,并且第一系统表中只记录数据库索引创建语句,而日志文件中不仅包括数据库索引创建语句,还包括Delete和Update,也就是日志文件包含所有的日志信息。
在默认方式中,由于执行数据库索引创建语句通常需要花费较长时间,在完成时才记录第一日志文件,并交由从库回放。那么主库和从库完成该数据库索引创建语句的时间差至少为该数据库索引创建语句完整的执行时间。
本公开在执行数据库索引创建语句之前,即可将该数据库索引创建语句写入第一日志文件中,此时,该执行操作的返回并不代表索引已经创建成功。之后,将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息。这样,可以避免从库复制延迟,主库和从库基本可以同时完成索引的创建。
步骤S740,从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。
本公开实施例中,主库可以直接从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。参考图5所示,主库通过第一工作线程执行数据库索引创建语句的过程,和主库向从库发送日志信息的过程是两个并行的过程。因此,本步骤的执行过程和上述步骤S730中从库回放的过程可以是并行的。
具体的,可以通过第一工作线程从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。在数据库索引创建语句执行失败时,可以返回执行数据库索引创建语句的步骤,直至数据库索引创建语句执行成功。
如前所述,第一系统表中可以记录数据库索引创建语句的任务状态。那么在不同阶段,其对应的任务状态是不同的。在本公开的一种实现方式中,在将数据库索引创建语句写入第一系统表中时,可以将数据库索引创建语句对应的任务状态设置为待处理状态;在执行数据库索引创建语句之前,可以将数据库索引创建语句对应的任务状态由待处理状态更新为处理中状态;在数据库索引创建语句执行失败时,可以将数据库索引创建语句对应的任务状态由处理中状态更新为已失败状态;在数据库索引创建语句执行成功时,可以将数据库索引创建语句对应的任务状态由处理中状态更新为已成功状态。
以下结合不同的任务状态对数据库索引创建语句的执行过程进行详细的介绍。
需要说明的是,第一系统表中可以记录多个不同的数据库索引创建语句。在主库执行过程中,可能存在宕机等异常情况,因此,在每次执行之前,第一工作线程可以先进行初始化。在初始化阶段,第一工作线程可以读取第一系统表中各任务的任务状态,读取任务状态为处理中状态的任务,如果确认该任务已经完成,可以将该任务对应的任务状态更新为已成功状态。
在任务执行阶段,可以读取系统表中是否存在任务状态为待处理状态、处理中状态或已失败状态的任务,如果不存在,可以通过轮询的方式重新执行该步骤。在存在任务状态为待处理状态、处理中状态或已失败状态的任务时,由于每个任务的执行过程相同,在此以一个任务为例进行说明。参见图8,可以包括以下步骤:
步骤S810,第一工作线程可以读取第一系统表中该数据库索引创建语句的任务状态为待处理状态、处理中状态或已失败状态。
步骤S820,在执行之前,将其对应的任务状态更新为处理中状态。
步骤S830,执行该数据库索引创建语句。
步骤S840,判断该数据库索引创建语句是否执行成功。在执行成功时,执行步骤S850,在执行失败时,执行步骤S860。
步骤S850,将其对应的任务状态更新为已成功状态。
步骤S860,将其对应的任务状态更新为已失败状态,返回步骤S820。
根据图8中的处理过程,在执行失败时,通过循环可以使每个任务均执行成功。
需要说明的是,由于数据库索引创建语句已经写入第一日志文件中,在数据库索引创建语句执行成功之后,不再将数据库索引创建语句写入第一日志文件中。否则会导致主从复制混乱,也会造成从库版本兼容性出现问题。具体的,可以将sql_log_bin参数设置为off,这样,在数据库索引创建语句执行完之后,不再记录日志信息。
步骤S750,执行数据库索引创建语句,并在数据库索引创建语句执行成功之后,将数据库索引创建语句写入第一日志文件中。
步骤S760,将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息。
上述步骤S750~步骤S760即为第一异步功能关闭时,现有技术中的执行方式。即,先执行数据库索引创建语句,并在执行成功之后,将数据库索引创建语句写入第一日志文件中。将对应的日志信息发送至从库,并在从库回放日志信息。可以看出,从库开始回放的时间与主库开始执行的时间相差数据库索引创建语句的整个执行时间。并且,通常该执行时间较长,从而导致从库复制阻塞。
以下对从库的回放过程进行详细介绍。
与主库的执行过程类似,从库也可以选择采用默认方式回放,或者选择异步方式回放。即使主库采用默认方式,从库也可以采用默认方式或异步方式回放。与第一异步功能类似,也可以通过修改数据库索引创建语句、新增异步关键字或新增全局变量来实现第二异步功能的开启或关闭。
其中,可以通过相同的全局变量来实现第一异步功能和第二异步功能的开启或关闭。例如,主库中的第一工作线程可以对该全局变量进行读写操作,从库中的第二工作线程也可以对该全局变量进行读写操作。也就是,第一异步功能和第二异步功能可以是相同的状态,也可以是不同的状态。
具体的,第二异步功能开启或关闭的确定方法可以包括:通过第二工作线程读取全局变量,在全局变量的值为第一参数值时,确定第二异步功能开启;在全局变量的值为第二参数值时,确定第二异步功能关闭。
下面参考图5中从库对DDL操作和DML操作的示意图,对从库的回放过程进行说明。
参考图5所示,从库中全局变量online_ddl_async_index_creating开启,即第二异步功能开启。在第二异步功能开启时,将数据库索引创建语句的日志信息写入第二系统表中,从第二系统表中读取日志信息,并回放日志信息;其中,第二系统表用于存储数据库索引创建语句的日志信息,不存储从库接收到的其他日志信息,例如,删除索引的日志信息等。
第二日志文件用于存储从库接收到的其他日志信息。即,数据库索引创建语句的日志信息可以存储在第二系统表中,除数据库索引创建语句之外的其他语句的日志信息可以存储在第二日志文件中。
参考图5所示,创建索引的任务和Delete、Update在不同的应用组中。这样,可以通过第二工作线程从第二系统表中读取日志信息,并回放日志信息。并且,在回放数据库索引创建语句的日志信息的同时,可以回放第二日志文件中存储的其他日志信息。可见,两者之间是通过异步的方式进行回放的。因此,从库在回放数据库索引创建语句的日志信息时,并不会阻塞其他事务的回放。
在第二异步功能关闭时,将日志信息写入第二日志文件中,从第二日志文件中读取日志信息,并回放日志信息;其中,第二日志文件用于存储从库接收到的所有日志信息。由于第二日志文件中存储所有的日志信息,因此,第二日志文件中的日志信息可以以同步的方式进行回放,即只有在当前日志信息回放成功之后,才可以回放下一条日志信息。例如,在数据库索引创建语句的日志信息回放成功之后,回放第二日志文件中存储的下一个日志信息。
本公开实施例中,还可以终止异步执行的任务。例如,可以通过killquery方式异常终止正在执行的索引创建任务,即第一工作线程中正在执行的数据库索引创建语句。
另外,在主库宕机或网络分区的情况下,可以对主库和从库进行切换处理。即使存在正在进行异步创建索引的操作或其他未执行的操作,也不会产生影响。
在mysqld进程崩溃重启后,第一系统表和第二系统表可以是InnoDB表,这样,可以确保数据不丢失。其中,InnoDB是MySQL的数据库引擎之一,现为MySQL的默认存储引擎。
本公开实施例中,对于备份的数据副本,通过restore操作恢复后,只需确认和更正处于处理中状态的任务即可。对于待处理状态的任务,可以逐个执行。
若将当前数据库版本切换为其他版本,只要确保第一系统表和第二系统表中没有未执行的任务即可。在版本升级时,如果升级后的版本不支持异步创建功能,同样地,确保第一系统表和第二系统表中没有未执行的任务即可。如果新版本支持,则可以无缝升级。
本公开实施例的索引创建方法,通过在主库上采用先写binlog再在后台执行的方式,可以让MySQL主从库同时执行创建索引的操作,从而缩短了主从库完成创建索引操作的整体时间跨度,提高了MySQL实例的服务可靠性。通过第二工作线程异步回放来避免MySQL从库回放加索引操作时阻塞其他事务回放,消除DDL导致复制延迟的问题。本公开解决了MySQL原生加索引操作存在的严重缺陷,使其能够在生产环境大规模使用,相比当前广泛使用的第三方工具pt-osc、gh-ost,可以达到如下有益效果:
1)提高了DDL性能,且对业务负载影响小,停写时间可控。
2)操作简单,直接执行alter table或类似命令即可,无需安装第三方工具和依赖包。
3)所需存储空间少,pt-osc/gh-ost均需要创建新表并拷贝数据,需预留不小于表大小的空闲存储空间。原生加索引操作无需拷表,空间大大节省。
4)不会产生大量binlog,pt-osc/gh-ost拷表时会产生大量binlog文件,不仅增大了最多表空间大小一倍的存储空间,而且也容易造成复制延迟,降低了从库的可读性,放大了服务不可用的风险。
示例性装置
在介绍了本公开示例性实施方式的方法之后,接下来,参考图9对本公开示例性实施方式的索引创建装置进行说明。
图9示出了本公开实施例中索引创建装置的结构示意图。如图9所示,索引创建装置900主要可以包括:
写入第一系统表模块910,被配置为执行获取数据库索引创建语句,将数据库索引创建语句写入第一系统表中;
语句发送模块920,被配置为执行将数据库索引创建语句写入第一日志文件中,并将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息;
语句执行模块930,被配置为执行从第一系统表中读取数据库索引创建语句,并执行数据库索引创建语句。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
执行失败模块,被配置为执行在数据库索引创建语句执行失败时,通过语句执行模块执行数据库索引创建语句的步骤,直至数据库索引创建语句执行成功。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
未写入模块,被配置为执行在数据库索引创建语句执行成功之后,不将数据库索引创建语句写入第一日志文件中。
在本公开的一种示例性实施例中,写入第一系统表模块,具体被配置为执行在第一异步功能开启时,执行将数据库索引创建语句写入第一系统表中的步骤;
上述索引创建装置,还包括:
语句执行及写入模块,被配置为执行在第一异步功能关闭时,执行数据库索引创建语句,并在数据库索引创建语句执行成功之后,将数据库索引创建语句写入第一日志文件中;
日志信息发送模块,被配置为执行将第一日志文件中数据库索引创建语句对应的日志信息发送至从库,以使从库回放日志信息。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
确定第一异步功能开启模块,被配置为执行通过第一工作线程读取全局变量,在全局变量的值为第一参数值时,确定第一异步功能开启;
确定第一异步功能关闭模块,被配置为执行在全局变量的值为第二参数值时,确定第一异步功能关闭。
在本公开的一种示例性实施例中,语句执行模块包括:
语句读取单元,被配置为执行通过第一工作线程从第一系统表中读取数据库索引创建语句。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:从库回放模块;
从库回放模块包括:
写入第二系统表单元,被配置为执行在第二异步功能开启时,将日志信息写入第二系统表中;其中,第二系统表不存储从库接收到的其他日志信息;
第一回放单元,被配置为执行从第二系统表中读取日志信息,并回放日志信息;
写入第二日志文件单元,被配置为执行在第二异步功能关闭时,将日志信息写入第二日志文件中;
第二回放单元,被配置为执行从第二日志文件中读取日志信息,并回放日志信息;其中,第二日志文件用于存储从库接收到的所有日志信息。
在本公开的一种示例性实施例中,从库回放模块还包括:
异步回放单元,被配置为执行在第二异步功能开启时,在回放日志信息的同时,回放第二日志文件中存储的其他日志信息;
同步回放单元,被配置为执行在第二异步功能关闭时,在日志信息回放成功之后,回放第二日志文件中存储的下一个日志信息。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
确定第二异步功能开启模块,被配置为执行通过第二工作线程读取全局变量,在全局变量的值为第一参数值时,确定第二异步功能开启;
确定第二异步功能关闭模块,被配置为执行在全局变量的值为第二参数值时,确定第二异步功能关闭。
在本公开的一种示例性实施例中,第一回放单元,被配置为执行通过第二工作线程从第二系统表中读取日志信息。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
待处理状态设置模块,被配置为执行在将数据库索引创建语句写入第一系统表中时,将数据库索引创建语句对应的任务状态设置为待处理状态;
处理中状态第一更新模块,被配置为执行在执行数据库索引创建语句之前,将数据库索引创建语句对应的任务状态由待处理状态更新为处理中状态;
已失败状态更新模块,被配置为执行在数据库索引创建语句执行失败时,将数据库索引创建语句对应的任务状态由处理中状态更新为已失败状态;
已成功状态更新模块,被配置为执行在数据库索引创建语句执行成功时,将数据库索引创建语句对应的任务状态由处理中状态更新为已成功状态。
在本公开的一种示例性实施例中,上述索引创建装置,还包括:
处理中状态第二更新模块,被配置为执行将数据库索引创建语句对应的任务状态由已失败状态更新为处理中状态。
以上各示例性实施方式中装置的具体细节已在相应的示例性方法部分做出详细说明,因此此处不再赘述。
示例性电子设备
在介绍了本公开示例性实施方式的方法和装置之后,接下来,介绍根据本公开的另一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本公开的电子设备可以至少包括至少一个处理单元、以及至少一个存储单元。其中,存储单元存储有程序代码,当程序代码被处理单元执行时,使得处理单元执行本说明书上述索引创建方法中描述的各个步骤等。
下面参照图10来描述根据本公开的这种实施方式的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000包括中央处理器1001,其可以根据存储在只读存储器1002中的程序或者从存储部分1008加载到随机访问存储器1003中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有系统操作所需的各种程序和数据中央处理器1001、只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005也连接至总线1004。
以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网(LAN)卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本申请的装置中限定的各种功能。
示例性介质
在介绍了本公开示例性实施方式的方法、装置和电子设备之后,接下来,对本公开示例性实施方式的计算机可读存储介质进行说明。
在一些可能的实施方式中,本公开的各个方面还可以实现为一种介质,其上存储有程序代码,当程序代码被设备的处理器执行时用于实现本说明书上述“示例性方法”部分中描述的各个步骤。
需要说明的是:上述的介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器、只读存储器、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频(RF)等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户电子设备上执行、部分在用户电子设备上部分在远程电子设备上执行、或者完全在远程电子设备或服务器上执行。在涉及远程电子设备的情形中,远程电子设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户电子设备,或者,可以连接到外部电子设备(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种索引创建方法,其特征在于,包括:
获取数据库索引创建语句,将所述数据库索引创建语句写入第一系统表中;
将所述数据库索引创建语句写入第一日志文件中,并将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至从库,以使所述从库回放所述日志信息;
从所述第一系统表中读取所述数据库索引创建语句,并执行所述数据库索引创建语句。
2.根据权利要求1所述的方法,其特征在于,在所述执行所述数据库索引创建语句之后,所述方法还包括:
在所述数据库索引创建语句执行失败时,返回所述执行所述数据库索引创建语句的步骤,直至所述数据库索引创建语句执行成功。
3.根据权利要求1或2所述的方法,其特征在于,在所述执行所述数据库索引创建语句之后,所述方法还包括:
在所述数据库索引创建语句执行成功之后,不将所述数据库索引创建语句写入所述第一日志文件中。
4.根据权利要求1所述的方法,其特征在于,在所述获取数据库索引创建语句之后,所述方法还包括:
在第一异步功能开启时,执行所述将所述数据库索引创建语句写入第一系统表中的步骤;
在所述第一异步功能关闭时,执行所述数据库索引创建语句,并在所述数据库索引创建语句执行成功之后,将所述数据库索引创建语句写入所述第一日志文件中;
将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至所述从库,以使所述从库回放所述日志信息。
5.根据权利要求1或4所述的方法,其特征在于,所述从库回放所述日志信息,包括:
在第二异步功能开启时,将所述日志信息写入第二系统表中,从所述第二系统表中读取所述日志信息,并回放所述日志信息;其中,所述第二系统表不存储所述从库接收到的其他日志信息;
在所述第二异步功能关闭时,将所述日志信息写入第二日志文件中,从所述第二日志文件中读取所述日志信息,并回放所述日志信息;其中,所述第二日志文件用于存储所述从库接收到的所有日志信息。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述第二异步功能开启时,在回放所述日志信息的同时,回放所述第二日志文件中存储的所述其他日志信息;
在所述第二异步功能关闭时,在所述日志信息回放成功之后,回放所述第二日志文件中存储的下一个日志信息。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在将所述数据库索引创建语句写入第一系统表中时,将所述数据库索引创建语句对应的任务状态设置为待处理状态;
在执行所述数据库索引创建语句之前,将所述数据库索引创建语句对应的任务状态由所述待处理状态更新为处理中状态;
在所述数据库索引创建语句执行失败时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已失败状态;
在所述数据库索引创建语句执行成功时,将所述数据库索引创建语句对应的任务状态由所述处理中状态更新为已成功状态。
8.一种索引创建装置,其特征在于,包括:
写入第一系统表模块,被配置为执行获取数据库索引创建语句,将所述数据库索引创建语句写入第一系统表中;
语句发送模块,被配置为执行将所述数据库索引创建语句写入第一日志文件中,并将所述第一日志文件中所述数据库索引创建语句对应的日志信息发送至从库,以使所述从库回放所述日志信息;
语句执行模块,被配置为执行从所述第一系统表中读取所述数据库索引创建语句,并执行所述数据库索引创建语句。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至7中任一项所述的方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010582356.6A CN111752901B (zh) | 2020-06-23 | 2020-06-23 | 索引创建方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010582356.6A CN111752901B (zh) | 2020-06-23 | 2020-06-23 | 索引创建方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752901A true CN111752901A (zh) | 2020-10-09 |
CN111752901B CN111752901B (zh) | 2024-04-05 |
Family
ID=72676930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010582356.6A Active CN111752901B (zh) | 2020-06-23 | 2020-06-23 | 索引创建方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752901B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231318A (zh) * | 2020-10-14 | 2021-01-15 | 北京人大金仓信息技术股份有限公司 | 创建全局索引的方法和装置 |
CN112732702A (zh) * | 2021-03-31 | 2021-04-30 | 腾讯科技(深圳)有限公司 | 数据库引擎文件处理方法及装置 |
CN113590695A (zh) * | 2021-05-28 | 2021-11-02 | 浪潮电子信息产业股份有限公司 | 一种基于触发器和主键的数据传输方法、系统和终端 |
CN114048216A (zh) * | 2022-01-12 | 2022-02-15 | 中兴通讯股份有限公司 | 索引选择方法、电子设备及存储介质 |
CN115840788A (zh) * | 2023-02-21 | 2023-03-24 | 创意信息技术股份有限公司 | 一种MySql数据同步到ES的方法、装置、终端及存储介质 |
CN116501736A (zh) * | 2023-04-12 | 2023-07-28 | 北京优炫软件股份有限公司 | 一种数据库延迟回放的控制方法以及控制系统 |
CN117453682A (zh) * | 2023-09-26 | 2024-01-26 | 广州海量数据库技术有限公司 | 在openGauss数据库上并行创建列存表btree索引的方法和系统 |
CN117453682B (zh) * | 2023-09-26 | 2024-07-09 | 广州海量数据库技术有限公司 | 在openGauss数据库上并行创建列存表btree索引的方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090037366A1 (en) * | 2007-07-30 | 2009-02-05 | Oracle International Corporation | Online index builds and rebuilds without blocking locks |
CN108345684A (zh) * | 2018-03-06 | 2018-07-31 | 弘成科技发展有限公司 | 基于多维度多指标体系的智能分析系统及分析方法 |
CN110275927A (zh) * | 2019-06-26 | 2019-09-24 | 浪潮卓数大数据产业发展有限公司 | 一种基于MySQL的流式实时数据同步系统 |
US20190332582A1 (en) * | 2018-04-27 | 2019-10-31 | Oracle International Corporation | System and method for heterogeneous database replication from a remote server |
KR20200056357A (ko) * | 2020-03-17 | 2020-05-22 | 주식회사 실크로드소프트 | 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법 |
-
2020
- 2020-06-23 CN CN202010582356.6A patent/CN111752901B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090037366A1 (en) * | 2007-07-30 | 2009-02-05 | Oracle International Corporation | Online index builds and rebuilds without blocking locks |
CN108345684A (zh) * | 2018-03-06 | 2018-07-31 | 弘成科技发展有限公司 | 基于多维度多指标体系的智能分析系统及分析方法 |
US20190332582A1 (en) * | 2018-04-27 | 2019-10-31 | Oracle International Corporation | System and method for heterogeneous database replication from a remote server |
CN110275927A (zh) * | 2019-06-26 | 2019-09-24 | 浪潮卓数大数据产业发展有限公司 | 一种基于MySQL的流式实时数据同步系统 |
KR20200056357A (ko) * | 2020-03-17 | 2020-05-22 | 주식회사 실크로드소프트 | 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법 |
Non-Patent Citations (1)
Title |
---|
何小川;: "MySQL数据库主从复制的实现", 广东通信技术, no. 10, pages 58 - 60 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231318A (zh) * | 2020-10-14 | 2021-01-15 | 北京人大金仓信息技术股份有限公司 | 创建全局索引的方法和装置 |
CN112732702A (zh) * | 2021-03-31 | 2021-04-30 | 腾讯科技(深圳)有限公司 | 数据库引擎文件处理方法及装置 |
CN113590695A (zh) * | 2021-05-28 | 2021-11-02 | 浪潮电子信息产业股份有限公司 | 一种基于触发器和主键的数据传输方法、系统和终端 |
CN113590695B (zh) * | 2021-05-28 | 2024-02-23 | 浪潮电子信息产业股份有限公司 | 一种基于触发器和主键的数据传输方法、系统和终端 |
CN114048216A (zh) * | 2022-01-12 | 2022-02-15 | 中兴通讯股份有限公司 | 索引选择方法、电子设备及存储介质 |
CN115840788A (zh) * | 2023-02-21 | 2023-03-24 | 创意信息技术股份有限公司 | 一种MySql数据同步到ES的方法、装置、终端及存储介质 |
CN115840788B (zh) * | 2023-02-21 | 2023-04-28 | 创意信息技术股份有限公司 | 一种MySql数据同步到ES的方法、装置、终端及存储介质 |
CN116501736A (zh) * | 2023-04-12 | 2023-07-28 | 北京优炫软件股份有限公司 | 一种数据库延迟回放的控制方法以及控制系统 |
CN117453682A (zh) * | 2023-09-26 | 2024-01-26 | 广州海量数据库技术有限公司 | 在openGauss数据库上并行创建列存表btree索引的方法和系统 |
CN117453682B (zh) * | 2023-09-26 | 2024-07-09 | 广州海量数据库技术有限公司 | 在openGauss数据库上并行创建列存表btree索引的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111752901B (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111752901B (zh) | 索引创建方法及装置、电子设备、存储介质 | |
US10437795B2 (en) | Upgrading systems with changing constraints | |
US10789220B2 (en) | Management of database API schema | |
US10303665B2 (en) | Zero downtime maintenance for applications and databases | |
US8996466B2 (en) | Extend crud to support lifecyle management and business continuity | |
JP4598821B2 (ja) | データベース復旧中のスナップショットクエリのためのシステムおよび方法 | |
US9996341B2 (en) | Infrastructure for the automation of the assembly of schema maintenance scripts | |
US10684999B2 (en) | Multi-procedure support in data migration | |
US10810248B2 (en) | Upgrading a database from a first version to a second version | |
EP1504375B1 (en) | Providing a useable version of the data item | |
US20180285097A1 (en) | Zero downtime for frequent software updates | |
US20200159852A1 (en) | Zero downtime upgrade of systems with database-side replication | |
US10055215B2 (en) | Enabling corrections during upgrade procedure | |
US11379437B1 (en) | Zero-outage database reorganization | |
US10915551B2 (en) | Change management for shared objects in multi-tenancy systems | |
US10754833B2 (en) | Combined database migration and structure conversion within maintenance procedures | |
CN112256485B (zh) | 数据备份方法、装置、介质和计算设备 | |
US11003540B2 (en) | Method, server, and computer readable medium for index recovery using index redo log | |
US11522975B2 (en) | Double persistence layer using an in-memory map | |
WO2008116731A1 (en) | Dynamic allocation of program libraries | |
WO2023111910A1 (en) | Rolling back database transaction | |
US11907162B2 (en) | Minimizing data volume growth under encryption changes | |
US7949632B2 (en) | Database-rearranging program, database-rearranging method, and database-rearranging apparatus | |
CN111274221A (zh) | 一种大规模集群组件服务版本变更测试系统 | |
CN108733704B (zh) | 多数据库数据处理方法、装置及存储介质和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |