postgresql安装及性能测试

postgresql安装及性能测试

1. Postgresql介绍

Postgresql是一款功能强大的开源对象关系型数据库管理系统(ORDBMS),以其稳定性、扩展性和标准的SQL支持而闻名。它支持复杂查询、外键、触发器、视图、事务完整性、多版本并发控制(MVCC)等特性,且具有丰富的扩展能力,可以通过插件扩展其功能。Postgresql适用于各种场景,从小型应用到大规模企业级应用。

2. Postgresql安装

Postgresql可以安装在多种操作系统上,包括Linux、macOS和Windows。以下是不同系统的安装步骤:

2.1 在Linux上安装Postgresql(以Ubuntu为例)

  1. 更新包列表并安装依赖
sudo apt-get update
sudo apt-get install wget ca-certificates
  1. 添加Postgresql仓库
wget -qO - https://www.Postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.Postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
  1. 更新包列表并安装Postgresql
sudo apt-get update
sudo apt-get install Postgresql Postgresql-contrib
  1. 启动Postgresql服务
sudo systemctl start Postgresql
  1. 设置Postgresql在系统启动时自动启动
sudo systemctl enable Postgresql

2.2 数据库管理操作

  1. 查看数据库版本:
test@ubuntu-svr:~$ sudo -u postgres psql -c "SELECT version();"
                                                                version
----------------------------------------------------------------------------------------------------------------------------------------
 Postgresql 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
  1. 登录与登出数据库
test@ubuntu-svr:~$ sudo su postgres     # 切换到postgres用户
postgres@ubuntu-svr:/home/test$ psql    # 通过psql工具进入数据库
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.
postgres=# \q     # 退出数据库
  1. 查看数据库与用户
test@ubuntu-svr:~$ sudo su postgres     # 切换到postgres用户
postgres@ubuntu-svr:/home/test$ psql    # 通过psql工具进入数据库
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.

postgres=# \l   # 查看数据库列表,默认有三个
                                                       List of databases
   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
 template0 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
           |          |          |                 |             |             |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
           |          |          |                 |             |             |            |           | postgres=CTc/postgres
(3 rows)

postgres=# \du    # 查看数据库用户
                             List of roles
 Role name |                         Attributes
-----------+------------------------------------------------------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS
  1. 创建数据库用户并授权
# 创建用户并指定权限
postgres=# CREATE USER test WITH PASSWORD '123456';
CREATE ROLE
postgres=# ALTER USER test WITH SUPERUSER;
ALTER ROLE

#
 删除用户
postgres=# DROP USER xxx;
  1. 查看数据库配置文件路径
postgres@ubuntu-svr:~$ psql
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.

postgres=# show hba_file;
              hba_file
-------------------------------------
 /etc/postgresql/14/main/pg_hba.conf
(1 row)

postgres=# show config_file;
               config_file
-----------------------------------------
 /etc/postgresql/14/main/postgresql.conf
(1 row)
  1. 使用新创建用户登录
# pg数据库默认连接的认证方式是peer。在postgres用户下无法使用test数据库用户连接
postgres@ubuntu-svr:/home/test$ psql -U test -d postgres
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "test"
# 在test系统用户下使用test用户连接数据库
test@ubuntu-svr:~$ psql -U test -d postgres
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.

postgres=#

说明:

Peer认证方法的工作原理是:从内核中获取客户的操作系统用户名,并将其作为允许的数据库用户名(可选择用户名映射)。这种方法只支持本地连接。

  1. 修改认证方式

修改配置文件改为,将认证方式改为md5认证:

# 修改第二条local配置中的method为md5
test@ubuntu-svr:~$ sudo vim /etc/postgresql/14/main/pg_hba.conf
...
# Database administrative login by Unix domain socket
local   all             postgres                                peer

#
 TYPE  DATABASE        USER            ADDRESS                 METHOD

#
 "local" is for Unix domain socket connections only
local   all             all                                     md5
...

#
 重启数据库
test@ubuntu-svr:~$ sudo systemctl restart postgresql

#
 再次在postgres系统用户下使用test数据库用户连接成功。
test@ubuntu-svr:~$ sudo su postgres
postgres@ubuntu-svr:/home/test$ psql -U test -d postgres
Password for user test:
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.

postgres=#
  1. 配置远程连接
