RE: Big Performance drop of Exceptions in UDFs between V11.2 and 13.4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




   >  -----Original Message-----
   >  From: Justin Pryzby <pryzby@xxxxxxxxxxxxx>
   >  Sent: Saturday, August 21, 2021 18:17
   >  To: ldh@xxxxxxxxxxxxxxxxxx
   >  Cc: Tom Lane <tgl@xxxxxxxxxxxxx>; pgsql-performance@xxxxxxxxxxxxxx
   >  Subject: Re: Big Performance drop of Exceptions in UDFs between V11.2
   >  and 13.4
   >  
   >  Could you send SELECT * FROM pg_config() and try to find the CPU
   >  model ?
   >  
   >  I think it's possible the hypervisor is trapping and emulating unhandled
   >  CPU instructions.
   >  
   >  Actually, it would be interesting to see if the performance differs
   >  between
   >  11.2 and 11.13.  It's possible that EDB compiled 11.13 on a newer CPU
   >  (or a newer compiler) than 11.2 was compiled.
   >  
   >  If you test that, it should be on a separate VM, unless the existing data
   >  dir can be restored from backup.  Once you've started a cluster with
   >  updated binaries, you should avoid downgrading the binaries.



Hello all,

OK, I was able to do a clean install of 13.4 on the VM. All stock settings, no extensions loaded, pure clean straight out of the install.

create table sampletest (a varchar, b varchar);
-- truncate table sampletest;
insert into sampletest (a, b)
select substr(md5(random()::text), 0, 15), (100000000*random())::integer::varchar
  from generate_series(1,1000000);

CREATE OR REPLACE FUNCTION toFloat(str varchar, val real)
RETURNS real AS $$
BEGIN
  RETURN case when str is null then val else str::real end;
EXCEPTION WHEN OTHERS THEN
  RETURN val;
END;
$$ LANGUAGE plpgsql COST 1 IMMUTABLE;


explain (analyze,buffers,COSTS,TIMING) select MAX(toFloat(b, null)) as "b" from sampletest

Aggregate  (cost=21370.00..21370.01 rows=1 width=4) (actual time=1780.561..1780.563 rows=1 loops=1)
  Buffers: shared hit=6387
  ->  Seq Scan on sampletest  (cost=0.00..16370.00 rows=1000000 width=8) (actual time=0.053..97.329 rows=1000000 loops=1)
        Buffers: shared hit=6370
Planning:
  Buffers: shared hit=36
Planning Time: 2.548 ms
Execution Time: 1,810.330 ms


explain (analyze,buffers,COSTS,TIMING) select MAX(toFloat(a, null)) as "a" from sampletest

Aggregate  (cost=21370.00..21370.01 rows=1 width=4) (actual time=863243.876..863243.877 rows=1 loops=1)
  Buffers: shared hit=6373
  ->  Seq Scan on sampletest  (cost=0.00..16370.00 rows=1000000 width=15) (actual time=0.009..301.553 rows=1000000 loops=1)
        Buffers: shared hit=6370
Planning:
  Buffers: shared hit=44
Planning Time: 0.469 ms
Execution Time: 863,243.911 ms


So I am still able to reproduce this on a different VM and a clean install of 13.4 ☹


SELECT * FROM pg_config();

BINDIR	C:/PROGRA~1/POSTGR~1/13/bin
DOCDIR	C:/PROGRA~1/POSTGR~1/13/doc
HTMLDIR	C:/PROGRA~1/POSTGR~1/13/doc
INCLUDEDIR	C:/PROGRA~1/POSTGR~1/13/include
PKGINCLUDEDIR	C:/PROGRA~1/POSTGR~1/13/include
INCLUDEDIR-SERVER	C:/PROGRA~1/POSTGR~1/13/include/server
LIBDIR	C:/PROGRA~1/POSTGR~1/13/lib
PKGLIBDIR	C:/PROGRA~1/POSTGR~1/13/lib
LOCALEDIR	C:/PROGRA~1/POSTGR~1/13/share/locale
MANDIR	C:/Program Files/PostgreSQL/13/man
SHAREDIR	C:/PROGRA~1/POSTGR~1/13/share
SYSCONFDIR	C:/Program Files/PostgreSQL/13/etc
PGXS	C:/Program Files/PostgreSQL/13/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE	--enable-thread-safety --enable-nls --with-ldap --with-openssl --with-uuid --with-libxml --with-libxslt --with-icu --with-tcl --with-perl --with-python
CC	not recorded
CPPFLAGS	not recorded
CFLAGS	not recorded
CFLAGS_SL	not recorded
LDFLAGS	not recorded
LDFLAGS_EX	not recorded
LDFLAGS_SL	not recorded
LIBS	not recorded
VERSION	PostgreSQL 13.4


And here is SYSINFO:

C:\Users\LHASSON>systeminfo

Host Name:                 PRODDB
OS Name:                   Microsoft Windows Server 2012 R2 Standard
OS Version:                6.3.9600 N/A Build 9600
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Server
OS Build Type:             Multiprocessor Free
Original Install Date:     2015-09-19, 18:19:41
System Boot Time:          2021-07-22, 11:45:09
System Manufacturer:       VMware, Inc.
System Model:              VMware Virtual Platform
System Type:               x64-based PC
Processor(s):              4 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 79 Stepping 1 GenuineIntel ~2397 Mhz
                           [02]: Intel64 Family 6 Model 79 Stepping 1 GenuineIntel ~2397 Mhz
                           [03]: Intel64 Family 6 Model 79 Stepping 1 GenuineIntel ~2397 Mhz
                           [04]: Intel64 Family 6 Model 79 Stepping 1 GenuineIntel ~2397 Mhz
BIOS Version:              Phoenix Technologies LTD 6.00, 2020-05-28
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume1
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC-05:00) Eastern Time (US & Canada)
Total Physical Memory:     65,535 MB
Available Physical Memory: 57,791 MB
Virtual Memory: Max Size:  75,263 MB
Virtual Memory: Available: 66,956 MB
Virtual Memory: In Use:    8,307 MB
Page File Location(s):     C:\pagefile.sys






[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux