Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Umstellung MS SQL Job von 2005 auf 2008

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Claudine, 25 Oktober 2017.

  1. Claudine

    Claudine Neuer Benutzer

    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
    
    
    -- CR
    
    DELETE [OSW].[tbl_CR_Involvement_Analysis_Test]
    
    
    
    set @V_n = 0
    
    
    DECLARE curCR_OSW_Involvement CURSOR
    
    FORWARD_ONLY
    
    FORselect 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. ukulele

    ukulele Datenbank-Guru

    Ich würde mal vermuten das deine alte Tabelle [OSW].[tbl_CR_Involvement_Analysis] oder
    DWH.tbl_CR diverse Indexe gesetzt hatte die auf dem neuen System fehlen. Ich würde auserdem vermuten das sich die Logik mit einem Cursor der Schleifen aufruft vermutlich irgendwie besser abbilden läßt, dazu fehlt mir allerdings das Verständnis für die Daten.
     
  3. Claudine

    Claudine Neuer Benutzer

    Hi Ukulele,
    leider falsch :-(
    Alle Tabellen haben die gleichen Indexe.:( aus der DWH.tbl_CR kommen neue CR-Nummern, welche es in der [OSW].[tbl_CR_Involvement_Analysis] noch nicht gibt. Diese werden in die [OSW].[tbl_CR_Involvement_Analysis_Test] eingefügt und bekommen dort derzeit 53 Org IDs zugewiesen.
     
  4. ukulele

    ukulele Datenbank-Guru

    Theoretisch kann es durch die Änderung der SQL Version passieren das die Performance sich negativ verändert. Wenn du dem wirklich nachgehen willst würde ich allerdings erst die Hardware und die Installation ausschließen und das nochmal frisch installieren (auch unter SQL 2005) um das Problem zu reproduzieren. Ist der Unterschied auf gleicher Hardware mit frisch installiertem 2005 und 2008 reproduzierbar? Dann müsste man eventuell kostenpflichtigen MS Support in Anspruch nehmen...

    Oder man denkt sich eine optimalere Anweisung ohne Schleife in Cursor aus, meist verbessert das viel mehr :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden