一种节约PostgreSQL共享内存的方法及系统技术方案

技术编号:11793787 阅读:114 留言:0更新日期:2015-07-29 20:14
一种节约PostgreSQL共享内存的方法,包括如下步骤:跟踪和统计表被更新和查询的次数;当更新和查询的次数满足设定条件时,触发数据重组,将筛选出的PK所在的行重组至连续的数据块中。以带有10万条记录的表为例,仍然假设其占用1000个8K的数据块,经常需要访问的数据有1000条,应用本发明专利技术所提出的技术方案,将这1000条记录在连续的数据块存储,只需要10个8K的数据块,那么只需要消耗80K的共享内存,既保证了数据访问在内存共享区的命中率,又避免了共享内存的极大浪费。

【技术实现步骤摘要】

本专利技术涉及一种节约PostgreSQL共享内存的方法,还涉及一种应用上述方法的系统。
技术介绍
用户访问PostgreSQL表的数据时,会先将数据加载到数据库的共享内存区,因此,分布越离散的数据,越容易造成共享内存的浪费。为了提高数据访问在内存共享区的命中率,一般的做法是,将经常访问的数据常驻在内存中。举例来说,I个包含10万条记录的表,设定其占用了 1000个8K的数据块,如果经常需要访问的数据有1000条,除此之外,其余数据都是不需要经常访问的,如果这1000条经常访问的记录(数据)刚好分布在1000个数据块中,则需要消耗近8MB共享内存。也就是说,为了提高这个表的1000条活跃记录的查询效率,需要耗费近SM的共享内存,造成了共享内存的极大浪费。
技术实现思路
为解决现有技术中存在的技术问题,本专利技术提出一种节约PostgreSQL共享内存的方法。为达到上述目的,本专利技术提出如下技术方案: 一种节约PostgreSQL共享内存的方法,包括如下步骤:跟踪和统计表被更新和查询的次数;当更新和查询的次数满足设定条件时,触发数据重组,将筛选出的PK所在的行重组至连续的数据块中。上述技术方案还可以进一步优化。作为优选,跟踪和统计表被更新和查询的次数,具体包括如下步骤: 通过PostgreSQL钩子程序在数据库执行SQL语句过程中跟踪和统计表被更新和被查询的次数;存储统计值。作为优选,跟踪和统计表被更新和查询的次数,具体包括如下步骤:在应用层跟踪和统计表被更新和查询的次数;存储统计值。作为优选,除更新的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围。作为优选,除查询的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围、查询次数。作为优选,设定条件是指:在第一预设时间内查询次数超过第一预设值,并且,在第一预设时间内更新次数少于第二预设值。作为优选,数据重组包括如下步骤:得到满足预设条件的主关键字值;根据主关键字值中的行分布情况,筛选需要重组的主关键字条目。作为优选,根据主关键字值中的行分布情况,筛选需要重组的主关键字条目,具体包括如下步骤:当单数据块包含的满足条件的主关键字条目数量小于第三预设值时,则对这些条目进行重组。作为优选,数据重组还包括如下步骤:创建一个临时表;将需要重组的主关键字条目所在的行插入临时表;删除需要重组的主关键字条目在需要重组的表中所在的行;重复上述插入和删除的步骤,直到完成所有需要重组的主关键字条目在临时表中的重组;将新组建的临时表插入需要重组的表。本专利技术还涉及一种应用上述方法的系统。由于上述技术方案的采用,本专利技术相比于现有技术,具有以下优点: 以带有10万条记录的表为例,仍然假设其占用1000个8K的数据块,经常需要访问的数据有1000条,应用本专利技术所提出的技术方案,将这1000条记录在连续的数据块存储,只需要10个8K的数据块,那么只需要消耗80K的共享内存,既保证了数据访问在内存共享区的命中率,又避免了共享内存的极大浪费。【附图说明】图1是本专利技术的一种流程示意图。【具体实施方式】下面结合附图,对本专利技术的【具体实施方式】做进一步解释说明。如图1所示的节约PostgreSQL共享内存的方法,包括如下步骤: (1)跟踪和统计表被更新和查询的次数; (2)当更新和查询的次数满足设定条件时,触发数据重组,将筛选出的PK所在的行重组至连续的数据块中。在一个实施例中,跟踪和统计表被更新和查询的次数,具体包括如下步骤: 通过PostgreSQL钩子程序在数据库执行SQL语句过程中跟踪和统计表被更新和被查询的次数;存储统计值。在上述过程中,除更新的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围。除查询的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围、查询次数。PostgreSQL钩子程序随数据库一起启动,在数据库执行SQL语句过程中,数据访问节点获取记录被更新和查询的次数,并完成累计统计,将统计数据记录到内存结构并定期flush到磁盘,以确保重启数据库统计信息不丢失。需要说明的是,所取得的是最终返回给用户的数据,而不是访问的数据。例如索引扫描,扫描了 10个HEAP BLOCK,但是由于还有其他查询条件,最终返回的结果可能只有少量,那么要跟踪的是返回的记录,而不是被扫描的10个数据块的所有记录。在另一个实施例中,跟踪和统计表被更新和查询的次数,具体包括如下步骤:在应用层跟踪和统计表被更新和查询的次数;存储统计值。在上述过程中,除更新的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围。除查询的次数外还需要记录如下内容:数据库名称、架构、表名称、主关键字、时间范围、查询次数。上述应用层的跟踪动作需要配置内存数据库,如redis,用于存储需要记录的内容。上述步骤(2)中,设定条件是指:在第一预设时间内查询次数超过第一预设值,并且,在第一预设时间内更新次数少于第二预设值。在一个实施例中,第一设定时间是指I天。在另一个实施例中,由于更新频繁的记录一般没有重组的必要,因此,第二预设值不是一个表征更新次数频繁的数值。上述步骤(2)中,数据重组包括如下步骤: 得到满足预设条件的主关键字值(PK值); 根据主关键字值中的行分布情况,筛选需要重组的主关键字(PK)条目,具体包括如下步骤:当单数据块包含的满足条件的主关键字条目数量小于第三预设值时,则对这些条目进行重组。在一个实施例中,PK为I?100的条目分布在I?100号数据块中,PK为101?2当前第1页1 2 本文档来自技高网...

【技术保护点】
一种节约PostgreSQL共享内存的方法,其特征在于,包括如下步骤:跟踪和统计表被更新和查询的次数;当所述的更新和查询的次数满足设定条件时,触发数据重组,将筛选出的PK所在的行重组至连续的数据块中。

【技术特征摘要】

【专利技术属性】
技术研发人员:周正中
申请(专利权)人:杭州米加科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1