Hastigheten til synchronize er økt ved å tillate mutasjon av data og utføring av handlinger parallelt.
Statementet synchronize henter begge tabellene, bestemmer forskjellene og anvender dem deretter rad for rad. Mutasjon av data og/eller utførelse av handlinger via triggere bestemmer ofte varigheten. Den nye klausulen parallel øker hastigheten på disse aktivitetene der det er mulig ved å utføre dem samtidig.
Klausulen parallel
Klausulen kommer etter batchsize og før continue on first ... errors som i:
synchronize fakturaer_soll@InMemoryStorage
til fakturaer_ist@InMemoryStorage
med innsetting
identifisert
ved fakturanummer
batchsize 1
parallel 8
...
Antall parallelle prosesser
Sesjonsinnstillingen invantive-sql-psql-max-parallel begrenser samtidig behandling, på samme måte som for de parallelle PSQL-konstruksjonene.
Som standard foregår behandlingen nå parallelt. Verdien parallel 1 utfører statementet sekvensielt som før.
Det er ingen parallell behandling hvis det er en åpen transaksjon på sesjonen, eller hvis statementet selv allerede er innenfor en parallell PSQL-konstruksjon. Dette forhindrer en eksplosjon av parallellisme.
Annen logikk som antall rader med feilmeldinger før den stopper, forblir uendret.
Triggere på prosessene
Også triggere utføres parallelt. Å lese variabler utenfor triggeren er mulig, men skriving krever bruk av dbms_atomic. Gjennom dbms_lock kan parallelliteten begrenses for kritiske seksjoner.
Utdata fra dbms_output skrives ut per fullførte batch. Dette sørger for at utdata ved håndtering av en batch ikke flettes sammen.
Hastighetsbegrensning av plattform
Den parallelle utførelsen er begrenset til prosessoren. Hvis det leses og/eller skrives på en (sky)plattform, vil disse handlingene bli utsatt for begrensningene på den plattformen.
Hvis den faktiske begrensningen på gjennomstrømningshastigheten for parallel allerede ligger ved en plattform, for eksempel grunnet en rate limiter, vil parallel ikke gi ekstra hastighet. Hvis det var rom for forbedring, vil denne plassen bli fylt ytterligere.
Tester viser at utførelsen skalerer nesten lineært inntil alle prosessorer er opptatt, dersom det ikke er noen påvirkning av hastighetsbegrensninger på underliggende plattformer.
Eksempel: parallel mutasjon
I dette eksempelet behandles mutasjoner for tre rader parallelt:
create or replace table testsync_soll@InMemoryStorage
as
select 1 id
, 'x' verdi
union all
select 2
, 'X'
union all
select 3
, 'y'
;
create or replace table testsync_ist@InMemoryStorage
as
select 1 id
, 'z' verdi
;
synchronize testsync_soll@InMemoryStorage
til testsync_ist@InMemoryStorage
med innsetting
eller
oppdatering av alle
unntatt rowid$
identifisert
ved id
parallel 4
;
select tsi.id
, tsi.verdi
from testsync_ist@InMemoryStorage tsi
order
by tsi.id
Se også
- https://documentation.invantive.com/Invantive+UniversalSQL/Packages/dbms_atomic
- https://documentation.invantive.com/Invantive+UniversalSQL/Packages/dbms_lock
- Meer datadoorvoer dankzij "parallel" PSQL constructies
Tilgjengelighet
Den nye funksjonaliteten er tilgjengelig fra og med utgivelse 27.0.