前言:
春节的假期已经结束,今天打开电脑发现墨天轮中国数据库流行度排行榜更新(https://www.modb.pro/dbRank),我们HaloDB在墨天轮中国数据库流行度排名中,关于型数据库的排行中,HaloDB由上月的36.27分上升到44.54分,由29名上升四名到25名的成绩。在此,谢谢各位老师朋友的支持和鼓励,以及为我们HaloDB的宣传和推广做出卓越贡献的朋友致以最高的敬意!(鞠躬道谢)同时也按耐不住激动的心情,提笔打开电脑写下今天的内容,为大家简单的介绍下我们的conf文件。

说到postgersql.conf文件,要做说个前情提要就是HaloDB的启动过程,我用一张图简单为各位小伙伴描述下,当然,这并不是最完整和详细的过程,仅供初学者朋友食用。后续有朋友如果有兴趣深入研究的话
来,加入我们公司!说到我们的HaloDB, 来,日常打广环节!
我们的HaloDB 是业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求,从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。
如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,当然您如果有好的建议也可以提给我们,下面正式开始今天的内容。
一、postgersql.conf的主要作用:

postgresql.conf 是 PostgreSQL 数据库的主要配置文件,它的主要作用是控制HaloDB数据库服务器的行为和性能。下面是 postgresql.conf 的五项主要作用:
1. 配置数据库连接:可以指定数据库服务器监听的 IP 地址,决定哪些客户端可以连接到数据库。通过设置 port 参数可以指定数据库服务器监听的端口号。
2. 控制并发连接数:可以限制数据库服务器允许的最大并发连接数。这有助于控制数据库的负载和资源使用。
3. 调整内存缓冲区:可以指定数据库服务器使用的共享内存缓冲区大小。这有助于提高数据库的读取性能,并且可以调整每个数据库会话使用的内存量,用于排序、哈希操作和维护操作。
4. 优化查询性能:可以指定数据库服务器可以使用的预计缓存大小。这有助于优化查询计划,提高查询性能。
5. 管理日志记录:,可以指定日志输出的目标,可以选择输出到标准错误输出、系统日志或 CSV 格式的日志文件。还可以通过设置日志级别和日志格式等参数,来控制日志记录的详细程度和格式。
当然,postgresql.conf文件的重要性和作用远远不止这些,我们可以通过修改 postgresql.conf 文件,可以根据具体需求调整数据库服务器的配置,以满足不同的性能、安全和可用性要求。但是需要注意:修改 postgresql.conf 文件后,需要使用pg_ctl restart命令重启数据库服务器才能使更改生效。
二、postgresql.conf文件的详细参数说明:
1、物理存放位置:
一般会存放在我们的HaloDB数据库的HaloDATA环节变量指定的位置,与初次安装部署的路径有关,如下图两张图所示,请参考:

2、主要参数详细说明:
(1) listen_addresses = '*'
解析:指定服务器在哪些 TCP/IP 地址上监听客户端连接。 值的形式是一个逗号分隔的主机名和/或数字 IP 地址列表。 特殊项*对应监听所有可用IP接口。
(2) port = 1921
解析:服务器监听的 TCP 端口;默认是 1921
(3) max_connections = 100
解析:决定数据库的最大并发连接数。默认值通常是 100 个连接,这个参数只能在服务器启动时设置。(参考值cpu 1核 50个链接)
(4) shared_buffers
解析:内存,它表示数据缓冲区中的数据块的个数,每个数据块的大小是8KB。 数据缓冲区位于数据库的共享内存中,它越大越好,不能小于128KB。 这个参数只有在启动数据库时,才能被设置。 默认值是128MB。 如果是自己的测试环境,我的推荐值是1/4 主机物理内存。
(5) wal_buffers
解析:用于还未写入磁盘的WAL数据的共享内存量。默认值为-1,表示将该参数值设置为 shared_buffers 的 1/32 的大小(大约 3%),但是不小于64kB 也不大于一个WAL段的大小(通常为 16MB)。 [64K,16M]
如果自动的选择太大或太小可以手工设置该值,但是任何小于 32kB 的正值都将被当作 32kB。这个参数只能在服务器启动时设置。事务日志缓冲区位于数据库的共享内存中。
(6) work_mem
解析:指定在写到临时磁盘文件之前用于内部排序操作和哈希表的内存量。ORDER BY, DISTINCT 和合并连接( merge joins) 都会用到排序操作。默认值为 4 兆字节( 4MB)。个人推荐值:work_mem = (输入内存数量- shared_buffers)/(连接数 * 3)* 1024 (单位是 KB)。
(7) maintenance_work_mem(PGA)
解析:它决定数据库的维护操作使用的内存空间的大小。数据库的维护操作包括 VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等操作。值如果比较大,通常可以缩短VACUUM数据库和从dump文件中恢复数据库需要的时间。maintenance_work_mem 存放在每个数据库进程的私有内存中,而不是存放在数据库的共享内存中。这个参数可以在任何时候被设置。
(8) random_page_cost = 4.0
解析:该参数通常用于设置优化器计算一次非顺序抓取磁盘页面的开销。默认值为4.0
(9) autovacuum_max_workers = 3
解析:指定能同时运行的 autovacuum 进程的最大数量,默认值为3。
从我个人来看,提升该参数的数值意味着有更多的worker进程可以同时工作,可以有效的提升autovacuum的吞吐,但实际上由于autovacuum_vacuum_cost_limit参数的限制,单纯的提升autovacuum_max_workers并没有什么效果。后续可以找个机会展开讲一讲。
(10) checkpoint_completion_target = 0.9
解析:在HaloDb中增加checkpoint_completion_target来降低检查点的I/O负载, 默认0.9。
3、HaloDB中参数的修改方式:
a、查询HaloDB中的所有参数
halo0root=# select distinct(context),name from pg_settings order by 1;
context | name
-------------------+----------------------------------------
backend | post_auth_delay
backend | ignore_system_indexes
internal | in_hot_standby
internal | max_identifier_length
internal | ssl_library
internal | wal_segment_size
internal | data_checksums
internal | debug_assertions
internal | lc_collate
省略.......(394 rows)在HaloDB的conf文件中,其中pg_settings视图的context字段的部分有几种参数类别,我做了一些简单的解释,如下表所示:

还有另一种方式:
halo0root=# show all;
name | setting |
description
----------------------------------------+--------------------------------+-------------------------------------------------------------
----------------------------------------------------------------------------
_ctes_estimate_rows_factor | 1 | Sets the planner's estimate of the cost of CTEs.
_enable_nestloop_antiunique | off | Enable nestloop anti unique filter.
_enable_nestloop_semiunique | off | Enable nestloop semi unique filter.
_enable_qual_conditions_reduce | on | Enables the planner to reduce qual conditions before plannin
g if possible.
_enable_spl_validator | on | Enables plsql language check.
_enable_viewdef_deparse | on | Enables pg_viewdef operate(add, replace, delete).
_pg_synonym | 0 | Sets the oracle.pg_synonym oid.
_pg_type_ext | 0 | Sets the pg_type_ext oid.
_pseuattr_funcoids | | Sets pseuattribute functions(rownum).
allow_in_place_tablespaces | off | Allows tablespaces directly inside pg_tblspc, for testing.
allow_system_table_mods | off | Allows modifications of the structure of system tables.s省略......(394 rows)
关于如何查询个别参数的当前值,以shared_buffers方法如下,请参考:
halo0root=# select current_setting('shared_buffers');
current_setting
-----------------
256MB
(1 row)
查看数据文件路径,参数文件路径:
halo0root=# SELECT name,setting FROM pg_settings WHERE category = 'File Locations';
name | setting
-------------------+----------------------------
config_file | /data/halo/postgresql.conf
data_directory | /data/halo
external_pid_file |
hba_file | /data/halo/pg_hba.conf
ident_file | /data/halo/pg_ident.conf
(5 rows)
b、修改用户相关配置
查询某参数在某用户级别的设置,这里我们新建一个用户mdzz,然后举例。
halo0root=# create user mdzz password 'mdzz';
CREATE ROLE
halo0root=# alter role mdzz set log_min_duration_statement = 100;
ALTER ROLE
halo0root=# select * from pg_user where usename='mdzz';
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
---------+----------+-------------+----------+---------+--------------+----------+----------+----------------------------------
mdzz | 49590 | f | f | f | f | ******** | | {log_min_duration_statement=100}
(1 row)
除此之外,还可以通过pg_setting表查询
halo0root=# select * from pg_db_role_setting where setrole in
halo0root-# (select usesysid from pg_user where usename in ('mdzz'))
halo0root-# order by setrole,setdatabase;
setdatabase | setrole | setconfig
-------------+---------+----------------------------------
0 | 49590 | {log_min_duration_statement=100}
(1 row)参数在某用户下针对数据库级别的设置
halo0root=# alter role mdzz in database testzz set client_min_messages='warning';
ALTER ROLE
halo0root=# select * from pg_db_role_setting where setrole in
halo0root-# (select usesysid from pg_user where usename in ('mdzz'))
halo0root-# order by setrole,setdatabase;
setdatabase | setrole | setconfig
-------------+---------+----------------------------------
0 | 49590 | {log_min_duration_statement=100}
16385 | 49590 | {client_min_messages=warning}
(2 rows)c、使配置生效的几种方法
1)halo0root超级用户运行: halo0root=# SELECT pg_reload_conf();
2)使用pg_ctl命令触发SIGHUP信号,需要重新加载才能生效。
halo0root=# pg_ctl reload
3)重启数据库服务
halo0root=# pg_ctl restart
其实这两种方法差异不是很大。
三、总结:
HaloDB中的postgres.conf文件是整个数据库所有参数的集合,对整个数据库的运行起至关重要的作用,相关参数的调整,更是一门技术活,在生产环境中,则更加需要严谨慎重。对于初学者来说,有必要针对相关参数进行深入的钻研,今天就简单的为大家介绍这些。后续会推出相关参数的最佳实践说明,最后给全体小伙伴拜个晚年,祝大家新年快乐,开工大吉!
虽然是慢工,但是不是什么细活。




