• 售前

  • 售后

热门帖子
入门百科

PostgreSQL11修改wal-segsize的操作

[复制链接]
Vonice 显示全部楼层 发表于 2021-10-26 14:06:27 |阅读模式 打印 上一主题 下一主题
修改有风险,审慎行事。
PostgreSQL11从前改变wal-segsize(WAL段巨细)必须在编译时通过–with-wal-segsize参数确定,编译后不可更改.
  1. #PostgreSQL11之前的版本
  2. #数据块按8K划分(--with-blocksize,单位为K,默认为8K)
  3. #WAL块尺寸按8k划分(--with-wal-blocksize,单位为K,默认为8K)
  4. #数据文件按1G一个分解(--with-segsize,单位为G,默认为1G)
  5. #WAL段尺寸按16MB划分(--with-wal-segsize,单位为K,默认为16MB)
  6. ./configure --with-blocksize=8--with-wal-blocksize=8--with-segsize=1 --with-wal-segsize=16
复制代码
PostgreSQL11取消了编译参数–with-wal-segsize.使用pg_resetwal(–wal-segsize)更改WAL段巨细.
  1. #PostgreSQL11先编译程序
  2. #数据块按8K划分(--with-blocksize,单位为K,默认为8K)
  3. #WAL块尺寸按8k划分(--with-wal-blocksize,单位为K,默认为8K)
  4. #数据文件按1G一个分解(--with-segsize,单位为G,默认为1G)
  5. ./configure --with-blocksize=8--with-wal-blocksize=8--with-segsize=1
复制代码
编译完成并初始化后使用pg_resetwal修改wal-segsize
  1. #首先停止PostgreSQL服务
  2. pg_ctl -D /data/pgdata stop -m fast
  3. #修改wal-segsize段大小,默认单位是MB,值必须是2的幂并且在1到1024MB之间
  4. pg_resetwal --wal-segsize=32 /data/pgdata;
复制代码
查察
  1. show block_size;
  2. show wal_block_size;
  3. show segment_size;
  4. show wal_segment_size;
  5. ls /data/pgdata/pg_wal -lh
复制代码
补充:PostgreSQL 11 新特性解读 : Initdb/Pg_resetwal支持修改WAL文件巨细
PostgreSQL 11 版本的一个告急调解是支持 initdb 和 pg_resetwal 修改 WAL 文件巨细,而 11 版本之前只能在编译安装 PostgreSQL 时设置 WAL 文件巨细。这一特性可以或许方便 WAL 文件的管理。
Release 的说明

Allow the WAL file size to be set via initdb (Beena Emerson)
Previously the 16MB default could only be changed at compile time.
下面分别演示通过 initdb 和 pg_resetwal 修改 WAL 文件巨细。
使用 initdb 调解WAL文件巨细

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. [pg11@pghost2 ~]$ initdb -E UTF8 --locale=C --wal-segsize=64 -D /home/pg11/data01 -U postgres -W
  2. The files belonging to this database system will be owned by user "pg11".
  3. This user must also own the server process.
  4. The database cluster will be initialized with locale "C".
  5. The default text search configuration will be set to "english".
  6. Data page checksums are disabled.
  7. Enter new superuser password:
  8. Enter it again:
  9. creating directory /home/pg11/data01 ... ok
  10. creating subdirectories ... ok
  11. selecting default max_connections ... 100
  12. selecting default shared_buffers ... 128MB
  13. selecting dynamic shared memory implementation ... posix
  14. creating configuration files ... ok
  15. running bootstrap script ... ok
  16. performing post-bootstrap initialization ... ok
  17. syncing data to disk ... ok
  18. WARNING: enabling "trust" authentication for local connections
  19. You can change this by editing pg_hba.conf or using the option -A, or
  20. --auth-local and --auth-host, the next time you run initdb.
  21. Success. You can now start the database server using:
  22. pg_ctl -D /home/pg11/data01 -l logfile start
复制代码
修改 postgresql.conf 相关设置,之后启动数据库。
  1. [pg11@pghost2 data01]$ pg_ctl start -D /home/pg11/data01
  2. waiting for server to start....2018-10-16 15:58:16.714 CST [10583] LOG: listening on IPv6 address "::1", port 1950
  3. 2018-10-16 15:58:16.714 CST [10583] LOG: listening on IPv4 address "127.0.0.1", port 1950
  4. 2018-10-16 15:58:16.731 CST [10583] LOG: listening on Unix socket "/tmp/.s.PGSQL.1950"
  5. 2018-10-16 15:58:16.762 CST [10584] LOG: database system was shut down at 2018-10-16 15:56:46 CST
  6. 2018-10-16 15:58:16.782 CST [10583] LOG: database system is ready to accept connections
  7. done
  8. server started
