Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 2617|Antwoord: 2

[Tips] SQL Server gebruikt uitgebreide gebeurtenissen om deadlock-problemen bij te houden

[Link kopiëren]
Geplaatst op 02-03-2024 19:13:04 | | | |
Vereisten: Er zijn veel redenen waarom de SQL Server-database deadlocks veroorzaakt; in productie kan iedereen deadlock-problemen tegenkomen, en de specifieke oorzaak wordt mogelijk niet alleen op basis van abnormale informatie van applicatiedeadlocks gelokaliseerd, dus het is noodzakelijk om extensie-events in SQL Server te gebruiken om deadlock-problemen te volgen en de specifieke details vast te leggen van wanneer deadlocks optreden.

Uitgebreide overzicht van het evenement

Extended Events is een lichtgewicht prestatiemonitoringfunctie waarmee gebruikers de gegevens kunnen verzamelen die ze nodig hebben om problemen te monitoren en op te lossen. Met deze functie kun je details bekijken over de interne werking van de data-engine voor prestatiemonitoring en probleemoplossingsgerelateerde doeleinden.

Met de Extended Events (XEvents)-architectuur kunnen gebruikers zoveel of zo weinig data gebruiken als nodig is om de prestaties van SQL Server, Azure SQL Database en Azure SQL Managed Instance te monitoren, identificeren of problemen op te lossen. Uitgebreide evenementen zijn zeer configureerbaar, licht en goed schaalbaar.

Referentie:
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.


Oorzaken van patstellingen

Deadlocks worden veroorzaakt door concurrerende gelijktijdige vergrendelingen in een database, meestal bij meerstapstransacties. Elke gebruikerssessie kan één of meer taken namens zich laten draaien, waarbij elke taak verschillende resources kan ophalen of wachten om verschillende resources op te halen. De volgende soorten middelen kunnen blokkering veroorzaken en uiteindelijk tot een deadlock leiden.

  • Locks: Locks die wachten om resources zoals objecten, pagina's, rijen, metadata en applicaties op te halen, kunnen deadlocks veroorzaken. Bijvoorbeeld, transactie T1 heeft een gedeeld slot (S-slot) op rij r1 en wacht op een exclusieve vergrendeling (X-slot) voor rij r2. Transactie T2 heeft een gedeelde vergrendeling (S-vergrendeling) op rij r2 en wacht op een exclusieve vergrendeling (X-vergrendeling) voor rij r1. Dit resulteert in een lockloop waarin zowel T1 als T2 op elkaar wachten om de vergrendelde bron vrij te geven.
  • Werkerthreads: Taken die in de rij staan voor beschikbare workerthreads kunnen deadlocks veroorzaken. Als een queue-taak een resource heeft die alle worker-threads blokkeert, resulteert dit in een deadlock. Bijvoorbeeld, nadat sessie S1 een transactie start en een gedeelde vergrendeling (S-lock) voor regel r1 heeft verworven, gaat het in slaapstand. Een actieve sessie die op alle beschikbare workerthreads draait, probeert een exclusieve lock (X-lock) voor regel r1 te verkrijgen. Omdat sessie S1 geen workerthread kan krijgen, kan het de transactie niet committen en de lock op regel r1 niet openen. Dit zal resulteren in een patstelling.
  • Geheugen: Een deadlock kan optreden wanneer een gelijktijdig verzoek wacht om geheugen te verkrijgen en het momenteel beschikbare geheugen niet voldoende is voor de behoeften. Zo worden bijvoorbeeld twee gelijktijdige queries (Q1 en Q2) uitgevoerd als door de gebruiker gedefinieerde functies, waarbij respectievelijk 10 MB en 20 MB geheugen worden verkregen. Als elke query 30 MB vereist en het totale beschikbare geheugen 20 MB is, moeten Q1 en Q2 wachten tot de ander geheugen vrijmaakt, wat zal resulteren in een deadlock.
  • Parallelle query- en uitvoeringsgerelateerde resources: Verwerkingscoördinatoren, generatoren of consumententhreads die typisch aan geswitchte poorten worden gekoppeld, kunnen elkaar blokkeren wanneer ze ten minste één proces bevatten dat geen deel uitmaakt van een parallelle query, wat leidt tot deadlocks. Daarnaast bepaalt SQL Server bij de start van een parallelle query de mate van parallelisme of het aantal workerthreads op basis van de huidige werklast. Een deadlock kan optreden als er een onverwachte verandering in de systeemwerklast optreedt, bijvoorbeeld wanneer een nieuwe query op de server begint te draaien of wanneer het systeem zonder workerthreads komt te zitten.
  • Multiple Activity Outcome Set (MARS) resources: Deze middelen worden gebruikt om de kruisuitvoering van meerdere activiteitsverzoeken onder MARS te beheersen.


Referentie:
De hyperlink-login is zichtbaar.

Deadlock uitgebreide gebeurtenisregistratie

Maak een extensie-event aan om de deadlock-informatie vast te leggen met het volgende commando:


Start een deadlock-event sessie

Stop een evenementsessie

Verwijder een gebeurtenissessie

Zoek de sessiegegevens van gebeurtenissen op


Testimpasses

Maak een nieuwe Tab1-tabel aan voor testen, maak twee nieuwe uitvoeringsvensters aan, en voer respectievelijk de volgende commando's uit:

Een deadlock treedt als volgt op:

Een transactie (proces-ID 68) met een ander proces is vastgelopen op een vergrendelde bron en is geselecteerd als deadlock-slachtoffer. Voer de transactie alsjeblieft opnieuw uit.
Transactie (Proces-ID 68) was vastgelopen op lockresources met een ander proces en is gekozen als deadlock-slachtoffer. Voer de transactie opnieuw uit.


Bekijk de sessiegegevens van het evenement zoals weergegeven in de volgende figuur:



De gedetailleerde XML-gegevens zijn als volgt:


(Einde)





Vorig:.NET/C# prestatieoptimalisatie met behulp van PLINQ parallelle query
Volgend:Code-uitvoering in Visual Studio met het C# Interactive-venster
 Huisbaas| Geplaatst op 02-03-2024 19:14:35 |
Verleng het standaardpad van het gebeurtenisbestand:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Huisbaas| Geplaatst op 02-03-2024 19:16:54 |
Maak een nieuwe tab1-tabel aan om het SQL-script te testen

Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com