CN116339744A - 一种自定义函数优化方法、装置、计算机设备及介质 - Google Patents

一种自定义函数优化方法、装置、计算机设备及介质 Download PDF

Info

Publication number
CN116339744A
CN116339744A CN202310297013.9A CN202310297013A CN116339744A CN 116339744 A CN116339744 A CN 116339744A CN 202310297013 A CN202310297013 A CN 202310297013A CN 116339744 A CN116339744 A CN 116339744A
Authority
CN
China
Prior art keywords
information
custom function
function data
optimization
target
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
Application number
CN202310297013.9A
Other languages
English (en)
Other versions
CN116339744B (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.)
Shenzhen Institute of Computing Sciences
Original Assignee
Shenzhen Institute of Computing Sciences
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 Shenzhen Institute of Computing Sciences filed Critical Shenzhen Institute of Computing Sciences
Priority to CN202310297013.9A priority Critical patent/CN116339744B/zh
Publication of CN116339744A publication Critical patent/CN116339744A/zh
Application granted granted Critical
Publication of CN116339744B publication Critical patent/CN116339744B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供了一种自定义函数优化方法、装置、计算机设备及介质,所述方法包括获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;基于所述初始自定义函数数据和所述统计信息确定优化信息;按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。本申请通过结合数据库的优化器加载的统计信息对初始自定义函数数据进行优化处理,达到了结合数据库的优化器对自定义函数数据进行优化,提升自定义函数数据的执行效率,进而提高自定义函数数据的运行速度。

Description

