PostgreSQL

Stella981
• 阅读 434

内存上下文背景:

需要经常处理大量以指针传值的查询,存在内存泄漏的问题,直到查询结束才能收回内存。所以实现了新的内存管理机制-内存上下文(MemoryContext)

内存上下文通俗解释:

一个内存上下文相当于一个进程环境,进程环境间不互相影响,pgSQL提供了在内存上下文进行内存操作的函数:pallloc、pfree、repalloc等。

MemoryContext:

pgSQL的每一个子进程都拥有多个私有的内存上下文,每个子进程的内存上下文组成一个树形结构,根节点为TopMemoryContext。

创建一个新的内存上下文,将其添加到已有的内存上下文作为子节点。清除内存的时候可以从根节点遍历,将所有节点的内存完全释放PostgreSQL

内存处理函数:包含了对内存上下文进行操作的函数集合

PostgreSQL 

 1.对内存上下文的操作,都是全局变量AllocSetMethods中实现的操作函数来控制的。

 2.在任何时候,都有一个"当前"的MemoryContext,记录在全局变量CurrentMemoryContext。进程就在这个内存上下文中调用palloc分配内存。

 3.变换内存上下文,使用MemoryContextSwitchTo函数

AllocSet:

管理一个内存上下文中的内存块是通过AllocSet结构完成,MemoryContext只作为AllocSet头部信息,AllocSet是指向AllocSetContext结构的类型指针。

PostgreSQL

 可以在进行重置的时候,检查isReset是否为true,如果为true就不需要重置操作,提高效率。

keeper在重置时只会把内存里的内容删除。

MemoryContext创建与初始化:

调用MemoryContextInit做初始化。先创建根节点TopMemoryContext,然后在该节点下创建ErrorContext用于错误恢复处理

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
九路 九路
3年前
Android 内存管理机制
前言:Android系统是基于Linux内核开发的操作系统,而Linux系统有其独到的内存管理机制,会在进程活动停止后结束该进程。Android在此基础上优化了内存管理,会把进程都保存在内存中,直到系统需要更多内存为止,释放部分进程。这些被保存在内存中的进程,并不会影响系统的运行速度,相反,在重新打开这些进程时,会提升进程启动速度Android内存管
Stella981 Stella981
2年前
IntelliJ IDEA 卡成球了?该怎么优化?
在和同事的一次讨论中发现,对IntelliJIDEA内存采用不同的设置方案,会对IDE的速度和响应能力产生不同的影响。!(https://oscimg.oschina.net/oscnet/bd07884d333b458cb68178a35c74e038.png)昨天,大家就是否自定义IntelliJIDEA的内存设置进行了
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
32位xp系统识别4G以上内存
32位xp系统识别4G以上内存大多数用户使用的xp系统都是32位,32位操作系统无法识别4G以上的内存,即便是4G内存,最多只能识别3.25G左右的内存。那么xp系统要怎么识别4G内存呢?!icon_rar.gif(https://static.oschina.net/uploads/img/202007/
Stella981 Stella981
2年前
Flask的RuntimeError错误处理
在Flask框架中,为我们提供了丰富的上下文对象/变量(request、session、current\_app、g),这些上下文对象可以根据不同的上下文环境具备不同的值,所以他们是依赖于上下文环境的,而他们的使用也必须在上下文环境中,如果脱离了上下文环境,对这些没有上下文环境的上下文对象/变量进行相应的操作就会报错:RuntimeError  通俗一点
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这