Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 3 von 3
  1. #1
    Zaungast
    Registriert seit
    08.03.2012
    Beiträge
    18

    Böse Umstellung MS SQL Job von 2005 auf 2008

    Hallo Zusammen,

    im Rahmen einer Datenbankmigration habe ich das Problem, dass in einem Job Tabellen gefüllt werden sollen (mit Hilfe eines Cursors)- siehe Code Beispiel vom MS SQL Servers 2005 auf den MS SQL Server 2008. dieser Job läuft auf dem alten System max. 20 min. Nach Übernahme auf den neuen Server dauert er länger als 12 Stunden. Trotzdem die Tabellen 1:1 übernommen wurden, sehen die Ablaufpläne unterschiedlich aus.

    Weiß hier jemand, wie man das anpassen/ändern kann ?

    Beste Grüße
    Code:
    DECLARE @V_CR_Number char(11);
    DECLARE @V_CR_Subnumber char(4);
    DECLARE @V_Count int;
    DECLARE @V_n Int -- Org_ID
    DECLARE @V_MP_Number char(6);
    
    -- CR
    DELETE OSW.[tbl_CR_Involvement_Analysis_Test]
    
    
    set @V_n = 0
    
    DECLARE curCR_OSW_Involvement CURSOR
    FORWARD_ONLY
    FOR select CR_Number, CR_Subnumber from DWH.tbl_CR ORDER BY CR_Number, CR_Subnumber;
    
    OPEN curCR_OSW_Involvement;
    FETCH NEXT FROM curCR_OSW_Involvement
    INTO @V_CR_Number, @V_CR_Subnumber;
    WHILE @@FETCH_STATUS = 0
    BEGIN
      set @V_n = 0
    
      WHILE @V_n < 120 -- zur Zeit Org_ID  1 bis 53
      BEGIN   
        set @V_n = @V_n + 1;
    
        SELECT @V_Count = COUNT(*) FROM OSW.[tbl_CR_Involvement_Analysis] WHERE
                      [CR_Number] = @V_CR_Number AND [CR_Subnumber] = @V_CR_Subnumber
                      AND [Org_ID] = @V_n;
        IF @V_Count = 0
        BEGIN
          INSERT INTO OSW.[tbl_CR_Involvement_Analysis_Test]
                   ([active]
                   ,[CR_Number]
                   ,[CR_Subnumber]
                   ,[Org_ID]
                   ,[Ins_Date]
                   ,[Ins_User])
          VALUES (1, @V_CR_Number, @V_CR_Subnumber, @V_n, GETDATE(), 'Script')
        END
      END 
    
      FETCH NEXT FROM curCR_OSW_Involvement
      INTO @V_CR_Number, @V_CR_Subnumber;
    END;
    DEALLOCATE curCR_OSW_Involvement;

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.272

    Standard

    Sind auch die Indexe, Constraints usw. 1:1 übernommen...
    Christian

  3. #3
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.307

    Standard

    Zitat Zitat von claudine99 Beitrag anzeigen
    dieser Job läuft auf dem alten System max. 20 min. Nach Übernahme auf den neuen Server dauert er länger als 12 Stunden.
    Also auf den ersten Blick sieht das Konstrukt so aus, also ob es auch in 2 Sekunden laufen könne.
    Mglw. sogar ohne Indizes. Womit ich nicht sagen will, dass Indizes nicht da sein sollten.

    Warum wird in einer Schleife immer wieder der Count eines Select gebildet, obwohl die Prüfung auf Existenz eines Datensatzes reichen würde?
    Warum wird umständlich mit Cursor durchgestept?

    Vielleicht übersehe ich etwas, aber für mich sieht das nach einer simplen Anweisung aus:
    Insert .. into Zieltabelle
    Select .. from tabelle A join Tabelle B ,,

    Das wären dann ggF. 2 Fulltablescan und das Ergebnis in einem Rutsch als Insert.
    Gruß, defo

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •