PostgreSQL 如何計算服務(wù)器配置參數(shù)的大小

作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗,目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net

大家好,我是只談技術(shù)不剪發(fā)的 Tony 老師。

PostgreSQL 的默認(rèn)配置參數(shù)通常都偏小,不太適合生產(chǎn)環(huán)境。因此,我們在安裝數(shù)據(jù)庫之后需要修改服務(wù)器的配置參數(shù)。上一篇文章中介紹了如何設(shè)置服務(wù)器的配置參數(shù)。今天給大家介紹一個快速計算 PostgreSQL 主要參數(shù)大小的方法。

我們可以使用 PGTune 在線工具根據(jù)給定硬件配置的最大性能計算出 PostgreSQL 的推薦配置,它的設(shè)置界面如下:

主頁
這個工具的使用非常簡單,我們可以輸入的參數(shù)包括:

    PostgreSQL 數(shù)據(jù)庫版本,可以通過SELECT version();命令查看。
    數(shù)據(jù)庫服務(wù)器主機(jī)的操作系統(tǒng),包括 Linux、Windows 以及 OS X。
    數(shù)據(jù)庫應(yīng)用的類型,包括:網(wǎng)站(Web Application)、在線交易處理系統(tǒng)(Online Transaction Processing)、數(shù)據(jù)倉庫(Data Warehouse)、桌面應(yīng)用(Desktop application)以及混合型應(yīng)用(Mixed type of application)。配置頁面右側(cè)給出了不同應(yīng)用類型的介紹。
    服務(wù)器的內(nèi)存大小。
    服務(wù)器的 CPU 核數(shù),可選參數(shù)。
    最大的數(shù)據(jù)庫連接數(shù),可選參數(shù)。
    數(shù)據(jù)存儲設(shè)備的類型,包括 SSD、SAN 以及機(jī)械硬盤(HDD)。

輸入必填參數(shù)之后點擊“Generate”按鈕。

setting
PGTune 在頁面右側(cè)生成了推薦的配置參數(shù),并且提供了修改配置文件 postgresql.conf 以及使用 ALTER SYSTEM 命令進(jìn)行參數(shù)設(shè)置兩者方法。例如,我們輸入的硬件參數(shù)產(chǎn)生的配置文件內(nèi)容如下:

# WARNING
# this tool not being optimal
# for very high memory systems

# DB Version: 13
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 128 GB
# CPUs num: 63
# Connections num: 500
# Data Storage: san

max_connections = 500
shared_buffers = 32GB
effective_cache_size = 96GB
maintenance_work_mem = 2GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
work_mem = 16777kB
min_wal_size = 2GB
max_wal_size = 8GB
max_worker_processes = 63
max_parallel_workers_per_gather = 4
max_parallel_workers = 63
max_parallel_maintenance_workers = 4

 

或者,生成的 ALTER SYSTEM 命令如下:

# WARNING
# this tool not being optimal
# for very high memory systems

# DB Version: 13
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 128 GB
# CPUs num: 63
# Connections num: 500
# Data Storage: san

ALTER SYSTEM SET
 max_connections = '500';
ALTER SYSTEM SET
 shared_buffers = '32GB';
ALTER SYSTEM SET
 effective_cache_size = '96GB';
ALTER SYSTEM SET
 maintenance_work_mem = '2GB';
ALTER SYSTEM SET
 checkpoint_completion_target = '0.9';
ALTER SYSTEM SET
 wal_buffers = '16MB';
ALTER SYSTEM SET
 default_statistics_target = '100';
ALTER SYSTEM SET
 random_page_cost = '1.1';
ALTER SYSTEM SET
 effective_io_concurrency = '300';
ALTER SYSTEM SET
 work_mem = '16777kB';
ALTER SYSTEM SET
 min_wal_size = '2GB';
ALTER SYSTEM SET
 max_wal_size = '8GB';
ALTER SYSTEM SET
 max_worker_processes = '63';
ALTER SYSTEM SET
 max_parallel_workers_per_gather = '4';
ALTER SYSTEM SET
 max_parallel_workers = '63';
ALTER SYSTEM SET
 max_parallel_maintenance_workers = '4';

   

關(guān)于這些參數(shù)的介紹和作用,可以參考官方文檔。

PostgreSQL 數(shù)據(jù)庫的優(yōu)化不僅取決于硬件配置,而且還取決于數(shù)據(jù)庫的大小、客戶端的數(shù)量以及查詢的復(fù)雜性等各種因素,因此 PGTune 的推薦值不一定是最優(yōu)設(shè)置。不過,我們可以將它作為一個初始配置,然后再根據(jù)實際情況進(jìn)一步進(jìn)行優(yōu)化。

PGTune 是一個開源項目,托管在 GitHub,我們可以下載并部署一個自己的版本。