PostgreSQL自带的命令行工具15- pg_test_fsync
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777
pg_test_fsync
是 PostgreSQL 提供的一个实用工具,它用于测试和衡量文件系统同步操作的性能。这个工具可以帮助数据库管理员理解 PostgreSQL 数据库在当前硬件和操作系统上进行数据写入和同步时的性能表现。fsync
操作是数据库确保数据从内存写入磁盘,并且稳定存储的重要步骤,它对数据库的持久性和恢复能力至关重要。
通过help查看帮助文档。
[pg16@test ~]$ pg_test_fsync --help
Usage: pg_test_fsync [-f FILENAME] [-s SECS-PER-TEST]
基本用法
pg_test_fsync
通过执行多种测试方法来衡量 fsync
、open
/write
/close
、fdatasync
和 O_DIRECT
写入的性能。使用此工具不需要特殊的参数,只需要在命令行中执行:
pg_test_fsync
执行后,pg_test_fsync
会依次运行多种测试,并报告每种方法的操作次数和每秒操作数,这有助于评估不同的同步方法对性能的影响。
[pg16@test ~]$ pg_test_fsync
5 seconds per test
O_DIRECT supported on this platform for open_datasync and open_sync.
Compare file sync methods using one 8kB write:
(in wal_sync_method preference order, except fdatasync is Linux's default)
open_datasync 8980.128 ops/sec 111 usecs/op
fdatasync 8783.495 ops/sec 114 usecs/op
fsync 7032.075 ops/sec 142 usecs/op
fsync_writethrough n/a
open_sync 7308.552 ops/sec 137 usecs/op
Compare file sync methods using two 8kB writes:
(in wal_sync_method preference order, except fdatasync is Linux's default)
open_datasync 4845.319 ops/sec 206 usecs/op
fdatasync 9473.586 ops/sec 106 usecs/op
fsync 6888.160 ops/sec 145 usecs/op
fsync_writethrough n/a
open_sync 3684.426 ops/sec 271 usecs/op
Compare open_sync with different write sizes:
(This is designed to compare the cost of writing 16kB in different write
open_sync sizes.)
1 * 16kB open_sync write 7159.966 ops/sec 140 usecs/op
2 * 8kB open_sync writes 3642.354 ops/sec 275 usecs/op
4 * 4kB open_sync writes 1871.279 ops/sec 534 usecs/op
8 * 2kB open_sync writes 953.819 ops/sec 1048 usecs/op
16 * 1kB open_sync writes 491.511 ops/sec 2035 usecs/op
Test if fsync on non-write file descriptor is honored:
(If the times are similar, fsync() can sync data written on a different
descriptor.)
write, fsync, close 6918.714 ops/sec 145 usecs/op
write, close, fsync 6897.709 ops/sec 145 usecs/op
Non-sync'ed 8kB writes:
write 792349.557 ops/sec 1 usecs/op
输出解析
pg_test_fsync
输出的主要信息包括:
- 每种同步/写入方法的测试结果,包括延迟、每秒操作的次数(tps)等。
- 测试方法,如
fsync
、fdatasync
或使用O_DIRECT
标志的open
/write
/close
操作等。 - 针对每种方法的性能表现,使数据库管理员能够比较并选择最佳的同步策略。
高级选项
pg_test_fsync
也提供了一些可选参数,数据库管理员可以用它们来自定义测试行为,如指定测试文件的大小或测试的持续时间。例如:
-f
:指定测试文件的名称。-s
:表示执行每一种同步或写入测试所用的时间,以秒为单位。
使用场景
pg_test_fsync
特别适用于:
- 新设置的系统:检测不同的文件系统配置和硬件性能。
- 性能优化:确定 PostgreSQL 数据库最佳的同步策略,尤其是在高写入场景下。
- 故障诊断:在遇到数据库性能问题时,帮助定位是否与磁盘同步操作有关。
通过使用 pg_test_fsync
,可以显著地提高 PostgreSQL 数据库的运行效率,通过选择最合适的同步方法来优化数据写入和恢复的性能。
谨记:心存敬畏,行有所止。