一、简介

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

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

Postgresql动态共享内存类型的更多相关文章

  1. postgresql共享内存的三个结构体

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/16105797 postgresql的共享内存维护主要 ...

  2. 【CUDA 基础】5.2 共享内存的数据布局

    title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...

  3. ipcclean - 从退出的PostgreSQL服务器中删除共享内存和信号灯

    SYNOPSIS ipcclean DESCRIPTION 描述 ipcclean 删除当前用户拥有的所有共享内存段和信号灯集. 它的目地是在 PostgreSQL 服务器 (postmaster(1 ...

  4. OpenMP共享内存并行编程详解

    实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...

  5. 几个系统调用分析 glibc中的malloc调用和共享内存原理

    本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/wri ...

  6. 修改linux共享内存大小

    这是实际linux系统显示的实际数据: beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmax  33554432 beijibing@bjb-deskt ...

  7. System V IPC 之共享内存

    IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...

  8. PostgreSQL进程和内存结构

    PostgreSQL数据库启动时,会先启动一个叫做Postmaster的主进程,还会fork一些辅助子进程,这些辅助子进程各自负责一部分功能,辅助子进程分类如下: $ ps -ef | grep po ...

  9. Nginx之共享内存与slab机制

    1. 共享内存 在 Nginx 里,一块完整的共享内存以结构体 ngx_shm_zone_t 来封装,如下: typedef struct ngx_shm_zone_s ngx_shm_zone_t; ...

  10. Innodb之全局共享内存

    参考链接: https://blog.csdn.net/miyatang/article/details/54881547 https://blog.csdn.net/wyzxg/article/de ...

随机推荐

  1. 关于Window中右键新建菜单的设置

    在日常工作中,有时候需要根据自己的需要对Windows桌面右键新建菜单进行自定义,自定义的方法如下: 1.在Window中输入Win+R调出运行命令框 2.输入regedit,打开注册表 3.如果想要 ...

  2. 图书管理系统、聚合函数、分组查询、F与Q查询

    目录 图书管理系统 1.表设计 2.首页搭建.展示 书籍的添加 书籍编辑 书籍删除 聚合函数 Max Min Sum Count Avg 分组查询 按照表分组 按照字段分组 F与Q查询 F查询 Q查询 ...

  3. Jenkins&&gitlab

    DevOps 强调整个组织的合作以及交付和基础设施变更的自动化 gitlab下载: 下载地址: https://docs.gitlab.com/ee/install/requirements.html ...

  4. 【转载】SQL SERVER 表变量与临时表的优缺点

    什么情况下使用表变量?什么情况下使用临时表? -- 表变量: DECLARE @tb table(id int identity(1,1), name varchar(100)) INSERT @tb ...

  5. CH392/CH395常见问题解决方法指南

    CH395 问题 1: CH395 初始化失败.解答: 1.首先检查"check_exist"命令,正常情况下 CH395 会将该命令的输入值按位取反后输出,若该命令不正常,则说明 ...

  6. 分享一个自己在用的.net 中mysql事务控制类(支持多条sql,参数化,自定义判断条件,错误点返回等)

    1)首先看下事务控制器. using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using Sys ...

  7. elasticsearch之单请求多查询

    一.需要解决的问题 有的时候我们需要同时执行多个查询,并且需要得到每个单独查询的搜索结果,elasticsearch提供了multi search此需求的支持: 二.elasticsearch mul ...

  8. 解析url地址hashhref

  9. 超级容易理解的函数节流(throttle)

    今天搞了一个简单的写法 话不多说,直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  10. 【分析笔记】展讯 RDA8810PL 平台 Camera 驱动分析和移植(Android 4.4 )

    前言概述 因以下原因,导致不得不通过代码分析来学习如何在该平台下进行摄像头驱动移植 香橙派开发商(迅龙软件)仅提供能跑起来的源代码.固件,以及简单的编译文档,不提供其它技术支持 baidu.googl ...