Parallel utførelse av `synchronize` med `parallel`-klause

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å

Tilgjengelighet

Den nye funksjonaliteten er tilgjengelig fra og med utgivelse 27.0.