Hello,
I'd like to propose changing the default value of update_process_title to off, at least on Windows. I'll submit a
patchif we see no big problem.
PROBLEM
========================================
Our customer is trying to certify PostgreSQL with their packaged software product. Currently, the product supports a
famousDBMS (let me call it DBMS-X hereafter). They evaluated the performance of PostgreSQL and DBMS-X.
The performance of PostgreSQL was very bad on Windows. The result was as follows (the unit is some request
throughput). These were measured on the same machine.
* DBMS-X on Windows: 750
* PostgreSQL on Windows: 250
* PostgreSQL on Linux: 870
The performance on Windows was considered unacceptable. Using pgbench, we could see similar result -- the performance
onLinux is about three times higher than on Windows.
CAUSE
========================================
The CreateEvent() and CloseHandle() Win32 API calls from postgres.exe was consuming much CPU time. While stressing the
systemby running the select-only mode of pgbench, Windows performance monitor showed 50% User Time, 40% Privileged
Time,and 10% Idle Time. Windows Performance Toolkit, which corresponds to perf on Linux, revealed that half of the
privilegedtime was used by CreateEvent() and CloseHandle() called from set_ps_display(). Those calls are performed
whenupdate_process_title is on.
With update_process_title off, the performance became much closer to Linux as follows. The scaling factoris 300. The
pgbenchclient was run on a different Windows machine with 12 CPU cores. The effect was minimal on Linux.
C:\> pgbench -h <db_server> -T 30 -c #clients -j 12 -S benchdb
[Windows]
#clients on off
12 29793 38169
24 31587 87237
48 32588 83335
96 34261 67668
[Linux]
#clients on off
12 52823 52976
24 90712 91955
48 108653 108762
96 107167 107140
PROPOSAL AND CONSIDERATIONS
========================================
I think we should change the default of update_process_title to off on Windows because:
1. The performance gain is huge.
2. It's almost useless because we can only see the postgres command line with Process Explorer, which the user must
downloadfrom Microsoft and install.
3. I don't see the benefit of update_process_title=on at the expense of performance.
4. The default setting of PostgreSQL parameters should be friendly. I'm afraid many users cannot track the cause of
poorperformance to update_process_title. I heard that MySQL's popularity was partly because it ran smoothly on Windows
inthe early days. PostgreSQL should be, too.
The question is, do we want to change the default to off on other OSes? Is the command line really useful? If useful,
doesit need to be on by default?
Regards
Takayuki Tsunakawa