CN115878405A - PostgreSQL数据库内存检测方法和系统 - Google Patents
PostgreSQL数据库内存检测方法和系统 Download PDFInfo
- Publication number
- CN115878405A CN115878405A CN202310213124.7A CN202310213124A CN115878405A CN 115878405 A CN115878405 A CN 115878405A CN 202310213124 A CN202310213124 A CN 202310213124A CN 115878405 A CN115878405 A CN 115878405A
- Authority
- CN
- China
- Prior art keywords
- memory
- interface
- manager
- postgresql database
- 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.)
- Withdrawn
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 100
- 238000004806 packaging method and process Methods 0.000 claims abstract description 6
- 238000013507 mapping Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 15
- 230000006978 adaptation Effects 0.000 claims description 8
- 238000000034 method Methods 0.000 abstract description 18
- 230000005540 biological transmission Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000011161 development Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
Images
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种PostgreSQL数据库内存检测方法和系统,其中,PostgreSQL数据库内存检测方法包括:创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口;修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器;在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配。通过本申请,解决了现有技术中基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,提高了内存检测的有效性和准确性。
Description
技术领域
本申请涉及数据库管理领域,特别是涉及PostgreSQL数据库内存检测方法和系统。
背景技术
PostgreSQL是一款功能强大且开源的对象-关系型数据库管理系统,因此开发者可基于PostgreSQL内核进行二次开发,得到满足用户功能需求的单机或分布式的数据库系统。
现有技术中,基于PostgreSQL内核的数据库系统使用Valgrind内存检测工具来检测内存错误相关的问题,但是Valgrind会严重影响程序性能,同时Valgrind无法发现Stack use after return(函数返回后使用函数栈上内存数据)、Undefined behavior(非确定性行为)、Stack buffer overflow(栈内存溢出)、Global buffer overflow(全局变量内存溢出)等问题,导致开发者遇到此类问题时束手无策。AddressSanitizer内存检测工具可以解决上述问题,但是目前基于PostgreSQL内核的数据库系统上无法使用AddressSanitizer内存检测工具。
针对相关技术中存在目前基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,目前还没有提出有效的解决方案。
发明内容
在本实施例中提供了一种PostgreSQL数据库内存检测方法和系统,以解决相关技术中目前基于PostgreSQL内核的数据库系统使用的内存检测工具无法检测部分内存错误的问题。
第一个方面,在本实施例中提供了一种PostgreSQL数据库内存检测方法,包括:
创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口;
修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器;
在对所述PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的所述内存操作接口与目标内存检测工具进行适配。
在其中的一些实施例中,所述创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口,包括:
在所述内存操作接口为内存分配接口时,通过调用所述第三方系统接口的内存分配接口,封装所述目标内存管理器的内存分配接口;
将所述内存分配接口中的内存分配信息存储于预设的内存信息表中;
通过所述内存分配接口输出所述内存分配信息中的内存地址信息。
在其中的一些实施例中,所述创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口,包括:
在所述内存操作接口为内存释放接口时,通过调用所述第三方系统接口的内存释放接口,封装所述目标内存管理器的内存释放接口;
根据所述内存释放接口中的内存释放信息,对应删除预设的内存信息表中对应内存信息。
在其中的一些实施例中,所述修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器,包括:
修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的内存上下文中的内存管理指针,指向所述目标内存管理器。
在其中的一些实施例中,所述在对所述PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的所述内存操作接口与目标内存检测工具进行适配,包括:
使用目标编译器,对所述PostgreSQL数据库的内核源码进行编译;
修改编译选项,将目标内存管理器中的所述内存操作接口与内存检测工具进行适配。
在其中的一些实施例中,所述存储所述内存分配接口中的内存分配信息存储于内存信息表中,包括:
将所述内存分配信息中的所述内存地址信息与内存上下文映射关系存储于预设的全局内存上下文映射表中;
将所述内存分配信息中的所述内存地址信息与内存块元信息映射关系存储于预设的内存块元信息表中。
在其中的一些实施例中,所述创建目标内存管理器,还包括:
根据所述内存信息表,对所述PostgreSQL数据库的内存使用量进行统计。
第二个方面,在本实施例中提供了一种PostgreSQL数据库内存检测装置,包括:
创建模块,用于创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口;
选择模块,用于修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器;
适配模块,用于在对PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
第三个方面,在本实施例中提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一个方面所述的PostgreSQL数据库内存检测方法。
第四个方面,在本实施例中提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一个方面所述的PostgreSQL数据库内存检测方法。
与相关技术相比,在本实施例中提供的PostgreSQL数据库内存检测方法和系统,通过创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口,其中第三方系统接口可使用目标内存检测工具;修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器;在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配,解决了目前基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,提高了内存检测的有效性和准确性。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本实施例的PostgreSQL数据库内存检测方法终端的硬件结构框图;
图2是本实施例的PostgreSQL数据库内存检测方法的流程图;
图3是本实施例的PostgreSQL数据库内存检测方法的流程图;
图4是本实施例的PostgreSQL数据库内存上下文结构示意图;
图5是本优选实施例的PostgreSQL数据库内存检测方法的流程图;
图6是本实施例的PostgreSQL数据库内存检测系统的结构框图。
图中:102、处理器;104、存储器;106、传输设备;108、输入输出设备;401、内存上下文根节点;402、当前事务内存上下文;403、缓存内存上下文;404、消息日志内存上下文;10、创建模块;20、选择模块;30、适配模块。
具体实施方式
为更清楚地理解本申请的目的、技术方案和优点,下面结合附图和实施例,对本申请进行了描述和说明。
除另作定义外,本申请所涉及的技术术语或者科学术语应具有本申请所属技术领域具备一般技能的人所理解的一般含义。在本申请中的“一”、“一个”、“一种”、“该”、“这些”等类似的词并不表示数量上的限制,它们可以是单数或者复数。在本申请中所涉及的术语“包括”、“包含”、“具有”及其任何变体,其目的是涵盖不排他的包含;例如,包含一系列步骤或模块(单元)的过程、方法和系统、产品或设备并未限定于列出的步骤或模块(单元),而可包括未列出的步骤或模块(单元),或者可包括这些过程、方法、产品或设备固有的其他步骤或模块(单元)。在本申请中所涉及的“连接”、“相连”、“耦接”等类似的词语并不限定于物理的或机械连接,而可以包括电气连接,无论是直接连接还是间接连接。在本申请中所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。通常情况下,字符“/”表示前后关联的对象是一种“或”的关系。在本申请中所涉及的术语“第一”、“第二”、“第三”等,只是对相似对象进行区分,并不代表针对对象的特定排序。
在本实施例中提供的方法实施例可以在终端、计算机或者类似的运算装置中执行。比如在终端上运行,图1是本实施例的PostgreSQL数据库内存检测方法终端的硬件结构框图。如图1所示,终端可以包括一个或多个(图1中仅示出一个)处理器102和用于存储数据的存储器104,其中,处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置。上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限制。例如,终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示出的不同配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如在本实施例中的PostgreSQL数据库内存检测方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络包括终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(NetworkInterface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(RadioFrequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种PostgreSQL数据库内存检测方法,图2是本实施例的PostgreSQL数据库内存检测方法的流程图,如图2所示,该流程包括如下步骤:
步骤S201,创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口。
具体地,本实施例中,调用的第三方系统接口为C标准库的内存操作接口,用于封装目标内存管理器的内存操作接口,其中,内存操作接口包括内存分配接口、内存释放接口、内存重分配接口、内存重置接口、内存空间获取接口以及内存判空接口等与内存操作相关接口。需要说明的是,在其他实施例中,也可通过开发者自己实现或调用C标准库之外的其他第三方系统接口,来封装目标内存管理器。由此可知,通过该方式提高了目标内存管理器的可扩展性。
步骤S202,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器。
具体地,本实施例中,PostgreSQL数据库是一款功能强大且开源的对象-关系型数据库管理系统,开发者可基于PostgreSQL内核进行二次开发,将PostgreSQL数据库的原内存管理器,替换为开发者自己开发的目标内存管理器。需要说明的是,在其他实施例中,开发者也可通过修改原内存管理器源码,来实现开发者自定义的内存检测需求。由此可知,通过上述方式可根据开发者需求来实现PostgreSQL数据库的内存检测功能,提高了PostgreSQL数据库内存检测全面性。
步骤S203,在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
具体地,上述第三方系统接口,在编译期间,可通过修改编译选项,进而可以使用目标内存检测工具,由于本实施例通过调用该第三方系统接口来封装目标内存管理器的内存操作接口,因此也可在对PostgreSQL数据库的内核源码编译时,通过修改编译选项,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配,进而使得当前PostgreSQL数据库可使用目标内存检测工具进行内存检测。需要说明的是,在其他实施例中,也可使用其他方案,对目标内存管理器中的内存操作接口与目标内存检测工具进行适配。上述适配方式简洁高效,有效降低了开发成本。
本实施例中,通过创建目标内存管理器,调用第三方系统接口来封装目标内存管理器的内存操作接口,提高了目标内存管理器的可扩展性;通过修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器,提高了该数据库的内存检测全面性;在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配,操作简洁高效,有效降低了开发成本。
通过上述步骤,利用创建的目标内存管理器,实现了其内存操作接口与目标内存检测工具的适配,使PostgreSQL数据库在进行内存操作时,可通过目标内存检测工具进行内存检测,使得目标内存检测工具,相较于现有技术中PostgreSQL数据库中内存管理器使用的内存检测工具,内存错误检测更加全面,并减少了对应用程序的耗时影响;解决了现有技术中基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,提高了内存检测的有效性和准确性。
在其中的一些实施例中,创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口,包括如下步骤:
步骤S301,在内存操作接口为内存分配接口时,通过调用第三方系统接口的内存分配接口,封装目标内存管理器的内存分配接口。
步骤S302,将内存分配接口中的内存分配信息存储于预设的内存信息表中。
步骤S303,通过内存分配接口输出内存分配信息中的内存地址信息。
具体地,图3是本实施例的PostgreSQL数据库内存检测方法的流程图,如图3所示,上述步骤S201已说明本实施例中调用的第三方系统接口为C标准库的内存操作接口,当目标内存管理器中封装的内存操作接口为内存分配接口时,该目标内存管理器调用C标准库提供的malloc接口,该malloc接口负责分配内存块,并返回内存块对应的内存地址信息;上述内存分配接口中的内存分配信息包括内存块对应的内存地址信息、内存上下文地址信息和内存块容量;将上述内存分配信息存储于预设的内存信息表中;最终目标内存管理器中封装的内存操作接口,输出内存块对应的内存地址信息。通过上述自主实现的内存分配接口,提高了内存检测的有效性。
本实施例中的PostgreSQL数据库内存检测方法,还包括如下步骤:
步骤S304,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器。
步骤S305,在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
在其中的一些实施例中,创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口,包括如下步骤:
步骤S401,在内存操作接口为内存释放接口时,通过调用第三方系统接口的内存释放接口,封装目标内存管理器的内存释放接口。
步骤S402,根据内存释放接口中的内存释放信息,对应删除预设的内存信息表中对应内存信息。
具体地,上述步骤S201已说明本实施例中,调用的第三方系统接口为C标准库的内存操作接口,当目标内存管理器中封装的内存操作接口为内存释放接口时,该目标内存管理器调用C标准库提供的free接口,该free接口负责释放内存块;本实施例中预设的内存信息表,即上述步骤S302中内存信息表,内存释放接口中的内存释放信息为内存块对应的内存地址信息,在调用该内存释放接口时,移除内存信息表中述内存地址信息及对应内存信息。通过上述自主实现的内存释放接口,提高了内存检测的有效性。
在其中的一些实施例中,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器,包括如下步骤:
步骤S501,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的内存上下文中的内存管理指针,指向目标内存管理器。
具体地,由于本实施例的PostgreSQL数据库是开源系统,其中,PostgreSQL数据库运行的进程中拥有多个内存上下文,这些内存上下文构成一颗多叉树的逻辑结构,用于管理内存,图4是本实施例的PostgreSQL数据库内存上下文结构示意图,如图4所示,该内存上下文结构的根节点为内存上下文根节点401,子节点包括当前事务内存上下文402,用于管理当前事务上下文;缓存内存上下文403,用于管理缓存上下文;消息日志内存上下文404,用于管理消息日志上下文。因此可以获取PostgreSQL数据库的内核源码,修改内核源码中内存上下文代码实现部分,将内存上下文中内存管理指针,指向开发者自主实现的目标内存管理器。通过上述方式修改PostgreSQL数据库的内核源码,对原代码的改动较小,有利于开发者后续对自主实现的目标内存管理器的修改和迭代。
在其中的一些实施例中,在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配,包括如下步骤:
步骤S601,使用目标编译器,对PostgreSQL数据库的内核源码进行编译。
步骤S602,修改编译选项,将目标内存管理器中的内存操作接口与内存检测工具进行适配。
具体地,本实施例中使用的目标编译器为GCC编译器,在使用GCC编译器对修改后的PostgreSQL数据库的内核源码进行编译时,通过修改编译选项开启内存检测工具,进而将目标内存管理器中的内存操作接口与内存检测工具进行适配。本实施例中,开启的内存检测工具为AddressSanitizer内存检测工具,相较于目前PostgreSQL数据库系统使用的Valgrind内存检测工具,AddressSanitizer内存检测工具可以检测到Valgrind内存检测工具无法检测到的 Stack use after return(函数返回后使用函数栈上内存数据)、Undefined behavior(非确定性行为)、Stack buffer overflow(栈内存溢出)、Globalbuffer overflow (全局变量内存溢出)等问题;AddressSanitizer内存检测工具对应用程序的性能影响较小,对应用程序的耗时较少。由于原PostgreSQL数据库的内存管理器无法使用AddressSanitizer内存检测工具,因此本实施例使用开发者自主研发的内存管理器,在使用GCC编译器进行编译时,通过修改编译选项开启AddressSanitizer内存检测工具,进而将目标内存管理器中的内存操作接口与AddressSanitizer内存检测工具进行适配,保证了内存错误检测的有效性。
在其中的一些实施例中,存储内存分配接口中的内存分配信息存储于内存信息表中,包括如下步骤:
步骤S701,将内存分配信息中的内存地址信息与内存上下文映射关系存储于预设的全局内存上下文映射表中。
步骤S702,将内存分配信息中的内存地址信息与内存块元信息映射关系存储于预设的内存块元信息表中。
具体地,本实施例中,预设的内存信息表包括全局内存上下文映射表和内存块元信息表,其中,全局内存上下文映射表中存储内存块对应的内存地址信息,和该内存地址信息对应的内存上下文地址信息,内存块元信息表存储内存块对应的内存地址信息,和该内存地址信息对应的内存上下文地址信息和内存块容量,需要说明的是,在其他实施例中,上述内存分配信息还包括其他与内存相关信息,上述内存信息表还包括其他信息表,用于存储内存分配信息,通过上述方式将内存分配信息存储于预设的内存信息表,有助于内存信息的查询和统计。
在其中的一些实施例中,创建目标内存管理器,还包括:
步骤S801,根据内存信息表,对PostgreSQL数据库的内存使用量进行统计。
具体地,根据内存信息表,统计PostgreSQL数据库的可使用内存和已使用内存,用于展示内存状态和处理内存错误问题,有助于内存错误问题快速解决。
下面通过优选实施例对本实施例进行描述和说明。
图5是本优选实施例的PostgreSQL数据库内存检测方法的流程图,如图5所示,该PostgreSQL数据库内存检测方法包括如下步骤:
步骤S901,创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口,本优选实施例中,目标内存管理器为ASanContext内存管理器,内存操作接口包括以下接口:alloc接口,用于分配内存;free接口,用于释放一次内存操作进程中分配的内存块;realloc接口,用于重新分配内存;reset接口,用于释放全部内存操作进程中分配的内存块;delete_context接口,用于释放内存操作进程中分配的内存块,并清理该内存管理器;get_chunk_space接口,用于获取内存空间信息;is_empty接口,用于判断该内存管理器是否已进行内存分配。
步骤S902,在内存操作接口为内存分配接口时,通过调用C标准库提供的的内存分配接口,封装ASanContext内存管理器的内存分配接口。
步骤S903,将内存分配接口中的内存分配信息存储于预设的内存信息表中,本优选实施例中,内存块对应的内存地址信息、内存上下文地址信息和内存块容量,内存信息表包括全局内存上下文映射表(GlobalMemoryContextTable)和内存块元信息表(MemoryBlockMetaTable)。
步骤S904,将内存分配信息中的内存地址信息与内存上下文映射关系存储于预设的全局内存上下文映射表中。
步骤S905,将内存分配信息中的内存地址信息与内存块元信息映射关系存储于预设的内存块元信息表中。
步骤S906,通过内存分配接口输出内存分配信息中的内存地址信息。
步骤S907,在内存操作接口为内存释放接口时,通过调用C标准库提供的的内存释放接口,封装ASanContext内存管理器的内存释放接口。
步骤S908,根据内存释放接口中的内存释放信息,对应删除预设的内存信息表中对应内存信息,即移除全局内存上下文映射表中内存地址信息及对应的内存上下文地址信息,移除内存块元信息表中内存块对应的内存地址信息,和该内存地址信息对应的内存上下文地址信息和内存块容量。
步骤S909,根据全局内存上下文映射表和内存块元信息表,对PostgreSQL数据库的内存使用量进行统计,本优选实施例中,内存统计接口为stats接口,用于统计可使用内存和已使用内存。
步骤S910,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的MemoryContext内存管理器(即内存上下文)中的内存管理指针,指向ASanContext内存管理器,比如开发者调用MemoryContext内存管理器提供的 palloc 接口申请分配内存时,该MemoryContext内存管理器调用ASanContext类提供的alloc接口;开发者调用MemoryContext内存管理器提供的pfree接口申请释放内存时,该MemoryContext内存管理器调用ASanContext内存管理器提供的内存操作接口free_p接口。
步骤S911,使用GCC编译器,对PostgreSQL数据库的内核源码进行编译。
步骤S912,修改编译选项,将ASanContext内存管理器中的内存操作接口与AddressSanitizer内存检测工具进行适配。
通过上述优选实施例,通过创建ASanContext内存管理器,调用C标准库接口来封装ASanContext内存管理器的内存操作接口,提高了目标内存管理器的可扩展性;通过修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的MemoryContext内存管理器,替换为开发者自主研发的ASanContext内存管理器,提高了该数据库的内存检测全面性;在对PostgreSQL数据库的内核源码编译时,将ASanContext内存管理器中的内存操作接口与AddressSanitizer内存检测工具进行适配,有效降低了开发成本,解决了现有技术中基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,提高了内存检测的有效性和准确性。
在本实施例中还提供了一种PostgreSQL数据库内存检测系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。以下所使用的术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管在以下实施例中所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是本实施例的PostgreSQL数据库内存检测系统的结构框图,如图6所示,该装置包括:创建模块10、选择模块20以及适配模块30。
需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
创建模块10,用于创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口;选择模块20,用于修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器;适配模块,用于在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
通过上述系统,解决了现有技术中基于PostgreSQL内核的数据库系统使用的Valgrind内存检测工具无法检测部分内存错误问题,提高了内存检测的有效性和准确性。
在其中的一些实施例中,创建模块10,还用于在内存操作接口为内存分配接口时,通过调用第三方系统接口的内存分配接口,封装目标内存管理器的内存分配接口;将内存分配接口中的内存分配信息存储于预设的内存信息表中;通过内存分配接口输出内存分配信息中的内存地址信息。
在其中的一些实施例中,创建模块10,还用于在内存操作接口为内存释放接口时,通过调用第三方系统接口的内存释放接口,封装目标内存管理器的内存释放接口;根据内存释放接口中的内存释放信息,对应删除预设的内存信息表中对应内存信息。
在其中的一些实施例中,创建模块10,还用于将内存分配信息中的内存地址信息与内存上下文映射关系存储于预设的全局内存上下文映射表中;
将内存分配信息中的内存地址信息与内存块元信息映射关系存储于预设的内存块元信息表中。
在其中的一些实施例中,创建模块10,还用于根据内存信息表,对PostgreSQL数据库的内存使用量进行统计。
在其中的一些实施例中,选择模块20,还用于修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的内存上下文中的内存管理指针,指向目标内存管理器。
在其中的一些实施例中,适配模块30,还用于使用目标编译器,对PostgreSQL数据库的内核源码进行编译;修改编译选项,将目标内存管理器中的内存操作接口与内存检测工具进行适配。
在本实施例中还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,创建目标内存管理器,通过调用第三方系统接口,封装目标内存管理器的内存操作接口。
S2,修改PostgreSQL数据库的内核源码,将PostgreSQL数据库的原内存管理器,替换为目标内存管理器。
S3,在对PostgreSQL数据库的内核源码编译时,将目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
需要说明的是,在本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,在本实施例中不再赘述。
此外,结合上述实施例中提供的PostgreSQL数据库内存检测方法,在本实施例中还可以提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种PostgreSQL数据库内存检测方法。
应该明白的是,这里描述的具体实施例只是用来解释这个应用,而不是用来对它进行限定。根据本申请提供的实施例,本领域普通技术人员在不进行创造性劳动的情况下得到的所有其它实施例,均属本申请保护范围。
显然,附图只是本申请的一些例子或实施例,对本领域的普通技术人员来说,也可以根据这些附图将本申请适用于其他类似情况,但无需付出创造性劳动。另外,可以理解的是,尽管在此开发过程中所做的工作可能是复杂和漫长的,但是,对于本领域的普通技术人员来说,根据本申请披露的技术内容进行的某些设计、制造或生产等更改仅是常规的技术手段,不应被视为本申请公开的内容不足。
“实施例”一词在本申请中指的是结合实施例描述的具体特征、结构或特性可以包括在本申请的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本领域的普通技术人员能够清楚或隐含地理解的是,本申请中描述的实施例在没有冲突的情况下,可以与其它实施例结合。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种PostgreSQL数据库内存检测方法,其特征在于,包括:
创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口;
修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器;
在对所述PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的所述内存操作接口与目标内存检测工具进行适配。
2.根据权利要求1所述的PostgreSQL数据库内存检测方法,其特征在于,所述创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口,包括:
在所述内存操作接口为内存分配接口时,通过调用所述第三方系统接口的内存分配接口,封装所述目标内存管理器的内存分配接口;
将所述内存分配接口中的内存分配信息存储于预设的内存信息表中;
通过所述内存分配接口输出所述内存分配信息中的内存地址信息。
3.根据权利要求1所述的PostgreSQL数据库内存检测方法,其特征在于,所述创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口,包括:
在所述内存操作接口为内存释放接口时,通过调用所述第三方系统接口的内存释放接口,封装所述目标内存管理器的内存释放接口;
根据所述内存释放接口中的内存释放信息,对应删除预设的内存信息表中对应内存信息。
4.根据权利要求1所述的PostgreSQL数据库内存检测方法,其特征在于,所述修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器,包括:
修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的内存上下文中的内存管理指针,指向所述目标内存管理器。
5.根据权利要求1所述的PostgreSQL数据库内存检测方法,其特征在于,所述在对所述PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的所述内存操作接口与目标内存检测工具进行适配,包括:
使用目标编译器,对所述PostgreSQL数据库的内核源码进行编译;
修改编译选项,将目标内存管理器中的所述内存操作接口与内存检测工具进行适配。
6.根据权利要求2所述的PostgreSQL数据库内存检测方法,其特征在于,所述存储所述内存分配接口中的内存分配信息存储于内存信息表中,包括:
将所述内存分配信息中的所述内存地址信息与内存上下文映射关系存储于预设的全局内存上下文映射表中;
将所述内存分配信息中的所述内存地址信息与内存块元信息映射关系存储于预设的内存块元信息表中。
7.根据权利要求2所述的PostgreSQL数据库内存检测方法,其特征在于,所述创建目标内存管理器,还包括:
根据所述内存信息表,对所述PostgreSQL数据库的内存使用量进行统计。
8.一种PostgreSQL数据库内存检测系统,其特征在于,包括:
创建模块,用于创建目标内存管理器,通过调用第三方系统接口,封装所述目标内存管理器的内存操作接口;
选择模块,用于修改所述PostgreSQL数据库的内核源码,将所述PostgreSQL数据库的原内存管理器,替换为所述目标内存管理器;
适配模块,用于在对PostgreSQL数据库的内核源码编译时,将所述目标内存管理器中的内存操作接口与目标内存检测工具进行适配。
9.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至权利要求7中任一项所述的PostgreSQL数据库内存检测方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至权利要求7中任一项所述的PostgreSQL数据库内存检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310213124.7A CN115878405A (zh) | 2023-03-08 | 2023-03-08 | PostgreSQL数据库内存检测方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310213124.7A CN115878405A (zh) | 2023-03-08 | 2023-03-08 | PostgreSQL数据库内存检测方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115878405A true CN115878405A (zh) | 2023-03-31 |
Family
ID=85761938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310213124.7A Withdrawn CN115878405A (zh) | 2023-03-08 | 2023-03-08 | PostgreSQL数据库内存检测方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878405A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140195476A1 (en) * | 2013-01-10 | 2014-07-10 | Sap Ag | Generating notification from database update |
CN112631893A (zh) * | 2019-09-24 | 2021-04-09 | 无锡江南计算技术研究所 | 面向异构平台的多层次存储结构内存检测方法 |
CN112967759A (zh) * | 2021-05-06 | 2021-06-15 | 内蒙古博佰网络科技有限公司 | 基于内存堆栈技术的dna物证鉴定str分型比对方法 |
CN114546795A (zh) * | 2021-12-27 | 2022-05-27 | 浙江大华技术股份有限公司 | 内存泄露检测方法、电子设备和计算机可读存储介质 |
CN115470008A (zh) * | 2022-11-14 | 2022-12-13 | 杭州拓数派科技发展有限公司 | 一种元数据访问方法、装置和存储介质 |
CN115509741A (zh) * | 2022-09-06 | 2022-12-23 | 成都赛力斯科技有限公司 | 一种内存管理系统、越界检测方法及存储介质 |
-
2023
- 2023-03-08 CN CN202310213124.7A patent/CN115878405A/zh not_active Withdrawn
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140195476A1 (en) * | 2013-01-10 | 2014-07-10 | Sap Ag | Generating notification from database update |
CN112631893A (zh) * | 2019-09-24 | 2021-04-09 | 无锡江南计算技术研究所 | 面向异构平台的多层次存储结构内存检测方法 |
CN112967759A (zh) * | 2021-05-06 | 2021-06-15 | 内蒙古博佰网络科技有限公司 | 基于内存堆栈技术的dna物证鉴定str分型比对方法 |
CN114546795A (zh) * | 2021-12-27 | 2022-05-27 | 浙江大华技术股份有限公司 | 内存泄露检测方法、电子设备和计算机可读存储介质 |
CN115509741A (zh) * | 2022-09-06 | 2022-12-23 | 成都赛力斯科技有限公司 | 一种内存管理系统、越界检测方法及存储介质 |
CN115470008A (zh) * | 2022-11-14 | 2022-12-13 | 杭州拓数派科技发展有限公司 | 一种元数据访问方法、装置和存储介质 |
Non-Patent Citations (1)
Title |
---|
付晓毓;朱利;顾伟;: "基于模型检测的内存泄露静态测试方法", 微电子学与计算机 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10908925B2 (en) | Dynamic loading method, and target file creation method and apparatus | |
CN102760080B (zh) | 一种内存管理的方法和装置 | |
KR102281052B1 (ko) | 이동 단말 애플리케이션 업데이트 방법 및 장치 | |
CN108647032B (zh) | 应用加载方法及装置、计算机装置和计算机可读存储介质 | |
CN110928548B (zh) | 一种数据处理方法以及设备 | |
CN110888658A (zh) | 应用程序中功能模块的动态化方法、装置及存储介质 | |
CN110554998A (zh) | 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质 | |
CN114327477A (zh) | 智能合约执行方法、装置、电子装置和存储介质 | |
CN111290740B (zh) | 应用程序的开发方法、装置、计算机设备和存储介质 | |
CN112667405A (zh) | 信息处理方法、装置、设备及存储介质 | |
CN106775916B (zh) | 减小应用安装包的方法、装置及电子设备 | |
CN116560878B (zh) | 一种内存共享方法和相关装置 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN115878405A (zh) | PostgreSQL数据库内存检测方法和系统 | |
CN112214325A (zh) | Fpga任务动态编排方法、装置、芯片和存储介质 | |
CN115599588A (zh) | 内存使用信息的获取方法、装置、存储介质及电子装置 | |
CN114860204A (zh) | 程序处理、运行方法、装置、终端、智能卡及存储介质 | |
CN113971072A (zh) | 信息处理方法、装置、设备、存储介质及计算机程序产品 | |
CN110704295B (zh) | 一种数据调用方法、装置、设备及系统 | |
CN113282541A (zh) | 文件调用方法、装置和电子设备 | |
CN112612474A (zh) | 产品移植方法、装置、存储介质和电子设备 | |
CN110750746A (zh) | 一种数据接收、推送的方法、装置、设备及可读介质 | |
Dunkels | A low-overhead script language for tiny networked embedded systems | |
Rauchwerger et al. | Cinderella SLIPPER: An SDL to C-code generator | |
CN116414378A (zh) | 基于WeexSDK框架的页面打包方法、页面加载方法及装置 |
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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20230331 |