合 PostgreSQL11修改--wal-segsize大小
Tags: PGPostgreSQL整理自网络体系结构wal日志wal-segsize
简介
编译安装PG的一些参数可以参考:https://www.xmmup.com/dbbao68shiyongyuanmabianyilaianzhuangpostgresql13-3shujuku.html
PostgreSQL11以前改变wal-segsize(WAL段大小)必须在编译时通过–with-wal-segsize参数确定,编译后不可更改。
PostgreSQL11之前的版本
- 数据块按8K划分(--with-blocksize,单位为K,默认为8K)
- WAL块尺寸按8k划分(--with-wal-blocksize,单位为K,默认为8K)
- 数据文件按1G一个分解(--with-segsize,单位为G,默认为1G)
- WAL段尺寸按16MB划分(--with-wal-segsize,单位为K,默认为16MB)
1 ./configure --with-blocksize=8 --with-wal-blocksize=8 --with-segsize=1 --with-wal-segsize=16
PostgreSQL 11 版本的一个重要调整是支持 initdb 和 pg_resetwal 修改 WAL 文件大小,而 11 版本之前只能在编译安装 PostgreSQL 时设置 WAL 文件大小。这一特性能够方便 WAL 文件的管理。PostgreSQL11取消了编译参数–with-wal-segsize。
使用pg_resetwal(--wal-segsize)更改WAL段大小
PostgreSQL11先编译程序
- 数据块按8K划分(--with-blocksize,单位为K,默认为8K)
- WAL块尺寸按8k划分(--with-wal-blocksize,单位为K,默认为8K)
- 数据文件按1G一个分解(--with-segsize,单位为G,默认为1G)
1 ./configure --with-blocksize=8 --with-wal-blocksize=8 --with-segsize=1
编译完成并初始化后使用pg_resetwal修改wal-segsize
1 2 3 4 5 6 | #首先停止PostgreSQL服务 pg_ctl -D /data/pgdata stop -m fast #修改wal-segsize段大小,默认单位是MB,值必须是2的幂并且在1到1024MB之间 pg_resetwal --wal-segsize=32 /data/pgdata |
使用initdb时更改WAL段大小
1 | initdb --wal-segsize =< MB中的大小> [其他选项] |
initdb的参数--wal-segsize参数的取值范围是1MB到1024MB
查看
1 2 3 4 5 6 7 | show block_size; show wal_block_size; show segment_size; show wal_segment_size; pg_controldata |grep -i wal ls /data/pgdata/pg_wal -lh |
1 2 3 4 5 6 7 | [pg1110@lhr ~]$ pg_controldata |grep -i wal Latest checkpoint's REDO WAL file: 000000010000000000000038 wal_level setting: replica wal_log_hints setting: off WAL block size: 8192 Bytes per WAL segment: 16777216 ----->>>>此处说明wal segment的大小是16MB |
示例
使用 initdb 调整WAL文件大小
1 2 3 4 5 6 7 8 9 10 11 12 | [pg1110@lhr ~]$ initdb --help|grep -C 4 wal-seg default text search configuration -U, --username=NAME database superuser name -W, --pwprompt prompt for a password for the new superuser -X, --waldir=WALDIR location for the write-ahead log directory --wal-segsize=SIZE size of WAL segments, in megabytes ----->>>此处!!! Less commonly used options: -d, --debug generate lots of debugging output -k, --data-checksums use data page checksums [pg1110@lhr ~]$ |
initdb 命令关于修改 WAL 文件大小选项,如下:
1 | --wal-segsize=size |
Set the WAL segment size, in megabytes. This is the size of each individual file in the WAL log. The default size is 16 megabytes. The value must be a power of 2 between 1 and 1024 (megabytes). This option can only be set during initialization, and cannot be changed later.
It may be useful to adjust this size to control the granularity of WAL log shipping or archiving. Also, in databases with a high volume of WAL, the sheer number of WAL files per directory can become a performance and management problem. Increasing the WAL file size will reduce the number of WAL files.
WAL 日志文件大小默认为16MB,该值必须是1到1024之间的2的次方,增大WAL文件大小能够减少WAL日志文件的产生。
初始化一个新的 PostgreSQL 数据库实例,指定WAL文件大小64MB,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | [pg11@lhrpg ~]$ initdb -E UTF8 --locale=C --wal-segsize=64 -D /home/pg11/data01 -U postgres -W The files belonging to this database system will be owned by user "pg11". This user must also own the server process. The database cluster will be initialized with locale "C". The default text search configuration will be set to "english". Data page checksums are disabled. Enter new superuser password: Enter it again: creating directory /home/pg11/data01 ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /home/pg11/data01 -l logfile start |