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.pswp.cn/diannao/13227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13227.shtml
英文地址,請注明出處:http://en.pswp.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的安裝目錄&…