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.

Bliv medlem af CRMUG DK

De regionale afdelinger i CRMUG giver mulighed for a mødes med andre medlemmer af CRMUG i dit lokalområde. Hermed får du mulighed for at mødes ansigt til ansigt og vidensdele med andre brugere af Microsoft Dynamics CRM i dit område.

Læs mere den Danske afdeling af CRMUG...

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 25 års, deraf mere end 18 år med CRM-systemer, og samtidig indehaver af mere end 50 Microsoft-certificeringer.

Mobil: +45 20 300 300
E-mail: hj@easyconsult.dk

EASYConsult ApS

Læs mere...

Downloads, værktøjer, installation og JScript

Downloade komponenter til MS CRM:
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011
    • Microsoft Dynamics CRM 2013
    • Microsoft Dynamics CRM 2015
    • Microsoft Dynamics CRM 2016

Liste over Opdateringspakker (Rollups):
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011
    • Microsoft Dynamics CRM 2013
    • Microsoft Dynamics CRM 2015
    • Microsoft Dynamics CRM 2016
    • Microsoft Dynamics 365

Ikoner:
    • Icons8

Krav og opsætninger til installation:
    • Krav og opsætninger MS CRM 2011
    • Krav og opsætninger MS CRM 2013
    • Krav og opsætninger MS CRM 2015
    • Krav og opsætninger MS CRM 2016
    • Krav og opsætninger Dynamics 365

JScript eksempelkode:
    • Javascript API-reference
    • Javascript eksempelkode

Diverse værktøjer:
    • Liste med værktøjer til MS CRM
    • Sysinternals
    • PowerShell og MS CRM 2011

Visual Studio, SSIS og Kingswaysoft
    • Visual Studio 2017
    • Dataværktøjer (SSIS) 2017
    • Kingswaysoft
    • SSIS Navnekonventioner

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.