一种自定义函数优化方法、装置、计算机设备及介质
技术领域
本申请涉及计算机领域,特别是一种自定义函数优化方法、装置、计算机设备及介质。
背景技术
PL是一种过程化程序语言(Procedural Language,PL)。它是对SQL(StructuredQuery Language,结构化查询语言)的扩展,在普通SQL语句基础上,增加编程语言的特点,将数据操作和查询语句组织在PL代码的过程化代码中,通过逻辑判断、循环等操作实现复杂的功能。使用PL可以编写具有很多高级功能的程序,能够把业务逻辑封装在数据库内部,提供更好的抽象性和安全性,同时减少了网络的交互,调用速度更快,从而提升整体性能。
自定义函数(User Define Function,UDF)是一个可编程可扩展的数据库对象,它是对数据库函数能力的扩展,可基于业务应用逻辑来定制函数的实现。自定义函数的内部实现语言可以基于过程化程序语言或更通用的高级语言。
UDF是一个例程,它可以接收参数、执行操作并返回该操作的结果。
在现有的技术方案中,通常用户创建的基于PL实现自定义函数是为了实现基于业务定制能力,由于用户函数实现存在不可预知性,所以现有技术中的传统数据库难以对自定义函数进行自动优化。
发明内容
鉴于所述问题,提出了本申请以便提供克服所述问题或者至少部分地解决所述问题的一种自定义函数优化方法、装置、计算机设备及介质,包括:
一种自定义函数优化方法,包括:
获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
基于所述初始自定义函数数据和所述统计信息确定优化信息;
按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
进一步地,所述方法还包括:
在所述编译特征信息存在固定输出特征的情况下,确定所述目标自定义函数数据的固定输出信息;
缓存所述固定输出信息。
进一步地,所述方法还包括:
在所述编译特征信息存在映射特征的情况下,构建映射信息表;所述映射信息表用于记录所述目标自定义函数数据的输入-输出映射关系。
进一步地,所述基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果包括:
在所述编译特征信息存在固定输出特征且接收到第一输入信息时,将所述固定输出信息确定为所述目标自定义函数数据的执行结果。
进一步地,所述基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果包括:
在所述编译特征信息存在映射特征且接收到第二输入信息时,判断所述映射信息表中是否存在与所述第二输出信息对应的目标输出信息;
若所述映射信息表中存在与所述第二输出信息对应的目标输出信息,则确定所述目标输出信息为所述目标自定义函数数据的执行结果。
进一步地,所述输出与所述目标自定义函数数据匹配的执行结果,还包括:
若所述映射信息表中不存在与所述第二输出信息,则执行所述目标自定义函数数据包含的指令以得到与所述目标输出信息;
将所述第二输出信息和所述目标输出信息的映射关系存储于所述映射信息表中;
确定所述目标输出信息为所述目标自定义函数数据的执行结果。
进一步地,所述统计信息包括数据特征,以及用于部署所述数据库的服务器硬件信息;
所述优化处理包括:降低计算复杂度、代码填充、结果预计算、冗余删除、常量优化、表达式优化。
一种自定义函数优化装置,包括:
获取模块,用于获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
优化信息确定模块,用于基于所述初始自定义函数数据和所述统计信息确定优化信息;
优化处理模块,用于按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
执行结果输出模块,用于基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
一种计算机设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的自定义函数优化方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的自定义函数优化方法的步骤。
本申请具有以下优点:
在本申请的实施例中,针对于现有技术中的由于用户函数实现存在不可预知性,导致传统数据库难以对自定义函数进行自动优化的问题,本申请提供了结合数据库优化器对自定义函数数据进行优化的解决方案,具体为:获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;基于所述初始自定义函数数据和所述统计信息确定优化信息;按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。通过结合数据库的优化器加载的统计信息对初始自定义函数数据进行优化处理,得到优化后的目标自定义函数数据及其编译特征信息,基于编译特征信息输出目标自定义函数匹配的执行结果解决了现有技术中传统数据库中的自定义函数难以进行优化的问题,达到了结合数据库的优化器对自定义函数数据进行优化,提升自定义函数数据的执行效率,进而提高自定义函数数据的运行速度。
附图说明
为了更清楚地说明本申请的技术方案,下面将对本申请的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种自定义函数优化方法的步骤流程图;
图2是本申请一实施例提供的一种自定义函数优化方法的示例流程图;
图3是本申请一实施例提供的另一种自定义函数优化方法的步骤流程图;
图4是本申请一实施例提供的另一种自定义函数优化方法的示例流程图;
图5是本申请一实施例提供的一种自定义函数优化装置的结构框图;
图6是本发明一实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的所述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
发明人通过分析现有技术发现:代码优化是计算机软件开发中的重要一环,现有主要的代码优化包括如下三种:
(1)C++编译优化:“/O”选项,可设置优化项组合,优化代码实现最大速度、控制内联函数展开、堆栈创建帧指针等。
(2)JAVA编译优化:即时编译器可对正在运行的服务进行一系列优化,如:字节码解析过程中的分析,可对编译过程中代码的中间形式做局部优化,还可根据程序依赖图做全局优化,最终生成机器码。
(3)ORACLE:ORACLE数据库提供PLSQL_OPTIMIZE_LEVEL参数决定PL编译时优化级别,移除一些不必要的计算和异常模块,也会做行预读。具体分为三个优化级别,优化级别越高,执行性能越好,但是编译时间越长。ORACLE的优化方式是规则式的,即设置了优化级别,就会按照该级别所有的优化规则对PL进行优化,即便是负优化。
对于高级语言,因在编译时已做优化,用户输入的代码和最后优化后的执行代码,可能会不同。而现有的数据库技术,并没有对存储过程代码做类似于高级语言的代码优化,也就是用户输入的代码,会不加任何修饰完全转译成机器语言,这就在很多场景下造成冗余的执行。即便是做了一些存储过程代码级别的优化(ORACLE),也只是优化了PL内的代码,对于自定义函数本身,还需要消耗硬件资源去执行,由于自定义函数具有不可预见性,上述优化方式都无法解决对自定义函数的自动优化的问题。
需要说明的是,在本发明任一实施例中,具体针对的是基于PL实现的自定义函数进行优化,具体的,是对调用自定义函数的PL/SQL进行优化,调用的自定义函数具体指下文中提及的初始自定义函数数据和目标自定义函数数据。
参照图1,示出了本申请一实施例提供的一种自定义函数优化方法的步骤流程图;所述方法包括:
S101、获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
S102、基于所述初始自定义函数数据和所述统计信息确定优化信息;
S103、按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
S104、基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
在本申请的实施例中,针对于现有技术中的由于用户函数实现存在不可预知性,导致传统数据库难以对自定义函数进行自动优化的问题,本申请提供了结合数据库优化器对自定义函数数据进行优化的解决方案,具体为:获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;基于所述初始自定义函数数据和所述统计信息确定优化信息;按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。通过结合数据库的优化器加载的统计信息对初始自定义函数数据进行优化处理,得到优化后的目标自定义函数数据及其编译特征信息,基于编译特征信息输出目标自定义函数匹配的执行结果解决了现有技术中传统数据库中的自定义函数难以进行优化的问题,达到了结合数据库的优化器对自定义函数数据进行优化,提升自定义函数数据的执行效率,进而提高自定义函数数据的运行速度。
下面,将对本示例性实施例中一种自定义函数优化作进一步地说明。
如所述步骤S101所述,获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息。
在本发明一实施例中,可以结合下列描述进一步说明步骤S101所述“获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息”的具体过程。
初始自定义函数数据为待优化的自定义函数数据,可以为用户初次输入得到,也可以从指定存储空间读取得到。初始自定义函数数据可以包括SQL代码部分和自定义函数代码部分。
确定与初始自定义函数数据相关的数据库,并加载针对该数据库预先设置的优化器的统计信息。可以理解的是,数据库一般不属于一个或多个服务器中,优化器的统计信息包括但不限于数据库的数据特征和用于部署该数据库的服务器的硬件信息。例如:数据特征可以为数据库中的数据规模、数据分布、包含的参数(如:NULL值(无效值))等,硬件信息可以包括服务器的负载信息、容量信息、计算资源等。
在本发明一实施例中,可以结合下列描述进一步说明步骤S102所述“基于所述初始自定义函数数据和所述统计信息确定优化信息”的具体过程。
优化器可以识别初始自定义函数数据,然后根据统计信息确定针对初始自定义函数数据的优化信息,优化信息可以包括优化方式、待优化代码、目标代码。目标代码为按照优化方式对待优化代码进行优化处理后的代码。数据库优化器参与优化方式的选择和初始自定义函数数据的改写优化,使得能够根据目标服务器(执行初始自定义函数数据服务器)的软硬件环境,动态选择最佳优化方式。
在一示例中,可以根据统计信息,确定待优化代码为SQL部分,优化方式为优先选择索引对待优化代码进行改写,得到目标代码。
在一示例中,当初始自定义函数数据中包含一个查询的谓词查询条件是判断数据集中有没有NULL值,如果基于统计信息确定数据集中存在NULL值,就可以确定无需检索数据集里面的数据,确定优化方式为直接返回TRUE(真)/FALSE(假),并按照直接返回TRUE/FALSE的方式优化初始自定义函数数据。
在一示例中,根据统计信息,确定优化方式为针对自定义函数代码部分扩充出新的谓词条件,通过降低选择率来降低执行次数。
在一示例中,根据统计信息,能够确定出初始自定义函数不同代码的运算量,并将部分表达式移动至运算量较少的位置。
在具体实现中,可以在执行步骤S102之前,对初始自定义函数数据进行如上所述的PL优化。
在本发明一实施例中,可以结合下列描述进一步说明步骤S103所述“按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息”的具体过程。
在本发明一实施例中,所述优化处理可以包括但不限于降低计算复杂度、代码填充、结果预计算、冗余删除、常量优化、表达式优化中的至少一种。
降低计算复杂度可以为针对SQL代码部分的改写,例如:降低SQL代码部分的查询计算量。
代码填充可以包括但不限于构造谓词条件,扩充查询条件,降低运算量。PL代码逻辑是可被数学严谨论证的,因此,在数据库领域中代码逻辑是可以通过梳理逻辑关系,根据关系代数做等价转换的。例如:已知初始自定义函数数据中存在逻辑关系A>B,以及逻辑关系B>C,根据此两个逻辑关系可以得到推断出逻辑关系A>C,将逻辑关系A>C添加至代码中,可以使得在执行的时候增多了可选择的逻辑关系A>C,在一些场景中就可以通过直接使用逻辑关系A>C,提高运行效率。
结果预结算可以为针对有固定的查询结果的DML(Data Manipulation Language,数据操纵)语句,预先确定其查询结果。例如:初始自定义函数数据中内有SQL语句:selectcount(*)from table_name where column_name is null;本代码含义是从表table_name中计算列名column_name数据为NULL的数据数量。如果根据在统计信息中提供的数据,表明column_name的属性不可为NULL,那么本SQL语句的结果就会永远返回0;避免每次执行初始自定义函数都需要把表table_name的数据检索一遍,且每次都找到不为空的数据条数,徒增无效查询。
冗余删除可以是指删除无需执行的无效代码,例如,初始自定义函数数据为:
CREATE OR REPLACE FUNCTION udf(col1 INT,col2 INT)RETURN INT as
a NUMBER;
b INT;
BEGIN
select count(*)into a from table_name;
RETURN B;
END;
/
其中,“select count(*)into a from table_name”用于对table_name表扫描一遍获取了所有的数据,但是后面的代码没有使用变量a,故该查询是没有任何意义的,即使是符合语法规则,但属于冗余代码,所以对此类符合语法的冗余代码删除,从而提升执行性能。
常量优化可以是针对有固定的结果的运算式,预计算出结果并按照该结果对初始自定义函数数据改写
表达式优化可以是指将表达式移动至初始自定义函数数据中可能运算量较小的位置。例如,初始自定义函数数据为:
Figure BDA0004150518440000091
在该初始自定义函数数据中,每次在开始的时候都会执行一遍“a=select count(*)from table_name;”,但是只有col1不为1的时候才会返回结果,如果代码“a=selectcount(*)from table_name;”移动到else分支里面,当col1不为1的时候在进行“a=selectcount(*)from table_name;”运算,那么将会极大提升col1值为1情况时的执行效率,故此时优化方式可以为将代码“a=select count(*)from table_name;”移动到else分支里面。
在本发明一实施例中,可以结合下列描述进一步说明步骤S103所述“基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果”的具体过程。
编译特征信息可以是指初始自定义函数在编译阶段的函数特征,例如:输出固定值或者不同输入对应不同输出值等。
通过基于编译特征信息输出优化后的自定义函数数据匹配的执行结果,能够预先识别出目标自定义函数数据的编译特征,从而使得调用目标自定义函数数据时,能够减少执行目标自定义函数数据中代码的情况,甚至针对存在固定输出值的目标自定义函数数据能够做到直接输出执行结果,避免现有技术中每次调用目标自定义函数数据都需要执行其包含代码,导致运行效率下降的问题发生。
以下以一个示例对上述实施例做进一步说明,参照图2,示出了本申请一实施例提供的一种自定义函数优化方法的示例流程图。在本示例中初始自定义函数数据包括SQL代码部分(SQL语句):“select udf(col1,1)+2from t1;”
以及自定义函数代码:
Figure BDA0004150518440000101
针对函数udf(col1,1)先做PL优化,识别col2==1情况下,if分支和else分支实际意义等价,udf代码部分可以整体优化成常量1。调用优化器进行等价改写,将SQL代码不反改成“select 1+2from t1;”,并进行等价变形,将SQL代码部分最终为select 3from t1。
传统数据库,对于本示例中的初始自定义函数数据,每次调用均执行udf(col1,1)+2的运算。通过本发明实施例提前对代码做了优化,在实际执行中,每次执行通过常量投影,不需要加载UDF以及UDF的执行和结果运算,使得提升性能。
需要说明的是,因为UDF对象被优化后,可能发生UDF变更无法感知,所以在执行对象依赖上还是存在SQL语句对UDF的依赖,在执行前检测一次UDF函数的有效性即可。
进一步的,通过本发明实施例提供的一种自定义函数代码优化方法,可以对本示例中的初始自定义函数数据进一步处理,在UDF编译时,能够确定在输入条件下,输出为常量;即可在优化器中将UDF直接改写为常量,即进行常量优化处理。相对于udf(col1,1)+2的投影计算,常量投影3,直接减少了3个执行步骤(1、加载UDF;2、UDF根据输入运算得到输出;3、UDF输出结果参与投影计算),故在SQL语句调用时,减少了大量的运算,随之提升执行速度。需要说明的是,虽经初始自定义函数数据经过优化后、可能破坏原语义,但不会改变执行结果。代码优化过程包括但不限于编译阶段、优化阶段。
参照图3,示出了本申请一实施例提供的另一种自定义函数优化方法的步骤流程图;所述方法包括:
S301、获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
S302、基于所述初始自定义函数数据和所述统计信息确定优化信息;
S303、按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
S304、在所述编译特征信息存在固定输出特征的情况下,确定所述目标自定义函数数据的固定输出信息;
固定输出特征为目标自定义函数数据的输出信息为固定值,不会随输入信息变化而变化,此时可以确定该固定值为目标自定义函数数据的固定输出信息。
S305、缓存所述固定输出信息;
对固定输出信息进行静态优化,缓存该固定输出信息。
S306、在所述编译特征信息存在固定输出特征且接收到第一输入信息时,将所述固定输出信息确定为所述目标自定义函数数据的执行结果;
可以对目标自定义函数数据的编译特征信息进行识别,在其为固定输出特征或者映射特征时,按照不同方式输出目标自定义函数数据的执行结果。
在编译特征信息为固定输出特征时,可以执行一次目标自定义函数数据并确定其固定输出信息,当调用目标自定义函数数据时直接输出该固定输出信息作为执行结果,从而避免每次调用目标自定义函数数据都要执行一遍其包含的指令,在能够准确获取到目标自定义函数数据执行结果情况下,有效降低执行目标自定义函数数据的次数,提高运行效率。
S307、在所述编译特征信息存在映射特征的情况下,构建映射信息表;所述映射信息表用于记录所述目标自定义函数数据的输入-输出映射关系;
映射特征为目标自定义函数数据的输出信息随输入信息变化而变化,且不同输入信息能够与其对应的输出信息具有确定的输入-输出映射关系,即可以通过输入-输出映射关系,可以确定出接收到的输入信息映射的输出信息。
S308、在所述编译特征信息存在映射特征且接收到第二输入信息时,判断所述映射信息表中是否存在与所述第二输出信息对应的目标输出信息;
S309、若所述映射信息表中存在与所述第二输出信息对应的目标输出信息,则确定所述目标输出信息为所述目标自定义函数数据的执行结果;
S310、若所述映射信息表中不存在与所述第二输出信息,则执行所述目标自定义函数数据包含的指令以得到与所述目标输出信息;
S311、将所述第二输出信息和所述目标输出信息的映射关系存储于所述映射信息表中;
S312、确定所述目标输出信息为所述目标自定义函数数据的执行结果。
在编译特征信息为映射特征时,若映射信息表中存在与当前接收到的第二输入信息对应的第二输出信息,则无需执行目标自定义函数数据中的指令,直接输出与第二输入信息对应的第二输出信息。如果映射信息表中不存在与当前接收到的第二输入信息对应的第二输出信息,则需要执行目标自定义函数数据中的指令以获得该第二输出信息,并将该第二输出信息作为执行结果。在确定第二输出信息后,通过将第二输入信息和第二输出信息的映射关系存储于该映射信息表中对映射信息进行更新,使得在下次调用目标自定义函数数据处理该第二输入信息时,可以通过更新后的映射信息表确定第二输出信息,无限重复执行目标自定义函数数据中的指令,能够在一定程度上降低执行目标自定义函数数据的次数,提高运行效率。
上述第一输入信息和第二输入信息用于表示针对不同编译特征信息,对输入信息的处理方式不同,本发明实施例对第一输入信息和第二输入信息不做限定,第一输入信息和第二输入信息可以是不同的值也可以是相同的值。
以下,以一个示例对本发明实施例作进一步说明,参照图4,示出了本申请一实施例提供的另一种自定义函数优化方法的示例流程图,包括如下步骤:
S401、输入带UDF的SQL语句;
S402、识别UDF,并通过优化器根据既定的优化规则,对UDF优化,具体包括:与数据库优化器联动,优化器加载统计信息,判定和选择优化规则,对UDF代码进行优化;优化结束得到UDF的编译特征信息,如函数是否是有存在固定输出、是否存在特定输入-输出映射关系。对存在固定输出结果的UDF,做静态优化,缓存输出结果。
S403、执行UDF。包括:对于静态优化过的UDF,直接返回结果;对于有存在固定输入输出结果的UDF,在“输入-输出映射信息表”里,通过输入参数,获取输出结果,然后返回结果;对于有存在固定输入输出结果的UDF,在映射信息表里找不到结果,就一次执行UDF函数里所有指令,将执行结果缓存在映射信息表里,以便下次调用使用,并返回结果;
S404,输出结果。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
参照图5,示出了本申请一实施例提供的一种自定义函数优化装置;具体包括:
获取模块401,用于获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
优化信息确定模块402,用于基于所述初始自定义函数数据和所述统计信息确定优化信息;
优化处理模块403,用于按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
执行结果输出模块404,用于基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
在本发明一实施例中,所述装置还包括:
固定输出信息确定模块,用于在所述编译特征信息存在固定输出特征的情况下,确定所述目标自定义函数数据的固定输出信息;
固定输出信息缓存模块,用于缓存所述固定输出信息。
在本发明一实施例中,所述装置还包括:
映射信息表构建模块,用于在所述编译特征信息存在映射特征的情况下,构建映射信息表;所述映射信息表用于记录所述目标自定义函数数据的输入-输出映射关系。
在本发明一实施例中,所述执行结果输出模块404包括:
第一输出子模块,用于在所述编译特征信息存在固定输出特征且接收到第一输入信息时,将所述固定输出信息确定为所述目标自定义函数数据的执行结果。
在本发明一实施例中,所述执行结果输出模块404包括:
输出查询子模块,用于在所述编译特征信息存在映射特征且接收到第二输入信息时,判断所述映射信息表中是否存在与所述第二输出信息对应的目标输出信息;
第二输出子模块,用于若所述映射信息表中存在与所述第二输出信息对应的目标输出信息,则确定所述目标输出信息为所述目标自定义函数数据的执行结果。
在本发明一实施例中,所述执行结果输出模块404还包括:
执行子模块,用于若所述映射信息表中不存在与所述第二输出信息,则执行所述目标自定义函数数据包含的指令以得到与所述目标输出信息;
映射关系存储子模块,用于将所述第二输出信息和所述目标输出信息的映射关系存储于所述映射信息表中;
第三输出子模块,用于确定所述目标输出信息为所述目标自定义函数数据的执行结果。
在本发明一实施例中,所述统计信息包括数据特征,以及用于部署所述数据库的服务器硬件信息;
所述优化处理包括:降低计算复杂度、代码填充、结果预计算、冗余删除、常量优化、表达式优化。
参照图6,示出了本发明的一种自定义函数优化方法的计算机设备,具体可以包括如下:
上述计算机设备12以通用计算设备的形式表现,计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线18结构中的一种或多种,包括存储器总线18或者存储器控制器,外围总线18,图形加速端口,处理器或者使用多种总线18结构中的任意总线18结构的局域总线18。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线18,微通道体系结构(MAC)总线18,增强型ISA总线18、音视频电子标准协会(VESA)局域总线18以及外围组件互连(PCI)总线18。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其他移动/不可移动的、易失性/非易失性计算机体统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其他光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质界面与总线18相连。存储器可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块42,这些程序模块42被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其他程序模块42以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24、摄像头等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其他计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)界面22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN)),广域网(WAN)和/或公共网络(例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其他模块通信。应当明白,尽管图6中未示出,可以结合计算机设备12使用其他硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元16、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统34等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种自定义函数优化方法。
也即,上述处理单元16执行上述程序时实现:获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;基于所述初始自定义函数数据和所述统计信息确定优化信息;按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
在本发明实施例中,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有实施例提供的一种自定义函数优化方法:
也即,给程序被处理器执行时实现:获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;基于所述初始自定义函数数据和所述统计信息确定优化信息;按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机克顿信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言——诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或者服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的........,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种自定义函数优化方法,其特征在于,包括:
获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
基于所述初始自定义函数数据和所述统计信息确定优化信息;
按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述编译特征信息存在固定输出特征的情况下,确定所述目标自定义函数数据的固定输出信息;
缓存所述固定输出信息。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在所述编译特征信息存在映射特征的情况下,构建映射信息表;所述映射信息表用于记录所述目标自定义函数数据的输入-输出映射关系。
4.根据权利要求2所述的方法,其特征在于,所述基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果包括:
在所述编译特征信息存在固定输出特征且接收到第一输入信息时,将所述固定输出信息确定为所述目标自定义函数数据的执行结果。
5.根据权利要求3所述的方法,其特征在于,所述基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果包括:
在所述编译特征信息存在映射特征且接收到第二输入信息时,判断所述映射信息表中是否存在与所述第二输出信息对应的目标输出信息;
若所述映射信息表中存在与所述第二输出信息对应的目标输出信息,则确定所述目标输出信息为所述目标自定义函数数据的执行结果。
6.根据权利要求5所述的方法,其特征在于,所述输出与所述目标自定义函数数据匹配的执行结果,还包括:
若所述映射信息表中不存在与所述第二输出信息,则执行所述目标自定义函数数据包含的指令以得到与所述目标输出信息;
将所述第二输出信息和所述目标输出信息的映射关系存储于所述映射信息表中;
确定所述目标输出信息为所述目标自定义函数数据的执行结果。
7.根据权利要求1所述的方法,其特征在于,
所述统计信息包括数据特征,以及用于部署所述数据库的服务器硬件信息;
所述优化处理包括:降低计算复杂度、代码填充、结果预计算、冗余删除、常量优化、表达式优化。
8.一种自定义函数优化装置,其特征在于,包括:
获取模块,用于获取初始自定义函数数据,以及预设数据库的优化器加载的统计信息;
优化信息确定模块,用于基于所述初始自定义函数数据和所述统计信息确定优化信息;
优化处理模块,用于按照所述优化信息对所述初始自定义函数数据进行优化处理,得到优化数据;所述优化数据包括目标自定义函数数据和编译特征信息;
执行结果输出模块,用于基于所述编译特征信息输出与所述目标自定义函数数据匹配的执行结果。
9.一种计算机设备,其特征在于,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
CN202310297013.9A 2023-03-23 2023-03-23 一种自定义函数优化方法、装置、计算机设备及介质 Active CN116339744B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310297013.9A CN116339744B (zh) 2023-03-23 2023-03-23 一种自定义函数优化方法、装置、计算机设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310297013.9A CN116339744B (zh) 2023-03-23 2023-03-23 一种自定义函数优化方法、装置、计算机设备及介质

Publications (2)

Publication Number Publication Date
CN116339744A true CN116339744A (zh) 2023-06-27
CN116339744B CN116339744B (zh) 2024-01-16

Family

ID=86892567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310297013.9A Active CN116339744B (zh) 2023-03-23 2023-03-23 一种自定义函数优化方法、装置、计算机设备及介质

Country Status (1)

Country Link
CN (1) CN116339744B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6351742B1 (en) * 1999-03-18 2002-02-26 Oracle Corporation Method and mechanism for database statement optimization
US6370522B1 (en) * 1999-03-18 2002-04-09 Oracle Corporation Method and mechanism for extending native optimization in a database system
US20150058316A1 (en) * 2013-08-25 2015-02-26 Microsoft Corporation Continuous Cloud-Scale Query Optimization and Processing
WO2015137919A1 (en) * 2014-03-10 2015-09-17 Hewlett-Packard Development Company, L.P. Parallelizing sql user defined transformation functions
EP2960813A1 (en) * 2014-06-26 2015-12-30 Sap Se Optimization of parallelization of user-defined functions with flexible partitioning
CN106547883A (zh) * 2016-11-03 2017-03-29 北京集奥聚合科技有限公司 一种用户定义函数udf运行情况的处理方法及系统
CN108984612A (zh) * 2018-06-12 2018-12-11 中国平安人寿保险股份有限公司 目标sql语句的获取方法、装置、计算机设备及存储介质
US20190197156A1 (en) * 2017-12-22 2019-06-27 Teradata Us, Inc. Transparent User-Defined Function (UDF) Optimization
CN115543339A (zh) * 2022-10-12 2022-12-30 中国平安人寿保险股份有限公司 代码转换方法和装置、计算机设备及存储介质
CN115617830A (zh) * 2021-07-12 2023-01-17 中国移动通信集团黑龙江有限公司 一种基于机器学习的数据查询优化处理方法及装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6351742B1 (en) * 1999-03-18 2002-02-26 Oracle Corporation Method and mechanism for database statement optimization
US6370522B1 (en) * 1999-03-18 2002-04-09 Oracle Corporation Method and mechanism for extending native optimization in a database system
US20150058316A1 (en) * 2013-08-25 2015-02-26 Microsoft Corporation Continuous Cloud-Scale Query Optimization and Processing
WO2015137919A1 (en) * 2014-03-10 2015-09-17 Hewlett-Packard Development Company, L.P. Parallelizing sql user defined transformation functions
EP2960813A1 (en) * 2014-06-26 2015-12-30 Sap Se Optimization of parallelization of user-defined functions with flexible partitioning
CN106547883A (zh) * 2016-11-03 2017-03-29 北京集奥聚合科技有限公司 一种用户定义函数udf运行情况的处理方法及系统
US20190197156A1 (en) * 2017-12-22 2019-06-27 Teradata Us, Inc. Transparent User-Defined Function (UDF) Optimization
CN108984612A (zh) * 2018-06-12 2018-12-11 中国平安人寿保险股份有限公司 目标sql语句的获取方法、装置、计算机设备及存储介质
CN115617830A (zh) * 2021-07-12 2023-01-17 中国移动通信集团黑龙江有限公司 一种基于机器学习的数据查询优化处理方法及装置
CN115543339A (zh) * 2022-10-12 2022-12-30 中国平安人寿保险股份有限公司 代码转换方法和装置、计算机设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
杨波 等: "利用区间约束优化包含多个用户函数的查询", 软件学报, no. 09 *

Also Published As

Publication number Publication date
CN116339744B (zh) 2024-01-16

Similar Documents

Publication Publication Date Title
US6304867B1 (en) System and method for enhanced performance of a relational database management system through the use of application-specific memory-resident data
US20200249925A1 (en) On-demand loading of dynamic scripting language code for reduced memory usage
JPH01194028A (ja) データベース処理方法および装置
JP2002538546A (ja) Abapコードコンバータの仕様
CN109313547B (zh) 用于cpu利用率和代码重构的查询优化器
US7110991B2 (en) IDE integration with JDBC
US20080140622A1 (en) Displaying Explain Data for a SQL Query of a Database
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
CN115809063B (zh) 一种存储过程编译方法、系统、电子设备和存储介质
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
US20180218039A1 (en) Query planning and execution with reusable memory stack
CN116339744B (zh) 一种自定义函数优化方法、装置、计算机设备及介质
CN114547086B (zh) 数据处理方法、装置、设备及计算机可读存储介质
CN115878654A (zh) 一种数据查询的方法、装置、设备及存储介质
US10732946B2 (en) Simulation-based code duplication
US7155432B2 (en) Method and system decoding user defined functions
US20200311084A1 (en) Automatic selection of precompiled or code-generated operator variants
JP2778025B2 (ja) 共起関係辞書の学習方法
CN111723104A (zh) 一种数据处理系统中语法分析的方法、装置及系统
JP3434641B2 (ja) データベース処理方法
US11681705B2 (en) Trie data structure with subtrie data structures
US20240036840A1 (en) Deferred formula computation
CN113836175A (zh) 数据访问方法、装置、设备及存储介质
JP3305782B2 (ja) ソフトウェア標準化方法およびソフトウェア生産物の解析方法
JP3090048B2 (ja) 標準プログラムの機能拡張方法及び方式

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