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: ldh@xxxxxxxxxxxxxxxxxx <ldh@xxxxxxxxxxxxxxxxxx>
   >  Sent: Saturday, August 21, 2021 19:02
   >  To: Justin Pryzby <pryzby@xxxxxxxxxxxxx>
   >  Cc: Tom Lane <tgl@xxxxxxxxxxxxx>; pgsql-performance@xxxxxxxxxxxxxx
   >  Subject: RE: Big Performance drop of Exceptions in UDFs between V11.2
   >  and 13.4
   >  
   >  
   >  
   >     >  -----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
   >  


And by the way, I reproduced this again on my personal laptop with a fresh clean base-line install of 13.4.

Systeminfo
-------------------
OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.19043 N/A Build 19043
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Workstation
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Registered Organization:
Product ID:                00330-50535-98614-AAOEM
Original Install Date:     2021-04-04, 09:50:59
System Boot Time:          2021-08-19, 10:18:03
System Manufacturer:       LENOVO
System Model:              20HRCTO1WW
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 142 Stepping 9 GenuineIntel ~801 Mhz
BIOS Version:              LENOVO N1MET64W (1.49 ), 2020-10-14
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:     16,219 MB
Available Physical Memory: 4,971 MB
Virtual Memory: Max Size:  32,603 MB
Virtual Memory: Available: 12,168 MB
Virtual Memory: In Use:    20,435 MB
Page File Location(s):     C:\pagefile.sys


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





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

  Powered by Linux