PostgreSQL深度解析:从基础到高级性能优化

奇点 1140 0

首先是数据库的安装,PostgreSQL官网上不像MySQL那样提供了二进制包的下载,PostgreSQL主要提供了RPM包下载和源码下载,通常使用源码编译安装,安装步骤相对比较简单:

######postgres单实例安装
1、官网下载源码包:https://www.postgresql.org/ftp/source/v14.8/

2、解压
tar -xvf postgresql-14.0.tar.gz

3、新建postgres用户
groupadd postgres
useradd -g postgres postgres

4、安装依赖包
yum install *zlib*
yum install *libreadline*

5、编译安装
./configure
make && make install

6、修改安装目录所属用户组
chown -R postgres:postgres /usr/local/pgsql

7、新建postgresql的数据目录
mkdir /pgdata
chown postgres:postgres /pgdata

8、配置环境变量
su - postgres
vi ~/.bash_profile
export PATH=$PATH:/usr/local/pgsql/bin

9、初始化数据库
initdb -D /pgdata

10、启动数据库
pg_ctl -D /pgdata start

11、验证是否可登录
psql

这段代码展示了如何在PostgreSQL中创建一个新数据库、创建一个新用户、授权用户访问该数据库、创建一个简单的表、插入一条记录以及查询这条记录。这是学习PostgreSQL的一个基本入门,对于开发者来说非常有帮助。

-- 创建一个新的PostgreSQL数据库
CREATE DATABASE mydatabase;
 
-- 连接到新创建的数据库
\c mydatabase
 
-- 创建一个新的用户
CREATE USER myuser WITH PASSWORD 'mypassword';
 
-- 给用户授权访问特定数据库的权限
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
 
-- 创建一个简单的表
CREATE TABLE mytable (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
 
-- 插入一条记录
INSERT INTO mytable (name) VALUES ('My First Entry');
 
-- 查询记录
SELECT * FROM mytable;

安装完成后,会自动在数据目录下面生成配置文件,根据实际情况首先需要修改配置文件postgresql.conf和访问控制文件pg_hba.conf。修改完后通过pg_ctl命令重启PG。

#####配置文件postgresql.conf
#connection control
listen_addresses = '*'  #不限制连接ip
max_connections = 1000
superuser_reserved_connections = 10 #为超级用户保留的连接数

#memory management      
shared_buffers = 512MB    #推荐操作系统物理内存的1/4                          
work_mem = 8MB        #单个查询操作(例如排序或哈希表)可使用的最大内存                 
maintenance_work_mem = 512MB       #维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)中使用的最大的内存  
max_files_per_process = 24800           
effective_cache_size = 1GB   #推荐操作系统物理内存的1/2

#log optimization
log_destination = 'csvlog'             
logging_collector = on          
log_directory = '/pgdata/logs'        # 日志存放路径,提前规划在系统上创建好 
log_truncate_on_rotation = on       


#####访问控制文件pg_hba.conf加上下面这行
host    all             all             0.0.0.0/0               md5

PostgreSQL通过WAL日志进行主从同步,不同于MySQL通过binlog进行逻辑复制。并且PostgreSQL 在9.x之后引入了主从的流复制机制,所谓流复制,就是备服务器通过tcp流从主服务器中同步相应的数据,主服务器在WAL记录产生时即将它们以流式传送给备服务器,而不必等到WAL文件被填充。主从复制搭建的具体步骤可以参考如下:

#####主从同步配置
主库创建同步账号
CREATE ROLE replica login replication encrypted password 'Temp##2022';

主库修改pg_hba.conf增加从库访问控制
host    replication     replica         10.2.111.192/32         md5

主库重启
pg_ctl -D /pgdata restart

停止从库
pg_ctl stop -D /pgdata

清空从库数据文件
rm -rf  /pgdata/*

从库拉取主库数据文件
pg_basebackup -h 10.2.111.192 -D /pgdata -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast

从库postgresql.conf文件添加主库信息
primary_conninfo = 'host=10.2.111.193 port=5432 user=replica password=Temp##2022'

启动从库
pg_ctl start -D /pgdata

主库验证主从同步正常
select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;

备库提升为主库
pg_ctl promote -D /pgdata
pg_controldata -D /pgdata | grep cluster  #检查数据库状态,为in production,说明备库已提升为主库

PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步。

标签: #PostgreSQL #数据库 #性能优化 #SQL #数据库管理

分享:

支付宝

QQ

请先 登录 再评论,若不是会员请先 注册