zoukankan      html  css  js  c++  java
  • postgresql设置max_connections太大无法启动 (转载)

    本篇随笔转载自https://my.oschina.net/u/2381678/blog/552346。

    在生产环境postgresql中,需要调整最大链接数,但是调整后无法启动

    错误的意思就是内核中信号量集和信号量的配置太小了。信号量在内核中,主要解决进程间同步、异步的锁问题,因为PostgreSQL的每个链接是一个进程,所以需要更多的锁来使用。查看方法:

    这四个数字分别是:SEMMSL,SEMMNS,SEMOPM,SEMMNI

    SEMMSL:内核参数,控制每个信号量集合的最大信号数。

    SEMMNS:内核参数,控制系统范围内能使用的最大信号量数。

    SEMOPM:semop()函数(内核函数,用来操作信号量)每次调用锁能操作的一个信号量集中的最大信号量。

    SEMMNI:内核中信号量集的最大数量。

    SEMMNS=SEMMSL*SEMMNI

    SEMOPM=SEMMSL,这两个参数一般设置为相同。

    对于PostgreSQL数据库来说:

    SEMMNI >= ceil((max_connections + autovacuum_max_workers + 4) / 16)

    SEMMSL >= 17

    假设一个PG库如下设置:

    max_connections=1000, autovacuum_max_workers =3,

    则这几个参数的设置是:

    SEMMNI = ceil((1000+3+4))/16)=63,因为考虑到其他进程使用,一般设置为63+25=88

    SEMMSL要求大于17,保持默认250

    SEMOPM=SEMSL=250

    SEMMNS=SEMMNI*MSMMSL=88*250=22000

    在/etc/sysctl.conf文件中添加:

    kernel.sem=250  22000 250  88

    运行:sysctl -p    

    使配置生效

    设置完成之后,如果启动数据库还是报同样的错误,那么可以重启操作系统。(具体什么原因,我也不知道,如果有哪位明白的大神,请赐教)

  • 相关阅读:
    python习题:操作mysql数据库,传入sql返回执行结果
    mysql-5.7.21-winx64.zip 下载安装
    Python用起来极度舒适的强大背后
    Python标准库映射类型与可散列数据类型的关系
    windows下《Go Web编程》之Go开发工具
    20行以内python代码画出各种减压图
    windows下《Go Web编程》之Go命令
    navicat连接Oracle数据库
    golang 报错illegal rune literal
    golang 缺少逗号报错问题
  • 原文地址:https://www.cnblogs.com/wangss/p/6502804.html
Copyright © 2011-2022 走看看