`

PostgreSQL服务过程中的那些事三:pg服务进程中的内存上下文

 
阅读更多

 

        题外话:年底了,就以这篇博文结束2012吧


        总结回顾一下 pg 服务进程中的内存上下文吧。

         Pg 的内存管理就像经济体制,计划经济和市场经济并存,主要是共享内存和内存上下文。共享内存就是计划经济,启动时根据各相关参数计算好大小就固定了,使用时也严格按照计划使用。内存上下文就是市场经济,这一部分是按需使用。这两种内存的管理前面有几篇文章做了专门讨论,可以参考 pg的内存管理机制一:AllocSet的内存分配
http://blog.csdn.net/beiigang/article/details/7051589
PostgreSQL的内存管理机制二:AllocSet/MemoryContext的内存回收
http://blog.csdn.net/beiigang/article/details/7058324
PostgreSQL的内存管理机制三:AllocSet/MemoryContext实例删除和内存回收
http://blog.csdn.net/beiigang/article/details/7093975
PostgreSQL的内存管理机制四:AllocSet/MemoryContext的内存再分配
http://blog.csdn.net/beiigang/article/details/7096613
PostgreSQL的内存管理机制十一:初始化共享内存shared memory及其哈希表索引
http://blog.csdn.net/beiigang/article/details/7176390
PostgreSQL的内存管理机制十二:共享内存/shmem分配
http://blog.csdn.net/beiigang/article/details/7288763 等。

         这一节结合前面讨论简单查询的例子回顾一下 pg 服务进程处理简单查询时用到的各内存上下文。

 

1

下面是从 pg 服务进程从 postmaster 进程进程过来的内存上下文。



 

 

2

创建了 CacheMemoryContext 内存上下文 CacheMemoryContext 里创建 catchache 的相关对象 并创建了管理 relchache 的哈希表 RelationIdCache



 

 

3

创建了 PortalMemory 内存上下文 PortalMemory 里创建了管理 protal 的哈西表 “Postal hash” 对象。




 

 

4

创建了 MessageContext TransactionAbortContext TopTransactionContext 内存上下文 TopTransactionContext 创建了内存快照、资源属主 MessageContext 在其里创建了解析树、 query 树、 plan TransactionAbortContext 里记录在事务提交或回滚时要清理相关资源的情况。




 

 

5

创建了 inline_set_returning_function 临时 内存上下文 ,在里面处理内联函数返回值,用完后马上删除。




 

 

6

创建了 PortalHeapMemory ExecutorState HashTableContext HashBatchContext 等内存上下文。这些内存上下文和前面讨论简单查询时的例子紧密相关,会为了完成不同的查询语句而创建不同的内存上下文,下面是前面讨论时用到的例子,及这个查询语句的执行计划。

简单查询例子:

create table test1 (ID numeric(10), cname varchar(30));

create table test2 (ID numeric(10), comp varchar(30));

select cname,comp from test1,test2 where test1.id=test2.id;

 

         该例子的执行计划,可以看出对这两个表做 hash 连接和分别做顺序扫描,并做 hash 连接需要的 hash 运算。

explain  select cname,comp from test1,test2 where test1.id=test2.id;

"Hash Join  (cost=24.63..116.69 rows=2113 width=156)"

"  Hash Cond: (test1.id = test2.id)"

"  ->  Seq Scan on test1  (cost=0.00..16.50 rows=650 width=94)"

"  ->  Hash  (cost=16.50..16.50 rows=650 width=94)"

"        ->  Seq Scan on test2  (cost=0.00..16.50 rows=650 width=94)"

 

PortalHeapMemory 里创建了这个查询计划的描述符 QueryDesc ,及这个查询计划描述符 querydesc 的成员,这个查询计划的执行状态 Estate 等对象。

 

 

 

 

------------
转载请注明出处,来自博客:
blog.csdn.net/beiigang
beigang.iteye.com

 

 

 

 

 

 

  • 大小: 5 KB
  • 大小: 8 KB
  • 大小: 10.8 KB
  • 大小: 17 KB
  • 大小: 19.9 KB
  • 大小: 23.6 KB
1
8
分享到:
评论

相关推荐

    PostgreSQL中文手册9.2

    三、 pg_attrdef: pg_attrdef: pg_attrdef:pg_attrdef:pg_attrdef:pg_attrdef:pg_attrdef:pg_attrdef:pg_attrdef: . 63 四、 pg_authid: pg_authid: pg_authid: pg_authid:pg_authid: 64 五、 pg_auth_members: pg_...

    PostgreSQL 存储过程调试

    当存储过程运行到该行时,执行会暂停,允许检查当前的变量状态和执行上下文。在psql中,虽然没有图形化的断点,但可以通过退出和重新进入存储过程来模拟类似效果。 4. **查看和修改变量** 在存储过程中,可以使用`...

    PGAdmin系统管理PostgreSQL 中文手册

    **PGAdmin系统管理PostgreSQL中文手册** 这本中文手册详细阐述了如何利用pgAdmin这一强大的图形用户界面工具来管理和操作PostgreSQL数据库系统。pgAdmin是一款免费的开源软件,专为PostgreSQL设计,提供了直观的...

    Postgresql存储过程

    Postgresql存储过程是指在Postgresql数据库中定义的一组SQL语句的集合,它可以完成复杂的操作,并且可以重复使用。Postgresql存储过程可以用来实现业务逻辑,减少数据库服务器的压力和网络传输的数据量。 一、存储...

    dbdpg:Perl Postgres驱动程序DBD :: Pg aka dbdpg

    DBD::Pg作为DBI的子模块,专为PostgreSQL提供服务。 **PostgreSQL与libpq** PostgreSQL,通常简称为Postgres,是一种开源的关系型数据库管理系统(RDBMS),以其高度的稳定性和强大的功能著称。libpq是PostgreSQL...

    postgresql离线安装包及依赖库

    这使得用户可以在本地计算机上搭建和运行PostgreSQL数据库服务器。 2. 依赖库:PostgreSQL运行需要一些特定的库文件支持,比如libssl(用于加密通信)、libpq(PostgreSQL的C语言接口库)等。离线安装包通常会打包...

    pgadmin3 - 1.14.2 Postgresql 客户端程序

    5. **数据操作**:pgAdmin3提供数据编辑器,允许你直接在界面上添加、修改和删除记录,非常方便。 6. **备份与恢复**:pgAdmin3也支持数据库的备份和恢复。通过“工具”菜单,选择“备份”或“恢复”命令,按照向导...

    关于PostGreSQL中的存储过程

    其中,存储过程是一个非常重要的概念,本文将对 PostgreSQL 中的存储过程进行详细的介绍和解释。 什么是存储过程 存储过程是一组为了完成特定任务而编写的 SQL 语句集合。它可以将复杂的操作封装起来,以便于重复...

    postgresql客户端pgadmin3-1.8.4

    7. **扩展支持**:pgAdmin3能够管理PostgreSQL的各种扩展,如PostGIS(地理空间数据库)、PL/pgSQL(内置过程语言)和其他第三方模块。 8. **多语言支持**:pgAdmin3-1.8.4支持多种语言,包括中文,使得非英语用户...

    使用Bucardo搭建PostgreSQL数据库双主同步.docx

    在编译 PostgreSQL 的过程中,需要带上 --with-perl 选项,以便正确地安装 Pl/PerlU 语言组件。 五、安装依赖包 在主节点上,需要安装以下依赖包: * DBI 模块 * DBD::Pg 模块 * DBIx::Safe 模块 其中,DBI 模块...

    postgresql-embedded,嵌入式PostgreSQL服务器.zip

    这样的设计对于那些需要在本地或内存中快速访问数据的应用,或者希望减少对外部服务依赖的开发场景特别有用。在【unittests】中使用嵌入式PostgreSQL服务器,可以方便地进行数据库相关的测试,因为无需安装或配置...

    Go-PostgreSQLBGWorker用Go编写的PostgreSQL后台工作进程

    在PostgreSQL数据库系统中,后台工作进程(Background Worker)是一种扩展其功能的重要机制。这些进程独立于主要的数据库服务器进程运行,允许开发者实现自定义任务,如定期维护、监控或其他后台服务。Go语言以其...

    postgresql-42.3.1-API文档-中文版.zip

    Maven坐标:org.postgresql:postgresql:42.3.1; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    linux搭建postgresql、postgis、pg_pathman环境步骤以及需要的软件包

    在Linux系统上搭建PostgreSQL、PostGIS和pg_pathman环境是一项关键的任务,这些组件共同构成了一个强大的地理空间数据库解决方案。PostgreSQL是一种开源的关系型数据库管理系统,具有高度的可扩展性和可靠性;...

    PostgreSQL教程(十一):服务器配置

    pg_ctl -w start -D /opt/PostgreSQL/9.1/data -l /opt/PostgreSQL/9.1/data/pg_log/startup.log ``` 而停止服务器可以使用: ``` pg_ctl stop -m fast -w -D /opt/PostgreSQL/9.1/data ``` ### 二、服务器配置 ##...

    DBD-Pg-2.15.1

    DBD::Pg是Perl编程语言中的一个数据库驱动模块,它与DBI(Database Interface,数据库接口)模块一起工作,为开发者提供了访问PostgreSQL数据库的能力。PostgreSQL是一种强大的开源关系型数据库管理系统,以其高度的...

    PostgreSQL 14.1 中文手册

    PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组

    postgresql--内核分析--多进程结构

    - `src/backend/utils/misc/pg_shmem.c`文件中实现了共享内存的相关功能,这对于多进程之间的通信非常重要。 #### 五、PostgreSQL与MySQL对比 **1. PostgreSQL文件目录组织**: - 整体代码结构清晰,遵循了良好的...

    一套C#与PostgreSQL数据库完美结合的实例

    本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL数据库进行操作时,用到了如何调用存储过程来完成各项操作。...

    PostgreSQL9.6.0-CN中文指南 PG DBA必备

    在开始使用PostgreSQL之前,你需要了解如何在不同的操作系统上安装和配置PostgreSQL 9.6.0。这包括设置环境变量、配置服务器参数、创建数据库集群和启动/停止服务等步骤。 三、数据类型与操作 PostgreSQL提供了丰富...

Global site tag (gtag.js) - Google Analytics