Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 2617|Svare: 2

[Tips] SQL Server bruker utvidede hendelser for å spore fastlåste problemer

[Kopier lenke]
Publisert på 02.03.2024 19:13:04 | | | |
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)





Foregående:.NET/C# ytelsesoptimalisering ved bruk av PLINQ parallell spørring
Neste:Kodekjøring i Visual Studio ved bruk av C# Interactive-vinduet
 Vert| Publisert på 02.03.2024 19:14:35 |
Utvid standardstien til hendelsesfilen:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Vert| Publisert på 02.03.2024 19:16:54 |
Opprett en ny tab1-tabell for å teste SQL-skriptet

Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com