2012-03-25 3 views
1

gut das ist mein ProblemArt in ssis braucht viel Zeit, wenn ich Arbeit Split tut tun Art auf ole db Befehl Bedingung

i 2 Quelle verwenden

first query (select * from servera.databasea.tablea) 
secund query(select id, modifiedon from serverb.databaseb.tableb) 
sort first query, sort second query 
    merge join at left join 
condition split is.. isnull(idtableb) then i do insert (insert ont serverb) 
       !isnull(idtableb) && modifiedontableb<modifiedontablea then update(on server b) 

es funktioniert ok mit ein paar Zeilen aber ich arbeite mit mehr von 50000 und nehmen mehr als 2 Stunden auf Art und erhalten Fehler

gut meine eine andere Art und Weise

Art auf oledbsource auf der rechten Maustaste auf Show advancededitor und o tat n Eingangs- und Ausgangseigenschaften auf OLE DB-Quelle für die Ausgabe i IsSorted wählen geändert true

auf Ausgabespalten zu id geändert i sortkeyposition bis 1 (ich habe nicht gesetzt nichts ModifiedOn) so habe ich diese Schritte für 2 oledbsource (oledb für server1 und Server 2)

es viel schneller arbeiten sie bei 5 minuts fertig und füge (immer) Zustand Split jetzt nicht funktioniert: s cuz immer so einsetzen werde i bei Bedingung Split hinzugefügt Parse (DT_DBDATE) und es wird weiterhin gleich (nur Einsätze) nie zu aktualisieren te nachdem ich mofidiedon analysiert habe (DT_DATE) und es weiterhin gleich ist. dann ist meine Frage (ich möchte nicht sortieren), wie kann ich Zustandsplitarbeiten tun?

+1

Ich habe keine Ahnung, was Sie fragen? –

+0

sort braucht viel Zeit, dann Sortierung direkt auf oledbsource jetzt Bedingung Split funktioniert nicht (immer zu Einfügungen) jetzt 1.-Sortierung muss schneller sein, aber warum? ór 2.-wie mache ich kondition split funktioniert (wenn sort ist direkt auf oledbsource) es geht immer zu einsätzen nie zu aktualisieren –

+0

Gibt es einen Grund, warum Sie nicht eine Suche gegen ServerB verwenden können? Selbst bei einem großen Datensatz auf diesem Server verbraucht Ihre Abfrage was, 12 Bytes pro Zeile? Ihr zweiter Fall für bedingte Aufteilung kann vereinfacht werden, nur die geänderte Datumsprüfung – billinkc

Antwort

4

Der Sortierschritt dauert lange, da Ihnen für die Sortieroperation nur wenig Speicher zur Verfügung steht. Dies bedeutet, dass es beginnt, auf der Festplatte zu sortieren, und das ist schrecklich langsam. Optionen hierfür sind die Verwendung von Sortierkomponenten von Drittanbietern wie NSort.

Ansonsten können Sie wie folgt vorgehen:

Damit Ihre MERGE Ihre Eingaben sortiert werden müssen, arbeiten, sowohl in der Abfrage und die SortKeyPosition verwenden. Auch sie müssen gleich sortiert werden.

sollten Ihre Anfragen lesen:

SELECT * FROM servera.databasea.tablea ORDER BY id, modifiedon 

SELECT id, modifiedon FROM serverb.databaseb.tableb ORDER BY id, modifiedon 

nun die IsSorted auf TRUE gesetzt, gesetzt SortKeyPosition 1 bis ID

In Ihrem MERGE Schritt-ID verwenden, um Schlüssel-Join.

In Ihrer bedingten Teilung können Sie nun Ihre beiden Fälle verwenden.

Bitte beachten Sie, wenn Sie MULTIPLE Zeilen pro ID haben, brauchen Sie etwas mehr zum Sortieren/Beitreten, so dass Sie die Dinge nicht in der falschen Reihenfolge bekommen.

+0

Ich werde Sortkeeposition 1 auf ID setzen, aber modifiziert? wird es 2 sein? oder es wird nichts haben? –

+0

Soweit ich mich erinnern kann (ich habe kein Test env vor mir) MERGE Task verwendet die Sortierschlüssel als Join-Schlüssel. Wenn Sie nicht auf Modifiedon beitreten möchten, sollten Sie wahrscheinlich nicht nach ihm sortieren. ist nicht wirklich wichtig (normalerweise), wenn es in der ole db-Quelle sortiert ist oder nicht. – cairnz

Verwandte Themen