用于自动管理计算单元中动态分配的内存的方法和系统的制作方法

文档序号:9794025阅读:486来源:国知局
用于自动管理计算单元中动态分配的内存的方法和系统的制作方法
【技术领域】
[0001] 本发明涉及数据库技术。具体而言,本发明涉及一种用于自动管理计算单元中动 态分配的内存的方法和系统。
【背景技术】
[0002] 计算机系统可动态管理计算机内存。动态内存管理指的是出于特定目的临时分配 内存块,并当不再需要该内存块时释放(deallocate)内存块的过程。出于另一目的,释放的 块可用于再分配。计算机系统中配置的处理单元所管理的内存称为"堆"。当程序/应用需要 内存块以存储数据时,程序/应用向处理单元发送请求。处理单元分配堆中的内存块以满足 请求并向程序/应用发送指针。随后,程序/应用可以通过指针访问内存块。
[0003] 计算机内存存储有一个或多个数据库中的数据。数据涉及一个或多个机构,例如 金融机构、商业机构、政府机关、教育机构、数据安全中心、天气预报中心、制造企业。数据库 可以是关系型数据库、网络数据库、面向对象的数据库以及层次数据库。通常,关系型数据 库是关系(通常称为表)的集合。关系型数据库使用一组数学术语,这些数学术语可使用结 构化查询语言(SQL)数据库术语。例如,关系可定义为具有相同属性的元组(tuple)集合。元 组通常表示对象以及关于该对象的信息。关系通常被描述为组织成行和列的表。通常,被一 个属性引用的所有数据都在同一域中并且遵循相同的约束。关系模型规定关系的元组没有 具体顺序,并且元组也不反过来对属性施加顺序。
[0004] 程序/应用通过特定的查询从一个或多个数据库读取数据以及将数据写入一个或 多个数据库,这些查询使用操作来识别元组、识别属性以及组合关系。类似地,查询可以识 别用于更新或删除的元组。当更新行时,创建该行的新版本并将其插入表中。新版本占用堆 中的额外空间。先前版本给新版本提供了指针。先前版本标记为过期,但仍保留在数据库中 直至被垃圾收集器收集。垃圾收集是动态内存管理检测并恢复程序/应用不再访问的内存 的过程。因此,这些内存可以被释放以及用于后续的再分配,从而提高数据库的性能。
[0005] 提高数据库性能的方法之一在于使用多版本并发控制(MVCC) IVCC的目的在于通 过使用多个数据版本避免以下问题:写入器将数据写入一个或多个数据库,阻塞了读取器 访问来自这一个或多个数据库的数据,反之亦然。如果读取器可以访问写入器为进行修改 而锁定的数据的先前版本,可以避免写入器阻碍读取器的问题。通过确保读取器无法获得 数据上的锁可以避免读取器阻碍写入器的问题。出于该目的,MVCC允许存在多个版本的数 据,保证始终在事务中查看数据并防止了事务、读取器、写入器之间的干扰,从而提高数据 并发性。但是,缺点随之产生:在每个事务的时长内,随着创建的新版本的增多,所访问的数 据变多,所以对性能有相应的不良影响。
[0006] 在SQL中,由于存在多个版本的数据,所以必须运行VACCUM命令来管理一个或多个 数据库中由于多版本的存在而创建的不必要区域以进行垃圾收集操作。这释放了一些区域 用于在其他操作中进行重用。定期运行VACCUM命令还可防止数据库变得过大。然而遗憾的 是,在运行稳定的系统中很难运行VACCUM命令,致使数据库中创建的许多不必要区域重复 添加或更新。这还会导致数据库文件变得过大。
[0007] 图1示出了在计算单元中分配内存的现有方法,该方法创建多个数据版本以提高 数据库的性能。例如,处理单元接收来自客户端机器的查询。收到的查询如下所示。
[0008] UPDATE suppliers
[0009] SET city = 'Santa Clara'
[0010] WHERE supplier_name =(NVI';
[0011 ]涉及供应商的数据存储在'供应商(SUPPLIERS) '表中。如下所示,'供应商'表存储 了行和列形式的供应商ID、供应商名称以及供应商城市等数据。
[0013]处理单元识别出收到的查询涉及更新(UPDATE)操作。查询为将命名为NVI的供应 商的城市从'A'设置为'圣克拉拉'。处理单元进行更新操作并且数据在如下所示的'供应 商'表中更新。
[0015]表1
[0016]通常,与数据库1的所有表相关的数据存储为数据段,如图1所示。内存空间5001至 5004分配给'供应商'表,即与所有供应商有关的数据都存储在该内存空间。当更新城市时, 新数据版本被创建。新版本存储在图1所示的相同数据段中。将内存空间6001分配给新数据 版本。类似地,无论何时数据中存在变化,更新的数据或删除的数据存储在相同数据段中。
[0017] 图1所示的场景的局限在于,无论垃圾收集器何时进行垃圾收集,垃圾收集器需要 处理数据段中的多余行以检测和恢复任何程序/应用不再利用的内存空间。由于需要对新 数据版本进行额外的处理,所以VACUUM(或者称为垃圾收集器)的性能以及I/O受到影响。
[0018] 进一步地,如果处理单元收到的查询为回滚(ROLLBACK),处理单元需要执行许多 撤销记录以完成回滚/恢复。特别是为插入/删除(INSERT/DELETE)重放撤销(UNDO)是一种 实际操作的完全反向操作,这种操作昂贵且耗时。随着同一事务中的操作数目增加,撤销的 数目增加,从而进行回滚操作的时间增加。因此,回滚性能也下降。
[0019] 因此,需要一种用于自动管理计算单元中动态分配的内存的方法和系统,通过该 方法和系统提尚垃圾收集器的性能并且提尚回滚和恢复的性能。

【发明内容】

[0020] 通过本发明克服了现有技术的缺点并提供了额外优点。通过本发明的技术可以实 现额外特征和优点。本发明的其他实施例和方面在本文中进行了详细说明,它们被视为所 要求的发明的一部分。
[0021] 本发明提供了一种用于自动管理计算单元中动态分配的内存的方法。所述方法包 括处理单元接收一个或多个查询,其中所述处理单元用于对一个或多个数据库执行操作以 响应于所述收到的一个或多个查询。所述处理单元收到所述一个或多个查询时确定所述收 到的一个或多个查询是否涉及插入、删除以及第一类型的更新中的至少一项。如果所述收 到的一个或多个查询涉及插入、删除以及第一类型的更新中的至少一项,那么所述处理单 元为所述一个或多个数据库中存储的预定数据集创建堆记录。如果所述收到的一个或多个 查询涉及第二类型的更新,那么所述处理单元为所述一个或多个数据库中存储的所述预定 数据集创建撤销记录。
[0022] 本发明提供了一种用于自动管理计算单元中动态分配的内存的系统。所述系统包 括用于存储一个或多个数据库的内存单元以及通信式地耦合到所述内存单元的处理单元。 所述处理单元接收一个或多个查询并基于所述收到的一个或多个查询对所述一个或多个 数据库执行操作。所述处理单元在将所述收到的一个或多个查询识别为插入、删除以及第 一类型的更新中的至少一项时为所述一个或多个数据库中存储的预定数据集创建堆记录, 并在将所述收到的一个或多个查询识别为第二类型的更新时为所述一个或多个数据库中 存储的所述预定数据集创建撤销记录。
[0023]本发明涉及存储有操作的非瞬时计算机可读介质,当至少一个处理单元处理所述 操作时,促使系统接收一个或多个查询并对内存单元中存储的一个或多个数据库执行操作 以响应于所述收到的一个或多个查询。当收到所述一个或多个查询时,一旦确定所述收到 的一个或多个查询为插入、删除以及第一类型的更新中的至少一项,为所述一个或多个数 据库中存储的预定数据集创建堆记录;一旦确定所述收到的一个或多个查询为第二类型的 更新,为所述一个或多个数据库中存储的所述预定数据集创建撤销记录。
[0024] 本发明提供了一种用于自动管理计算单元中动态分配的内存的计算机程序。所述 计算机程序包括用于接收一个或多个查询的代码段,用于基于所述收到的一个或多个查询 对一个或多个数据库执行操作的代码段,用于当确定所述收到的一个或多个查询为插入、 删除以及第一类型的更新中的至少一项时为所述一个或多个数据库中存储的预定数据集 创建堆记录的代码段,以及用于当确定所述收到的一个或多个查询为第二类型的更新时为 所述一个或多个数据库中存储的所述预定数据集创建撤销记录的代码段。
[0025] 以上概述仅作说明之用,并非旨在加以任何限制。除了以上所述的说明性方面和 特征外,进一步的方面和特征通过参考附图和以下详细说明变得显而易见。
【附图说明】
[0026] 本发明的新颖的特点和特征如所附权利要求中进行阐述。但是本发明自身、优选 的使用方式,及其其他目的和优势,也可以通过参考以下说明性实施例的详细说明结合附
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1