PostgreSQL 监听进程 (Postmaster)

本文详细介绍了PostgreSQL中监听进程涉及的两个关键概念:操作系统层面的TCP/IP端口监听以及数据库内部的LISTEN/NOTIFY机制。通过配置文件和SQL命令展示了如何管理和使用这些功能,以实现异步通信和事件驱动应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PostgreSQL 监听进程 (Postmaster)

Postmaster 是 PostgreSQL 的核心守护进程,负责管理整个数据库实例的运行,包括客户端连接处理、子进程管理等关键功能。

一 Postmaster 核心架构

1.1 进程模型

fork
Postmaster
客户端连接
后台进程
后端进程
AutoVacuum
WAL Writer
Checkpointer
Logger
BgWriter

1.2 主要职责

  • 连接管理:监听端口,处理新连接请求
  • 进程派生:为每个客户端连接创建后端进程
  • 子进程监控:管理所有子进程的生命周期
  • 共享内存管理:初始化和管理共享内存区域
  • 崩溃恢复:检测和处理系统崩溃后的恢复

二 关键配置参数

2.1 连接相关配置

参数默认值推荐值作用
listen_addresses‘localhost’‘*’监听IP地址
port54325432监听端口
max_connections100300-500最大连接数
superuser_reserved_connections33保留连接数

2.2 进程管理配置

参数默认值推荐值作用
autovacuum_max_workers33-5自动清理进程数
wal_writer_delay200ms100msWAL写入延迟
bgwriter_delay200ms100ms后台写入延迟

2.3 内存相关配置

参数默认值推荐值作用
shared_buffers128MB25% RAM共享缓冲区
work_mem4MB8-32MB工作内存
maintenance_work_mem64MB256MB维护内存

三 生产环境配置示例

-- 连接和网络配置
ALTER SYSTEM SET listen_addresses = '*';
ALTER SYSTEM SET port = 5432;
ALTER SYSTEM SET max_connections = 500;
ALTER SYSTEM SET superuser_reserved_connections = 5;

-- 内存配置 (32GB内存服务器示例)
ALTER SYSTEM SET shared_buffers = '8GB';
ALTER SYSTEM SET work_mem = '16MB';
ALTER SYSTEM SET maintenance_work_mem = '512MB';

-- 后台进程优化
ALTER SYSTEM SET autovacuum_max_workers = '5';
ALTER SYSTEM SET wal_writer_delay = '100ms';
ALTER SYSTEM SET bgwriter_delay = '100ms';

四 监控与管理

4.1 进程状态检查

# 查看Postmaster及子进程
ps aux | grep postgres | grep -v grep

# 检查监听端口
netstat -tulnp | grep postgres
ss -tulnp | grep postgres

# 检查连接数
SELECT COUNT(*) FROM pg_stat_activity;

4.2 关键指标监控

-- 连接使用率
SELECT 
    max_connections, 
    (SELECT count(*) FROM pg_stat_activity) AS used_connections,
    (max_connections - (SELECT count(*) FROM pg_stat_activity)) AS free_connections,
    round(100 * (SELECT count(*) FROM pg_stat_activity) / max_connections, 2) AS connection_usage_pct
FROM pg_settings 
WHERE name = 'max_connections';

-- 子进程状态
SELECT 
    datname, 
    usename, 
    application_name,
    state, 
    COUNT(*) 
FROM pg_stat_activity 
GROUP BY 1,2,3,4;

五 高级管理与优化

5.1 连接池配置

-- 使用pgBouncer连接池推荐配置
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20

5.2 资源限制管理

# 使用cgroups限制PostgreSQL资源
cgcreate -g cpu,memory:/postgresql
echo "500000" > /sys/fs/cgroup/cpu/postgresql/cpu.cfs_quota_us
echo "32G" > /sys/fs/cgroup/memory/postgresql/memory.limit_in_bytes

六 故障处理

6.1 常见问题解决

问题1:无法连接数据库

# 检查Postmaster是否运行
pg_ctl status

# 检查日志获取详细信息
tail -n 50 $PGDATA/pg_log/postgresql-*.log

# 常见修复步骤
pg_ctl restart -m fast

问题2:连接数耗尽

-- 释放空闲连接
SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE state = 'idle' AND pid <> pg_backend_pid();

-- 长期解决方案
ALTER SYSTEM SET max_connections = 600;

七 安全最佳实践

  1. 网络层安全

    -- 限制监听IP
    ALTER SYSTEM SET listen_addresses = '192.168.1.100,127.0.0.1';
    
    -- 修改默认端口
    ALTER SYSTEM SET port = 5777;
    
  2. 认证控制

    # pg_hba.conf 示例配置
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    all             all             192.168.1.0/24          md5
    hostssl all             all             0.0.0.0/0               scram-sha-256
    
  3. 进程隔离

    # 使用专用用户运行PostgreSQL
    sudo -u postgres psql -c "SELECT version();"
    

Postmaster 是 PostgreSQL 的核心枢纽,合理配置可以:

  • 提高连接处理效率30%以上
  • 增强系统稳定性
  • 优化资源利用率
  • 提供更好的安全控制

谨记:心存敬畏,行有所止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值