我正在 ubuntu 20.04 虚拟机上设置一个新的 PG13 集群。通过 pgbench 看到的性能不好也不坏。我试图找出它为什么是这个水平,而不是更高,方法是尝试找到它被限制的地方。
通过运行 pgbench,我以为我会看到一个明显的瓶颈:
- CPU 方面。然而 htop 显示没有一个核心完全达到最大负荷。在 4 核机器上,负载约为 2 或小于 2。
- 在磁盘中。运行其他基准测试时,我可以看到磁盘的运行速度比 pgbench 下快得多。这些数字是合理的。将磁盘速度(iSCSI)加倍没有区别。
- 在网络中。但 iftop 显示所有数字都是合理的。直接通过本地套接字而不是 TCP 确实可以加快速度(大约两倍 tps)。但此时的瓶颈是仍然不是 CPU 或磁盘。
上面显示了通过 127.0.0.1 进行的实验(以确保网络堆栈参与其中)。Iotop(如果我理解正确的话)显示,进程在 IO 上阻塞的时间不到 1%。
默认的 pgbench 参数,但有 30 个客户端:
pgbench -h 127.0.0.1 -U myuser mydb -T 50 -c 30
但它们都在更新语句期间被阻止 - 等待。我这里是否遗漏了一些明显的东西?我可以运行哪些其他工具来更好地了解该问题?
编辑以添加后续的 pgbench 输出
nik@pgdb2:~$ sudo -u postgres pgbench -s 100 -h pgdb1 -p 5433 -c 30 -T 5 -j 2
Password:
scale option ignored, using count from pgbench_branches table (100)
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 100
query mode: simple
number of clients: 30
number of threads: 2
duration: 5 s
number of transactions actually processed: 9814
latency average = 15.372 ms
tps = 1951.612278 (including connections establishing)
tps = 1955.965884 (excluding connections establishing)