Krav: Det finnes mange grunner til at SQL Server-databaser forårsaker deadlocks, i produksjon kan alle oppleve deadlock-problemer, og den spesifikke årsaken kan ikke nødvendigvis finnes basert på unormal informasjon om applikasjonsdeadlocks alene, så det er nødvendig å bruke utvidelseshendelser i SQL Server for å spore deadlock-problemer og registrere spesifikke detaljer om når deadlocks oppstår.
Utvidet oversikt over arrangementet
Extended Events er en lettvekts ytelsesovervåkingsfunksjon som lar brukere samle inn dataene de trenger for å overvåke og løse problemer. Denne funksjonen lar deg se detaljer om de interne operasjonene i datamotoren for ytelsesovervåking og problemløsning.
Med Extended Events (XEvents)-arkitekturen kan brukere bruke så mye eller lite data de trenger for å overvåke, identifisere eller feilsøke ytelsen til SQL Server, Azure SQL Database og Azure SQL Managed Instance. Utvidede hendelser er svært konfigurerbare, lette og skalerbare godt.
Referanse:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Årsaker til fastlåste situasjoner
Deadlocks skyldes konkurrerende samtidighetslåser i en database, vanligvis i flerstegstransaksjoner. Hver brukerøkt kan ha én eller flere oppgaver som kjører på sine vegne, hvor hver oppgave kan hente eller vente på å hente ulike ressurser. Følgende typer ressurser kan føre til blokkering og til slutt til en fastlåst situasjon.
- Låser: Låser som venter på å hente ressurser som objekter, sider, rader, metadata og applikasjoner kan forårsake fastlåsing. For eksempel har transaksjon T1 en delt lås (S-lås) på rad r1 og venter på å få en eksklusiv lås (X-lås) for rad r2. Transaksjon T2 har en delt lås (S-lås) på rad r2 og venter på å få en eksklusiv lås (X-lås) for rad r1. Dette resulterer i en låsesløyfe hvor både T1 og T2 venter på at hverandre skal frigjøre den låste ressursen.
- Arbeidstråder: Oppgaver som køer for tilgjengelige arbeidstråder kan føre til fastlåste situasjoner. Hvis en oppgave i kø har en ressurs som blokkerer alle arbeidertråder, vil det resultere i en deadlock. For eksempel, etter at økt S1 starter en transaksjon og får en delt lås (S-lås) for linje r1, går den i dvale. En aktiv økt som kjører på alle tilgjengelige arbeidstråder prøver å oppnå en eksklusiv lås (X-lock) for linje r1. Fordi økt S1 ikke kan få en arbeidertråd, kan den ikke committe transaksjonen og frigjøre låsen på linje r1. Dette vil føre til en fastlåst situasjon.
- Minne: En deadlock kan oppstå når en samtidig forespørsel venter på å få minne, og det tilgjengelige minnet ikke er tilstrekkelig for behovene. For eksempel utføres to samtidige forespørsler (Q1 og Q2) som brukerdefinerte funksjoner, og henter henholdsvis 10 MB og 20 MB minne. Hvis hver spørring krever 30 MB og det totale tilgjengelige minnet er 20 MB, må Q1 og Q2 vente på hverandre for å frigjøre minne, noe som vil føre til fastlåst.
- Ressurser knyttet til parallell spørring og utførelse: Prosesseringskoordinatorer, generatorer eller forbrukertråder som vanligvis er assosiert med switchede porter, kan blokkere hverandre når de inneholder minst én prosess som ikke er en del av en parallell spørring, noe som resulterer i deadlocks. I tillegg, når en parallell spørring starter kjøring, bestemmer SQL Server graden av parallellisme eller antall arbeidstråder basert på den nåværende arbeidsbelastningen. En fastlåst situasjon kan oppstå hvis det skjer en uventet endring i systemets arbeidsmengde, for eksempel når en ny spørring begynner å kjøre på serveren eller når systemet går tom for arbeidstråder.
- Multiple Activity Outcome Set (MARS)-ressurser: Disse ressursene brukes til å kontrollere krysskjøring av flere aktivitetsforespørsler under MARS.
Referanse:
Innloggingen med hyperkoblingen er synlig.
Deadlock utvidet hendelseslogging
Opprett en utvidelseshendelse for å registrere deadlock-informasjonen med følgende kommando:
Start en deadlock-hendelsesøkt
Stopp en arrangementsøkt
Slett en hendelsesøkt
Søk i hendelsessesjonsdata
Testdødpunkter
Opprett en ny Tab1-tabell for testing, og lag to nye utførelsesvinduer, og utfør følgende kommandoer henholdsvis:
En fastlåst situasjon oppstår som følger:
En transaksjon (prosess-ID 68) med en annen prosess er fastlåst på en låst ressurs og har blitt valgt som et dødlåst offer. Vennligst kjør transaksjonen på nytt. Transaksjonen (Prosess-ID 68) var fastlåst på låseressurser med en annen prosess og er valgt som dødlåsoffer. Kjør transaksjonen på nytt.
Se hendelsesdataene slik de vises i følgende figur:
De detaljerte XML-dataene er som følger:
(Slutt)
|