# 修改pg_hba.conf在最后位置增加如下配置,允许所有远程主机的数据库用户使用md5认证进行连接。
test@ubuntu-svr:~$ sudo vim /etc/postgresql/14/main/pg_hba.conf
...
# Allow all hosts connections via md5:
host    all             all             0.0.0.0/0               md5
...

#
 修改postgresql.conf,修改listen_addresses为*,并取消注释。port和最大连接数根据需求进行自定义。
test@ubuntu-svr:~$ sudo vim /etc/postgresql/14/main/postgresql.conf
...
 60 listen_addresses = '*'          # what IP address(es) to listen on;
 61                                         # comma-separated list of addresses;
 62                                         # defaults to 'localhost'; use '*' for all
 63                                         # (change requires restart)
 64 port = 5432                             # (change requires restart)
 65 max_connections = 100                   # (change requires restart)
...

#
 重启数据库
test@ubuntu-svr:~$ sudo systemctl restart postgresql

#
 在另外一台机器上测试连接。确认已经关闭数据库所在机器的防火墙或者放行规则。
[root@localhost test]# psql -h 192.168.226.128 -p 5432 -U test -d postgres
Password for user test:
psql (9.2.24, server 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
WARNING: psql version 9.2, server version 14.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

2.2 在macOS上安装Postgresql

  1. 使用Homebrew安装
brew update
brew install Postgresql
  1. 启动Postgresql服务
brew services start Postgresql

2.3 在Windows上安装Postgresql

  1. 下载Postgresql:从Postgresql官方网站下载Windows版的Postgresql安装包。

  2. 运行安装程序:按照安装向导的指示进行安装,选择默认设置即可。

  3. 初始化数据库集群:安装程序会自动初始化数据库集群并启动Postgresql服务。

3. Postgresql性能测试方案

为了测试Postgresql的性能,可以使用内置的基准测试工具pgbench,或者第三方工具如sysbench

3.1 使用pgbench进行测试

pgbench是Postgresql自带的基准测试工具,可以模拟多种负载来测试数据库性能。

  1. 初始化测试数据库
test@ubuntu-svr:~$ sudo -u postgres createdb pgbench
test@ubuntu-svr:~$ sudo -u postgres pgbench -i -s 10 pgbench
dropping old tables...
creating tables...
generating data (client-side)...
1000000 of 1000000 tuples (100%) done (elapsed 0.47 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.85 s (drop tables 0.02 s, create tables 0.01 s, client-side generate 0.48 s, vacuum 0.18 s, primary keys 0.17 s).

这个命令会创建一个名为pgbench的测试数据库,并初始化测试数据,-s 10表示生成10倍于默认规模的数据。

  1. 运行基准测试
test@ubuntu-svr:~$ sudo -u postgres pgbench -c 10 -j 2 -T 60 pgbench
pgbench (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 2
duration: 60 s
number of transactions actually processed: 311888
latency average = 1.924 ms
initial connection time = 9.363 ms
tps = 5198.015078 (without initial connection time)

这个命令会以10个并发连接、2个线程运行测试,持续时间为60秒。

  1. 查看测试结果pgbench会输出每秒事务数(tps)等性能指标。

3.2 使用sysbench进行测试

sysbench是一个多线程基准测试工具,支持多种数据库的性能测试,包括Postgresql。

  1. 安装sysbench
sudo apt-get install sysbench
  1. 准备测试数据
# 创建sysbench测试库
test@ubuntu-svr:~$ sudo -u postgres createdb testdb
# 生成测试数据,根据环境替换pgsql用户名和密码
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-user=test --pgsql-password=123456 --pgsql-db=testdb --tables=10 --table-size=1000000 /usr/share/sysbench/oltp_read_write.lua prepare

这个命令会在名为testdb的数据库中创建10个表,每个表包含1,000,000行数据。

  1. 运行基准测试
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-user=test --pgsql-password=123456 --pgsql-db=testdb --tables=10 --table-size=1000000 --threads=10 --time=60 /usr/share/sysbench/oltp_read_write.lua run

这个命令会以10个线程运行读写测试,持续时间为60秒。测试结果如下:

sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 10
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            1190546
        write:                           340154
        other:                           170080
        total:                           1700780
    transactions:                        85039  (1417.01 per sec.)
    queries:                             1700780 (28340.26 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          60.0121s
    total number of events:              85039

Latency (ms):
         min:                                    1.05
         avg:                                    7.05
         max:                                   63.49
         95th percentile:                       13.46
         sum:                               599901.95

Threads fairness:
    events (avg/stddev):           8503.9000/116.42
    execution time (avg/stddev):   59.9902/0.00
  1. 清理测试数据
sysbench --db-driver=pgsql --pgsql-host=localhost --pgsql-user=test --pgsql-password=123456 --pgsql-db=testdb --tables=10 --table-size=1000000 --threads=10 --time=60 /usr/share/sysbench/oltp_read_write.lua cleanup

4. 优化Postgresql性能的建议

  1. 硬件优化:使用SSD存储、增加内存和高性能CPU以提升I/O和计算能力。

  2. 配置优化:调整Postgresql配置文件Postgresql.conf中的参数,如shared_bufferswork_memmaintenance_work_memeffective_cache_sizecheckpoint_segments等。

  3. 索引优化:创建合适的索引以加快查询速度,避免过多的索引影响写性能。

  4. 查询优化:使用EXPLAIN分析查询计划,优化SQL查询以减少不必要的开销。

  5. 连接池:使用连接池(如PgBouncer)来减少连接创建和销毁的开销,提高并发处理能力。

  6. 分区:对于大表,可以使用表分区来提高查询性能和管理效率。

  7. VACUUM和ANALYZE:定期运行VACUUM和ANALYZE命令以维护数据库统计信息和清理垃圾数据,提高查询性能。

通过合理的配置和优化,可以显著提升Postgresql的性能,满足高并发、低延迟的数据处理需求。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux(七) 动静态库

目录 一、动静态库的概念 二、静态库的打包与使用 2.1 静态库的打包 2.2 静态库的使用 三、动态库的打包与使用 3.1 动态库的打包 3.2 动态库的使用 3.3 运行动态库的四种方法 四、总makefile 一、动静态库的概念 静态库&#xff1a; Linux下&#xff0c;以.a为后缀的…

Python专题:十五、JSON数据格式

Python的数据处理&#xff1a;JOSN 计算机的主要工作&#xff1a;处理数据 最容易处理的数据就是结构化数据 非结构化数据&#xff1a;视频&#xff0c;文件等 近些年的大数据、数据挖掘就是对互联网中的各种非结构化的数据的分析和处理 半结构化数据 明确的结构属性&…

陪诊服务运用预约小程序的效果是什么

在中高型城市里&#xff0c;陪诊师近些年也很有热度&#xff0c;已经衍生成为一个新的小众行业&#xff0c;不同医院/不同科目等其它情况针对不同群体往往很难完善&#xff0c;比如部分老年人腿脚不便、不认识字、外地语言难以沟通等&#xff0c;陪诊师的作用就尤为凸显. 对相…

[Bootloader][uboot]code总结

文章目录 1、U_BOOT_DRIVER2、DM框架dm_scan_platdatadm_extended_scan_fdt 1、U_BOOT_DRIVER 使用这个宏可以定义一个驱动实例&#xff0c;宏定义是 其中使用的struct driver结构体 使用的ll_entry_declare宏定义是 归结为 2、DM框架 1、 DM框架 DM模型抽象出了以下四个…

16.投影矩阵,最小二乘

文章目录 1. 投影矩阵1.1 投影矩阵P1.2 投影向量 1. 投影矩阵 1.1 投影矩阵P 根据上节知识&#xff0c;我们知道当我们在解 A X b AXb AXb的时候&#xff0c;发现当向量b不在矩阵A的列空间的时候&#xff0c;我们希望的是通过投影&#xff0c;将向量b投影到矩阵A的列空间中&…

ModuleNotFoundError: No module named ‘sklearn‘

ModuleNotFoundError: No module named sklearn 解决办法&#xff1a; pip install scikit-learn

7B2 PRO主题5.4.2免授权直接安装

B2 PRO 5.4.2 最新免授权版不再需要改hosts&#xff0c;直接在wordpress上传安装即可

网站接入百度云防护CDN后回源率非常高原因

最近&#xff0c;有站长反馈网站接入百度云防护后&#xff0c;网站回源率非常高。 今天百度云来给大家讲解下&#xff0c;CDN回源高的原因&#xff1a; 1.动态请求比较多 网站的动态请求很多&#xff0c;一般是回源率高的主要原因&#xff0c;因为CDN对待动态请求是每个请求…

Vue的学习 —— <网络请求库Axios>

目录 前言 正文 一、Axios基本概念 二、安装Axios 三、Axios使用方法 四、向服务器发送请求 前言 在之前的开发案例中&#xff0c;我们通常直接在组件中定义数据。但在实际的项目开发中&#xff0c;我们需要从服务器获取数据。当其他用户希望访问我们自己编写的网页时&a…

定档 11.2-3,COSCon'24 第九届中国开源年会暨开源社十周年嘉年华正式启动!

中国开源年会 COSCon 是业界最具影响力的开源盛会之一&#xff0c;由开源社在2015年首次发起&#xff0c;今年将举办第九届。 以其独特定位及日益增加的影响力&#xff0c;COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企业、IT 媒体、行业协会举…

网络安全快速入门(十三)linux及vmware软件的网络配置

13.1 前言 在通过我们前面的了解&#xff0c;我们现在已经对Linux的基础知识有了大致的了解&#xff0c;今天我们来大概讲一下关于linux系统及vmware的网络配置问题&#xff0c;在这之前&#xff0c;我们需要对网络有一个大概的认识和了解&#xff0c;话不多说&#xff0c;我们…

01记-“计算机基础知识”

感觉媒体: 直接作用于人的感觉器官&#xff0c;使人产生直接感觉的媒体&#xff1a;声音、图形、图像、动画等。 表示媒体: 为了加工、处理和传输感觉媒体而人为研究、构造出来的一种媒体&#xff0c;常见的有各种编码方式&#xff0c;如文本编码、图像编码和声音编码等。 …

Java中静态方法为什么不能调用非静态成员?

在Java面试中&#xff0c;这个问题经常被问到&#xff0c;因为它不仅涉及到Java的基本语法规则&#xff0c;还深入到了JVM的工作机制。理解这个问题可以帮助面试者更好地掌握Java的静态和非静态成员的区别以及它们在内存中的分配和使用。 静态成员 vs 非静态成员 首先&#x…

AtCoder Beginner Contest 318 A题 Full Moon

A题&#xff1a;Full Moon 标签&#xff1a;模拟、数学题意&#xff1a;给定一个起始 m m m和上限 n n n&#xff0c;每次增量 p p p&#xff0c;求能加几次。题解&#xff1a;数据比较小&#xff0c;可以直接暴力&#xff1b;数学方法算的话&#xff0c;注意边界。代码&#…

HNU-算法设计与分析-作业5

第五次作业【回溯算法】 文章目录 第五次作业【回溯算法】<1> 算法分析题5-3 回溯法重写0-1背包<2> 算法分析题5-5 旅行商问题&#xff08;剪枝&#xff09;<3> 算法实现题5-2 最小长度电路板排列问题<4> 算法实现题5-7 n色方柱问题<5> 算法实现…

时间格式数据向前或向后归于整时

假设你有一个“时:分:秒”的时间格式数据&#xff0c;例如"12:34:56"&#xff0c;你想要将它向前归整于整时或者向后归整于整时&#xff0c;可以按照以下方法进行处理&#xff1a; 1、向前归整于整时&#xff1a;将分钟和秒数设置为0 import datetime# 原始时间 ti…

公共字段填充(AOP的使用)

Thread是线程池,ThreadLocal是线程变量,每个线程变量是封闭的,与其它线程变量分隔开来,在sky-common下的com.sky.context包下有一个Basecontext类 public class BaseContext {//每一个上下文创建了一个线程变量,用来存储long类型的id//创建三个方法,用来设置,取用,删除idpubli…

绝地求生:PGS3参赛队伍跳点一览,17压力有点大,4AM与PeRo大概率不roll点

在PCL春季赛结束后&#xff0c;PGS3的参赛队伍名单以及分组就正式确定了&#xff0c;最后确定名额的DDT和NH被安排在了A组和B组&#xff0c;感觉这次PGS3的分组比较均衡&#xff0c;没有“死亡之组”一说。这段时间已经有网友汇总了PGS3队伍在各个地图的跳点&#xff0c;并且把…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

python安装ESPHome

1. powershell输入python 或者 python3 可以查看python版本&#xff0c;没安装则会自动跳出微软商店&#xff0c;安装即可(注意这里会自动安装在C盘默认路径) 2. pip3 install esphome -i https://mirrors.aliyun.com/pypi/simple 3. 根据报错信息找到esphome的安装目录&…