Hi, On 2021-11-15 16:29:28 -0500, Robert Haas wrote: > v1: 0.378 ms > v2: 0.391 ms > common base commit (10eae82b2): 0.376 ms
Is this with assertions enabled? Because on my workstation (which likely is slower on a single-core basis than your laptop) I get around half of this with an optimized build (and a non-optimized build rarely is worth using as a measuring stick). It could also be that your psqlrc does something heavyweight? > methodology: > for i in `seq 1 1000`; do psql -c '\timing' -c 'select > txid_current();'; done | grep '^Time:' | awk '{total+=$2} END {print > total/NR}' > run twice, discarding the first result, since the very first > connection attempt after starting a new server process is notably > slower Hm. I think this might included a bunch of convoluting factors that make it hard to judge the actual size of the performance difference. It'll e.g. include a fair bit of syscache initialization overhead that won't change between the two approaches. This could be addressed by doing something like -c "SELECT 'txid_current'::regproc;" first. Also, the psql invocations itself use up a fair bit of time, even if you ignored them from the result with the \timing trick. A pgbench -C doing 1k SELECT 1;s is about ~1.5s for me, whereas psql is ~5.7s. Just to size up the order of magnitude of overhead of the connection establishment and syscache initialization, I ran a pgbench with a script of SELECT 1; SELECT 1; SELECT 'txid_current()'::regprocedure; SELECT 'txid_current()'::regprocedure; SELECT txid_current(); SELECT txid_current(); and ran that with pgbench -n -f /tmp/txid.sql -C -t1000 -P1 --report-latencies and got statement latencies in milliseconds: 0.125 SELECT 1; 0.024 SELECT 1; 0.095 SELECT 'txid_current()'::regprocedure; 0.025 SELECT 'txid_current()'::regprocedure; 0.033 SELECT txid_current(); 0.024 SELECT txid_current(); which nicely shows how much of the overhead is not related to the actual txid_current() invocation. Greetings, Andres Freund