SQL Server fejl: Transaction deadlocks

Jeg har netop flyttet den fysiske placering af en SQL Server, som primært har til opgave at håndtere MS CRM. I den forbindelse stødte jeg på en kedelig fejl, som kan betyde tab af data...den skal vi lige kigge nærmere på.
 

Problemet

Event Vieweren viser følgende meddelelse:

Host SQLSRV012: error while processing organization c99bfbfa-4253-de11-bd20-001e0bbc75ef. Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.

Det handler altså om deadlocking og deadlock victim, men hvad er det så?
 

Hvad er deadlocking?

Deadlocking opstår, når to processer forsøger at låse på samme objekter i SQL Serveren, for at udføre handlinger på objektet. Når dette sker, vil SQL Server identificerer problemet og eventuelt afslutte den proces, der i første omgang havde låst objektet, så den anden proces kan udføre sit arbejde. Det afbrudt transaktionen bliver rullet tilbage og en fejlmeddelelse oprettes for den mislykkede proces. En sådan fejlmeddelelse kan ses herover.

Det er ikke nødvendigvis sådan, at det altod er den første proces, der bliver afbrudt til fordel for den anden proces. Som udgangspunkt er det sådan, at den proces, der kræver mindst overhead ved rollback, er den proces der bliver afbrudt, og det er den som er "deadlock victim".

Læs mere om deadlocks i følgende artikel (engelsk): http://msdn.microsoft.com/en-us/library/ms177433.aspx
 

Løsning af problemet

I MS CRM er det MSCRMAsyncService, som ofte vil forårsage problemet. Det kan dog også være egne eller tredjeparts applikationer.

Hvis det er MSCRMAsyncService som er årsagen til problemet kan problemet ofte løses ved at allokere mere tid til OLEDB Connection'en. I efterfølgende eksempel vil vi ligeledes sætte den tid ASP.NET har til at importere data (hvilket MSCRMAsyncService jo også er ansvarlig for), dog er denne indstilling ikke den sandsynlige årsag til problemet, det er OLEDB Connection'en.

Gør følgende:

  1. På MS CRM Serveren: Klik på Start, klik på Run, indtast Regedit, og klik på knappen OK.
     
  2. Find følgende registreringsnøgle: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM
     
  3. Klik, med den højre musknap, på MSCRM, og vælg New. Klik på DWORD Value. På 64-bit servere vælges DWORD (32-bit) Value.
     
  4. Navngiv DWORD Value'n OLEDBTimeout.
     
  5. Klik, med den højre musknap, på den netop oprettede key; OLEDBTimeout, og vælg Modify.
     
  6. I dialogboksen Edit DWORD (32-bit) Value markeres alternativet Decimal, og værdien 86400 indtastes i feltet Value data.
     

    Værdien 86400 svarer til 24 timer
     
  7. Klik atter, med den højre musknap, på MSCRM, og vælg New. Klik på DWORD Value. På 64-bit servere vælges DWORD (32-bit) Value.
     
  8. Navngiv DWORD Value'n ExtendedTimeout.
     
  9. Klik, med den højre musknap, på den netop oprettede key; OLEDBTimeout, og vælg Modify.
     
  10. I dialogboksen Edit DWORD (32-bit) Value markeres alternativet Decimal, og værdien 1000000 indtastes i feltet Value data.
     

     
    BEMÆRK: Værdien der indtastes bør ikke være højere end 2.147.483.647
     

 

Om OLEDBTimeout

OLEDBTimeout angives i sekunder. Standard er OLEDBTimeout 30 sekunder. Værdien angiver hvor lang tid SQL Serveren har til at gennemføre en forespørgsel (query). Forøgelse af OLEDBTimeout er nyttig hvis SQL Serveren er overbelastet.

Om ExtendedTimeout

ExtendedTimeout angives i millisekunder. Standard er ExtendedTimeout 1000000 millisekunder. Værdien for ExtendedTimeout styrer hvor lang tid ASP.NET har til at håndtere importopgaver, såsom import at tilretninger eller data. Forøgelse af ExtendedTimeout er nyttig hvis man vil importere mange data i MS CRM. Værdien til ExtendedTimeout skal være længere end den tid det tager at importere dataene.

Om Henrik Jensen

Jeg har altid fingeren på pulsen når det drejer sig om Microsofts produkter & teknologier, og især når det handler om Microsoft Dynamics CRM.

Henrik Jensen

Jeg har arbejdet professionelt i IT-branchen mere end 16 års, deraf 12 år med CRM-systemer, og samtidig indehaver af mere end 30 Microsoft-certificeringer.

Jeg er ansat som Microsoft Dynamics CRM-arkitekt hos Logica.

Læs mere...

Downloads, værktøjer og installation

Downloade komponenter til MS CRM:
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Liste over Opdateringspakker (Rollups):
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011

Værktøjer til MS CRM 2011:
    • Liste med værktøjer til MS CRM 2011

Krav vedrørende installation:
    • Installation: Krav og opsætninger

Månedsliste

Forbehold

Alt hvad du læser på denne blog er alene udtryk for mine egne holdninger og meninger, og kan ikke henføres til andet end som så.

De løsninger jeg fremstiller på denne blog er ikke nødvendigvis testet i et driftsmiljø. Hvis du gør brug af mine løsninger er det på eget ansvar.