Im Anschluss an einen Workshop zu Oracle Spatial 12c hat einer der Teilnehmenden das Feature VPA (Vector Performance Accelerator) erfolgreich getestet.
Ich habe dazu eine kurze Nachricht in der Oracle Spatial and Graph Gruppe von LinkedIn geposted.
Ich habe dazu eine kurze Nachricht in der Oracle Spatial and Graph Gruppe von LinkedIn geposted.
Für diejenigen, die VPA selbst mal ausprobieren wollen, habe ich hier ein kleines Skript. Dieses vergleicht die Ausführungszeiten einer SQL Query ohne VPA gegen die mit VPA. Es kann für eigene zu testende Abfragen entsprechend angepaßt werden.
Das Ergebnis für 3 beispielhafte Queries kann sich mehr als sehen lassen. Die Zusammenfassung findet Ihr am Ende.
Für die Tests habe ich Beispieldaten (Postleitzahlgebiete von DE) des Oracle Partners GfK GeoMarketing verwendet. (Den anzupassenden Teil habe ich rot gekennzeichnet.)
Das Ergebnis für 3 beispielhafte Queries kann sich mehr als sehen lassen. Die Zusammenfassung findet Ihr am Ende.
Für die Tests habe ich Beispieldaten (Postleitzahlgebiete von DE) des Oracle Partners GfK GeoMarketing verwendet. (Den anzupassenden Teil habe ich rot gekennzeichnet.)
REM spatial_12c_vpa_perf_test.sql - collect performance information related to Oracle Spatial 12c REM Run script as user SYSTEM define SRDCNAME='SPATIAL_VPA_PERF_TRACE' set TERMOUT off FEEDBACK off VERIFY off TRIMSPOOL on HEADING off COLUMN SRDCSPOOLNAME NOPRINT NEW_VALUE SRDCSPOOLNAME select 'SRDC_'||upper('&&SRDCNAME')||'_'||upper(instance_name)||'_'|| to_char(sysdate,'YYYYMMDD_HH24MISS') SRDCSPOOLNAME from v$instance; set TERMOUT on REM spool &&SRDCSPOOLNAME..txt select '+----------------------------------------------------+' from dual union all select '| Diagnostic-Name: '||'&&SRDCNAME' from dual union all select '| Timestamp: '|| to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual union all select '| Machine: '||host_name from v$instance union all select '| Version: '||version from v$instance union all select '| DBName: '||name from v$database union all select '| Instance: '||instance_name from v$instance union all select '+----------------------------------------------------+' from dual / set HEADING on set echo on feedback on termout on pages 999 lines 132 long 300000000 DEFINE OBJ_OWNER = &1 DEFINE OBJ_PASSWD = &2 /* * Grant necessary privileges */ grant alter system to &&OBJ_OWNER; grant alter session to &&OBJ_OWNER; connect &&OBJ_OWNER/&&OBJ_PASSWD alter system flush shared_pool; alter session set tracefile_identifier='SRDC_Spatial_VPA_Perf_Test'; alter session set events '10046 trace name context forever, level 12'; -- alter session set sql_trace = TRUE; alter session set spatial_vector_acceleration = FALSE; set timing on REM -- ------------------------------------ REM -- Add query to be traced and analyzed REM -- Run without VPA first REM -- ------------------------------------ REM -- Begin of query with test as ( select sdo_aggr_union(sdoaggrtype(g.geometry,0.05)) aggr_geom from de_5digpc_2010 g where substr(g.id,1,1) in ('0','1','2')) select count(*) from test; REM -- End of query set timing off alter system flush shared_pool; alter session set spatial_vector_acceleration = TRUE; set timing on REM -- ------------------------------------ REM -- Add same query REM -- Run with VPA now REM -- ------------------------------------ REM -- Begin of query with test as ( select sdo_aggr_union(sdoaggrtype(g.geometry,0.05)) aggr_geom from de_5digpc_2010 g where substr(g.id,1,1) in ('0','1','2')) select count(*) from test; REM -- End of query set timing off spool off
Im Ergebnis erhalte ich Faktoren von 10 bis 253, was die Ausführungszeiten betrifft.
Fazit:
Je grösser die Anzahl der zu aggregierenden Polygone, umso höher ist der Performancegwinn.
Und hier sind die Ergbnisse im Detail:
Fazit:
Je grösser die Anzahl der zu aggregierenden Polygone, umso höher ist der Performancegwinn.
Und hier sind die Ergbnisse im Detail:
Anzahl der aggr. Objekte | Geometrietyp | Elapsed time in Sek. ohne VPA | Elapsed time in Sek. mit VPA | Faktor | Abfrage |
---|---|---|---|---|---|
10 | Polygon | 18,33 | 1,78 | 10 | with test as ( select sdo_aggr_union(sdoaggrtype(g.geometry,0.05)) aggr_geom from de_1digpc_2010 g) select count(*) from test; |
95 | Polygon | 151,66 | 2,44 | 62 | with test as ( select sdo_aggr_union(sdoaggrtype(g.geometry,0.05)) aggr_geom from de_2digpc_2010 g) select count(*) from test; |
2168 | Polygon | 1338,65 | 5,29 | 253 | with test as ( select sdo_aggr_union(sdoaggrtype(g.geometry,0.05)) aggr_geom from de_5digpc_2010 g where substr(g.id,1,1) in ('0','1','2')) select count(*) from test; |
Keine Kommentare:
Kommentar veröffentlichen