一、简介

linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型。

在Postgresql中可以使用dynamic_shared_memory_type参数指定共享内存类型。

默认使用posix,修改参数后需要重启数据库。

dynamic_shared_memory_type = posix  # the default is the first option

                  # supported by the operating system:
                  # posix
                  # sysv
                  # windows
                  # mmap
                  # (change requires restart)

二、共享内存如何工作

当一个进程的数据需要与另一个进程共享时,第一个进程简单地将数据写入共享内存段。 一旦写入数据,第二个进程就可以使用该数据。 一旦创建了共享内存对象,访问该对象的进程就可以使用指针直接读写该对象。这里不会对各种类型的原理进行详解。

三、

三、Postgresql动态共享内存

创建和管理共享内存段是操作系统的任务,一旦创建了共享内存段:

1、动态共享内存段需要进行引用计数,这样当最后一个映射被移除时,段就会自动消失

2、如果后台进程被不干净地终止,PG的postmaster需要在崩溃-重启过程中删除所有剩余的段,和重新初始化主共享内存段类似。

3、如果所有进程都被不干净地终止了,那么下一次postmaster启动时需要清理仍然存在的段。

四、动态共享控制段

动态共享控制段由postmaster创建其他进程之前创建,它用于存储所有动态共享内存段的标识列表,以及每个段的引用计数。它有以下作用

1、如果Postgresql经历了一个奔溃恢复周期,那么会扫描控制段并删除其它涉及的控制段,然后重建控制段。
2、如果postmaster通过kill -9干掉并重启,那么它会找到旧的控制段删除并重建。
3、如果操作系统被重新启动,旧的控制段将不再存在,除了在map-a-regular-file下,该处理方法是通过扫描相关目录而不是依赖于控制段来处理和清理。

修改dynamic_shared_memory_type参数指定类型

如果遇到以下错误:

ERROR: could not open shared memory segment “/PostgreSQL.xxxxxxx”: No such file or directory

说明动态内存控制段不存在,有可能被删除了,可以通过重启数据库,或者断开所有连接再重连,均达到重新创建动态内存控制段的目的

最新文章

  1. Mac下使用firefoxdriver
  2. android注解使用详解(图文)
  3. Tomcat 原理篇
  4. iOS开发App上传的三大步骤
  5. javascript中常用坐标属性offset、scroll、client
  6. 模板方法模式(Tempalte Method Pattern)
  7. (一)初识mybatis
  8. 确定有穷自动机(DFA)的化简(最小化)
  9. linux平均负载的理解及原因排查
  10. DOM对象和window对象
  11. easyui 信息提示
  12. IntelliJ IDEA web项目 工程构建运行部署
  13. Anaconda使用命令
  14. appium+python自动化测试
  15. 03-03:springBoot 整合thymeleaf
  16. javascript:this指向
  17. iOS边练边学--view的封装
  18. 【bzoj1022】小约翰的游戏John
  19. MongoDB 复制一个collection里的数据到另一个collection
  20. 如何在Windows中安装GitHub

热门文章

  1. 常用的渗透测试工具——SQLMap安装
  2. VMware虚拟机开机黑屏解决方法
  3. JavaScript:七大基础数据类型:数值number及其表示范围
  4. [机器学习] Yellowbrick使用笔记8-模型选择可视化
  5. [python] python模块graphviz使用入门
  6. 深入Typescript--03-Typescript中的类(努力加餐饭)
  7. 使用json数据动态创建表格2(多次绘制第一次简化 var tr=tbody.insertRow();)
  8. drf基础:1、web应用模式、API接口、接口测试工具
  9. 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
  10. python开发云主机类型管理脚本