复制代码
验证WAL文件巨细,如下:
  1. [pg11@pghost2 ~]$ ll /home/pg11/data01/pg_wal
  2. total 65M
  3. -rw------- 1 pg11 pg11 64M Oct 16 16:03 000000010000000000000001
  4. drwx------ 2 pg11 pg11 4.0K Oct 16 15:56 archive_status
复制代码
可见WAL文件巨细为64MB。
使用 pg_resetwal 调解WAL文件巨细

pg_resetwal 用来重置WAL日记和一些控制信息,常用于数据库规复场景,不到万不得已不容易使用,以下演示使用pg_resetwal下令调解WAL日记文件巨细,仅供测试参考,生产情况慎用。
pg_resetwal 下令关于调解WAL文件巨细的选项,如下:
  1. --wal-segsize=wal_segment_size
复制代码
Set the new WAL segment size, in megabytes. The value must be set to a power of 2 between 1 and 1024 (megabytes). See the same option of initdb for more information.
以下演示在已有PostgreSQL实例底子上调解WAL日记文件巨细。
查察当前数据库的 pg_wal 目次,如下:
  1. [pg11@pghost2 pg_wal]$ ll /database/pg11/pg_root/pg_wal/
  2. total 2.3G
  3. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000013
  4. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000014
  5. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000015
  6. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000016
  7. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000017
  8. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000018
  9. -rw------- 1 pg11 pg11 16M Sep 30 14:45 000000010000001700000019
  10. -rw------- 1 pg11 pg11 16M Sep 30 14:45 00000001000000170000001A
  11. -rw------- 1 pg11 pg11 16M Sep 30 14:45 00000001000000170000001B
  12. ...
  13. 省略
  14. drwx------ 2 pg11 pg11 16K Oct 16 08:38 archive_status
复制代码
pg_wal 目次中已有大量WAL日记文件,WAL文件巨细为16MB,筹划将WAL日记文件调解成64MB。
pg_resetwal 操纵时必要关闭数据库,如下。
  1. [pg11@pghost2 ~]$ pg_ctl stop -m fast
  2. waiting for server to shut down.... done
  3. server stopped
  4. pg_resetwal 命令调整WAL日志文件大小为 64MB:
  5. [pg11@pghost2 ~]$ pg_resetwal --wal-segsize=64 -D /database/pg11/pg_root
  6. Write-ahead log reset
复制代码
验证WAL文件巨细,如下:
  1. [pg11@pghost2 ~]$ ll /database/pg11/pg_root/pg_wal/
  2. total 65M
  3. -rw------- 1 pg11 pg11 64M Oct 16 08:55 000000010000001700000029
  4. drwx------ 2 pg11 pg11 16K Oct 16 08:55 archive_status
复制代码
发现 pg_wal 目次中原有的WAL日记被清理,同时天生了巨细为64MB新的WAL文件。
启动数据库提示 min_wal_size 参数至少需设置成 wal_segment_size 巨细为 2 倍。
  1. [pg11@pghost2 ~]$ pg_ctl start
  2. waiting for server to start....2018-10-16 09:01:26.096 CST [24318] FATAL: "min_wal_size" must be at least twice "wal_segment_size".
  3. 2018-10-16 09:01:26.096 CST [24318] LOG: database system is shut down
  4. stopped waiting
  5. pg_ctl: could not start server
  6. Examine the log output.
复制代码
根据提示调解 postgresql.conf,设置如下:
  1. min_wal_size = 128MB
复制代码
启动数据库正常,如下:
  1. [pg11@pghost2 ~]$ pg_ctl start
  2. waiting for server to start....2018-10-16 09:02:45.680 CST [24614] LOG: listening on IPv4 address "0.0.0.0", port 1930
  3. 2018-10-16 09:02:45.680 CST [24614] LOG: listening on IPv6 address "::", port 1930
  4. 2018-10-16 09:02:45.687 CST [24614] LOG: listening on Unix socket "/tmp/.s.PGSQL.1930"
  5. 2018-10-16 09:02:45.715 CST [24614] LOG: redirecting log output to logging collector process
  6. 2018-10-16 09:02:45.715 CST [24614] HINT: Future log output will appear in directory "log".
复制代码
总结

以上演示了 11 版本通过 initdb 和 pg_resetwal 调解WAL文件巨细。
pg_resetwal 会清除pg_wal目次的WAL文件,本博客的测试样例仅供参考,生产情况使用需慎重。
以上为个人经验,盼望能给各人一个参考,也盼望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作