Synchronize til at vælge (meget) data fra måltabellen

Vi kan se i de aktive forespørgsler på SQL Server, at synchronize to udfører en select * from gigabytesofdata, som tager meget lang tid, mens en tilsvarende (native) merge-sætning er færdig på et par sekunder.

Vi har en staging-tabel (lidt data) og en mål-tabel (en tabel på 55 GB på disk).

Sætningen:

synchronize gigabytesofdata
from        stagingtable
with        update or insert
identified 
by          kolommen, uit, de, primary, key

I de aktive forespørgsler kan vi se, mens denne sætning kører:

select * from gigabytesofdata

Og det havde vi ikke forventet (og det tager naturligvis også meget lang tid).

Forventningen er, at synkroniseringen kun kigger på dataene i staging-tabellen, hvor records bliver indsat i gigabytesofdata, hvis der ikke allerede findes records med de pågældende nøglekolonner, og ellers bliver opdateret.

Gør vi noget forkert (og i givet fald, kan I forklare hvad?), eller er dette et scenarie, som synchronize-sætningen ikke håndterer korrekt? Denne synchronize-sætning virker nemlig ud fra beskrivelsen til at være præcis det, vi har brug for!

Het beschreven gedrag is zoals de code momenteel uitgevoerd wordt. Echter, zoals terecht gezegd is het mogelijk om de uitvoering te optimaliseren. In een ander topic is hier al verder op ingegaan:

Als idee voor verbetering. De basis is dat als alleen insert en update gebruikt worden, en het doelplatform ondersteunt server-side filtering, het mogelijk is om de brondataset te analyseren op eigenschappen zoals een beperkt waardenbereik van een datumveld of getal, en alleen een doorsnede op te halen van de doeltabel die voldoet aan deze eigenschappen qua waardenbereik. Dit kan makkelijk duizenden keren sneller zijn als het gaat om bijladen, terwijl het volledig ophalen van de doeltabel dan veel onnodige I/O’s veroorzaakt.

Advies is om in te haken op het idee uit bovenstaande link door daar een reactie achter te laten.

Deze vraag is automatisch gesloten na 2 weken inactiviteit. Het laatste gegeven antwoord is gemarkeerd als oplossing.

Gelieve een nieuwe vraag te stellen via een apart topic als het probleem opnieuw optreedt. Gelieve in de nieuwe vraag een link naar dit topic op te nemen door de URL er van in de tekst te plakken.