PostgreSQL作为目前主流数据库之一,目前在企业中得到广泛应用, 但如果您不熟悉 PostgreSQL,您面临的最常见挑战是如何调整您的数据库环境。 当安装PostgreSQL,它会自动生成一个基本的文件postgresql.conf。根据您使用的操作系统,此配置文件通常保存在数据目录中。例如,在 Ubuntu 中,PostgreSQL 将配置(pg_hba.conf、postgresql.conf、pg_ident.conf)放在 /etc/postgresql 目录中。在调整 PostgreSQL 数据库之前,首先必须找到 postgresql.conf 文件。
但是要使用的正确设置是什么?最初设置的值是什么?今天介绍一个postgresql配置文件自动器:PGTune。它将帮助您轻松解决这个特定问题。
什么是 PGTune?
PGTune 是一个配置向导,最初由来自2ndQuadrant的Greg Smith创建。它基于一个 Python 脚本,不幸的是它不再受支持(它不支持较新版本]PostgreSQL。)。目前它已转换为网页配置PGTune(基于原始PGTune),现在是一个配置向导,可用于 PG 数据库配置设置。PGTune用于根据给定硬件配置的最大性能计算PostgreSQL的配置参数。不过它也不是灵丹妙药,因为postgresql配置参数不仅取决于硬件配置,还取决于数据库的大小、客户端数量和查询的复杂性。
如何使用 PGTune
PGTune的使用也很方便,只需要浏览器输入PGTune的地址即可访问。下面给出一个简单的例子如下:
您需要做的就是在下面指定以下字段:
- DB 版本- 您的 PostgreSQL 版本。它支持 PostgreSQL 9.5、9.6、10、11 、12、13和14 版本。
- 操作系统类型 -操作系统的类型(Linux、OS X、Windows)
- DB Type - 数据库类型,主要是您的数据库将处理的事务处理类型(Web 应用程序、OLTP、数据仓库、桌面应用程序、混合类型的应用程序)
- Total Memory (RAM) - 您的 PG 实例将处理的总内存。需要在 GiB 中指定它。
- CPU 数量 - PostgreSQL 可以使用的 CPU 数量 CPU = 每核线程数 * 每插槽内核数 * 插槽数
- 连接数- 最大 PostgreSQL 客户端连接数
- 数据存储 - 您可以从基于 SSD、HDD 或 SAN 的存储中选择的数据存储设备类型。
然后点击生成按钮。或者,您也可以运行生成 postgresql.auto.conf 的 ALTER SYSTEM 语句,但需要postgresql实例重启才生效。
示例展示
配置需求:
- DB version:14
- OS Type:Linux
- DB Type:Online transaction processing system
- Total Memory (RAM):32GB
- Number of CPUs:8
- Number of Connections:1000
- Data Storage:SSD storage
配置文件展示:
- # DB Version: 14
- # OS Type: linux
- # DB Type: oltp
- # Total Memory (RAM): 32 GB
- # CPUs num: 8
- # Connections num: 1000
- # Data Storage: ssd
-
- max_connections = 1000
- shared_buffers = 8GB
- effective_cache_size = 24GB
- maintenance_work_mem = 2GB
- checkpoint_completion_target = 0.9
- wal_buffers = 16MB
- default_statistics_target = 100
- random_page_cost = 1.1
- effective_io_concurrency = 200
- work_mem = 2097kB
- min_wal_size = 2GB
- max_wal_size = 8GB
- max_worker_processes = 8
- max_parallel_workers_per_gather = 4
- max_parallel_workers = 8
- max_parallel_maintenance_workers = 4
结论
PGTune是一个不错的postgresql配置文件在线生成工具,是DBA和开发人员配置postgresql的一个利器。当你还在为不知道参数如何设置而发愁时,赶紧试试这个工具吧!