运维打铁: PostgreSQL 数据库性能优化与高可用方案
文章目录
- 思维导图
- 一、性能优化
- 1. 查询优化
- 索引优化
- 查询语句优化
- 2. 配置参数调优
- 内存参数
- 并发参数
- 3. 存储优化
- 磁盘 I/O 优化
- 表空间管理
- 二、高可用方案
- 1. 主从复制
- 主库配置
- 从库配置
- 2. 流复制
- 主库配置
- 从库配置
- 3. 集群方案
- PgPool-II
- PgBouncer
- 总结
思维导图
一、性能优化
1. 查询优化
索引优化
索引可以加快查询速度,下面是创建索引的示例代码:
-- 创建单列索引
CREATE INDEX idx_users_name ON users (name);-- 创建多列索引
CREATE INDEX idx_orders_customer_product ON orders (customer_id, product_id);
查询语句优化
避免使用 SELECT *
,尽量指定需要的列。
-- 不推荐
SELECT * FROM users;-- 推荐
SELECT id, name, email FROM users;
2. 配置参数调优
内存参数
修改 postgresql.conf
文件中的 shared_buffers
参数,增加共享缓冲区的大小。
# 修改前
shared_buffers = '128MB'# 修改后
shared_buffers = '512MB'
并发参数
调整 max_connections
参数,增加最大连接数。
# 修改前
max_connections = 100# 修改后
max_connections = 200
3. 存储优化
磁盘 I/O 优化
使用高速磁盘,如 SSD,并调整 fsync
参数。
# 修改前
fsync = on# 修改后
fsync = off
注意:fsync = off
会提高性能,但在系统崩溃时可能会丢失数据。
表空间管理
创建新的表空间并将大表移动到该表空间。
-- 创建表空间
CREATE TABLESPACE large_data_tbs LOCATION '/data/large_data';-- 将表移动到新的表空间
ALTER TABLE large_table SET TABLESPACE large_data_tbs;
二、高可用方案
1. 主从复制
主从复制是一种基本的高可用方案,以下是配置主从复制的步骤:
主库配置
修改 postgresql.conf
文件:
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 32
修改 pg_hba.conf
文件,允许从库连接:
host replication replica_user 192.168.1.0/24 md5
从库配置
使用 pg_basebackup
命令从主库复制数据:
pg_basebackup -h 192.168.1.100 -D /var/lib/postgresql/13/main -U replica_user -P
修改 postgresql.conf
文件:
hot_standby = on
创建 recovery.conf
文件:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.100 port=5432 user=replica_user password=password'
2. 流复制
流复制是一种实时复制方案,配置步骤与主从复制类似,但需要在主库和从库上进行更多的配置。
主库配置
修改 postgresql.conf
文件:
wal_level = logical
max_wal_senders = 10
wal_keep_segments = 32
从库配置
使用 pg_basebackup
命令从主库复制数据,然后修改 postgresql.conf
文件:
hot_standby = on
创建 recovery.conf
文件:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.100 port=5432 user=replica_user password=password'
3. 集群方案
PgPool-II
PgPool-II 是一个 PostgreSQL 的中间件,用于实现负载均衡和高可用。以下是简单的配置示例:
# pgpool.conf
listen_addresses = '*'
port = 9999
backend_hostname0 = '192.168.1.100'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = '192.168.1.101'
backend_port1 = 5432
backend_weight1 = 1
PgBouncer
PgBouncer 是一个轻量级的 PostgreSQL 连接池,以下是简单的配置示例:
# pgbouncer.ini
[databases]
* = host=192.168.1.100 port=5432[pgbouncer]
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = users.txt
总结
PostgreSQL 数据库的性能优化和高可用方案是运维工作中的重要内容。通过查询优化、配置参数调优等方法可以提高数据库的性能,而主从复制、流复制和集群方案可以保证数据库的高可用性。在实际应用中,需要根据具体的业务需求和环境选择合适的优化和高可用方案。同时,定期监控数据库的性能和状态,及时调整配置参数,以确保数据库的稳定运行。