Oto*_*dze 21 postgresql configuration write-ahead-logging postgresql-9.5
根据和参数的文档,min_wal_sizemax_wal_size默认值为:
对于max_wal_size:The default is 1 GB
对于min_wal_size:The default is 80 MB
然后我从我的数据库配置中查看这些参数:
select name, setting, unit
from pg_settings
where name in ('min_wal_size', 'max_wal_size')
Run Code Online (Sandbox Code Playgroud)
给出结果:
name | setting | unit
----------------------------------
max_wal_size | 64 |
min_wal_size | 5 |
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1) 为什么这些值与文档中显示的默认值不匹配?我从来没有改变过配置设置。
2) 为什么unit这些参数的列是空的/NULL?在这种情况下,64 和 5 值是什么意思?MB? GB? 或者是什么?
为什么这不像例如 work_mem参数,当一切都清楚时:
name | setting | unit
----------------------------------
work_mem | 4096 | kB
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 16
默认情况下,这些是 16 MB WAL 段。手册:
系统物理上把这个序列分成WAL段文件,一般每个16MB(虽然在构建PostgreSQL时段大小可以改变)
所以,它只是宣传的默认值:
select name, setting, setting::int * 16 || 'MB' AS setting_in_mb
from pg_settings
where name in ('min_wal_size', 'max_wal_size');
Run Code Online (Sandbox Code Playgroud)
unitinpg_settings当它是一个实际的基本单位时存在,例如second或MB。在这种情况下,“单元”将是“WAL 段”,它可以在编译 Postgres 之前进行配置。unit对于那些,该列只是 NULL。
小智 6
2021 年更新:
在 Postgres 12.3 设置中,此查询现在返回单位:
select name, setting, unit
from pg_settings
where name in ('min_wal_size', 'max_wal_size');
Run Code Online (Sandbox Code Playgroud)
结果:
name | setting | unit
--------------+---------+------
max_wal_size | 1024 | MB
min_wal_size | 80 | MB
(2 rows)
Run Code Online (Sandbox Code Playgroud)
此外,文档还指出:
如果指定该值时没有单位,则以兆字节为单位。默认值为 1 GB。
| 归档时间: |
|
| 查看次数: |
27152 次 |
| 最近记录: |