Vaatimukset: SQL Server -tietokanta aiheuttaa kuolleita ongelmia moniin syihin; tuotannossa kaikki voivat kohdata kuolleita ongelmia, ja tarkkaa syytä ei välttämättä löydy pelkästään sovellusten kuolleiden tietojen perusteella, joten on tarpeen käyttää SQL Serverin laajennustapahtumia kuolleiden ongelmien seuraamiseen ja kuolleiden syntymisajankohdan tarkat tiedot kirjaamiseen.
Laajennettu tapahtuman yleiskatsaus
Extended Events on kevyt suorituskyvyn seurantaominaisuus, jonka avulla käyttäjät voivat kerätä tarvittavat tiedot ongelmien seurantaan ja ratkaisemiseen. Tämän ominaisuuden avulla voit tarkastella tietoja datamoottorin sisäisistä toiminnoista suorituskyvyn seurantaa ja ongelmanratkaisua varten.
Extended Events (XEvents) -arkkitehtuurin avulla käyttäjät voivat käyttää niin paljon tai vähän dataa kuin tarvitaan SQL Serverin, Azure SQL Databasen ja Azure SQL Managed Instancen suorituskyvyn seurantaan, tunnistamiseen tai vianetsintään. Laajennetut tapahtumat ovat erittäin muokattavia, kevyitä ja hyvin skaalautuvia.
Viittaus:
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Pattitilanteiden syyt
Pattitilanteet johtuvat kilpailevista rinnakkaislukkojen vuoksi tietokannassa, yleensä monivaiheisissa transaktioissa. Jokaisessa käyttäjäsessiossa voi olla yksi tai useampi tehtävä käynnissä sen puolesta, jolloin jokainen tehtävä voi hakea tai odottaa erilaisia resursseja. Seuraavat resurssityypit voivat aiheuttaa blokkausta ja lopulta pattitilanteen.
- Lukot: Lukot, jotka odottavat resurssien, kuten objektien, sivujen, rivien, metatietojen ja sovellusten hakemista, voivat aiheuttaa pattitilanteita. Esimerkiksi transaktiossa T1 on jaettu lukko (S-lukko) rivillä r1 ja se odottaa saadakseen yksinoikeudellisen lukon (X-lukko) riville r2. Transaktio T2:lla on jaettu lukko (S-lukko) rivillä r2 ja se odottaa saadakseen yksinoikeuden (X-lukko) riville r1. Tämä johtaa lukitussilmukkaan, jossa sekä T1 että T2 odottavat toisiaan vapauttavan lukitun resurssin.
- Työntekijäsäikeet: Tehtävien jonottaminen saatavilla olevien työntekijäsäikeiden vuoksi voi aiheuttaa pattitilanteita. Jos jonossa olevassa tehtävässä on resurssi, joka estää kaikki työntekijäsäikeet, se johtaa umpikujaan. Esimerkiksi, kun istunto S1 käynnistää transaktion ja saa jaetun lukon (S-lukko) linjalle r1, se menee lepotilaan. Aktiivinen istunto, joka toimii kaikilla saatavilla olevilla työläissäikeillä, yrittää saada yksinoikeudellista lukkoa (X-lukko) linjalle r1. Koska sessio S1 ei saa työntekijäsäikettä, se ei voi sitoutua transaktioon ja vapauttaa lukkoa rivillä r1. Tämä johtaa pattitilanteeseen.
- Muisti: Deadlock voi syntyä, kun samanaikainen pyyntö odottaa muistin saamista eikä käytettävissä oleva muisti riitä sen tarpeisiin. Esimerkiksi kaksi samanaikaista kyselyä (Q1 ja Q2) suoritetaan käyttäjän määritteleminä funktioina, jolloin saadaan vastaavasti 10 MB ja 20 MB muistia. Jos jokainen kysely vaatii 30 MB ja käytettävissä oleva kokonaismuisti on 20 MB, Q1:n ja Q2:n on odotettava toistensa vapauttavan muistia, mikä johtaa pattitilanteeseen.
- Rinnakkaiset kysely- ja suoritukseen liittyvät resurssit: Prosessointikoordinaattorit, generaattorit tai kuluttajasäikeet, jotka tyypillisesti liittyvät kytkettyihin portteihin, voivat estää toisensa, jos niissä on vähintään yksi prosessi, joka ei kuulu rinnakkaiskyselyyn, mikä johtaa umpikujiin. Lisäksi, kun rinnakkaiskysely alkaa suorittaa, SQL Server määrittää rinnakkaisuuden asteen tai työntekijäsäikeiden määrän nykyisen työkuorman perusteella. Deadlock voi syntyä, jos järjestelmän työkuormassa tapahtuu odottamaton muutos, esimerkiksi kun uusi kysely alkaa toimia palvelimella tai kun järjestelmästä loppuvat työntekijäsäikeet.
- Multiple Activity Outcome Set (MARS) -resurssit: Näitä resursseja käytetään hallitsemaan useiden toimintapyyntöjen ristiinsuoritusta MARSin puitteissa.
Viittaus:
Hyperlinkin kirjautuminen on näkyvissä.
Deadlockin laajennettu tapahtumalokki
Luo laajennustapahtuma kuolleen lukon tiedon tallentamiseen seuraavalla komennolla:
Aloita deadlock-tapahtumasessio
Pysäytä tapahtumasessio
Poista tapahtumaistunto
Hae tapahtumaistuntotietoja
Testilukot
Luo uusi Tab1-taulukko testattavaksi, luo kaksi uutta suoritusikkunaa ja suorita seuraavat komennot:
Pattitilanne tapahtuu seuraavasti:
Transaktio (prosessi-ID 68) toisen prosessin kanssa on jumissa lukitulla resurssilla ja on valittu kuolleiden jumiutumisen uhriksi. Ole hyvä ja suorita tapahtuma uudelleen. Transaktio (Prosessi-ID 68) jumittui lukitusresursseihin toisen prosessin kanssa ja on valittu umpikujan uhriksi. Suorita tapahtuma uudelleen.
Katso tapahtumaistunnon tiedot seuraavan kuvan mukaisesti:
Yksityiskohtaiset XML-tiedot ovat seuraavat:
(Loppu)
|