Hi hackers, Inspired by Andre's works, I put efforts to try to improve GetSnapShotData(). I think that I got something.
As is well known GetSnapShotData() is a critical function for Postgres performance, already demonstrated in other benchmarks. So any gain, no matter how small, makes a difference. So far, no regression has been observed. Windows 10 64 bits (msvc 2019 64 bits) pgbench -M prepared -c $conns -S -n -U postgres conns tps head tps patched 1 2918.004085 3027.550711 10 12262.415696 12876.641772 50 13656.724571 14877.410140 80 14338.202348 15244.192915 pgbench can't run with conns > 80. Linux Ubuntu 64 bits (gcc 9.4) ./pgbench -M prepared -c $conns -j $conns -S -n -U postgres conns tps head tps patched 1 2918.004085 3190.810466 10 12262.415696 17199.862401 50 13656.724571 18278.194114 80 14338.202348 17955.336101 90 16597.510373 18269.660184 100 17706.775793 18349.650150 200 16877.067441 17881.250615 300 16942.260775 17181.441752 400 16794.514911 17124.533892 500 16598.502151 17181.244953 600 16717.935001 16961.130742 700 16651.204834 16959.172005 800 16467.546583 16834.591719 900 16588.241149 16693.902459 1000 16564.985265 16936.952195 I was surprised that in my tests, with connections greater than 100, the tps performance drops, even in the head. I don't have access to a powerful machine, to really test with a high workload. But with connections below 100, It seems to me that there are obvious gains. patch attached. regards, Ranier Vilela
001-improve-scability-procarray.patch
Description: Binary data