|
|
Publicēts 02.03.2024 19:13:04
|
|
|
|

Prasības: Ir daudz iemeslu, kāpēc SQL Server datu bāze izraisa strupceļus, ražošanā ikviens var saskarties ar strupceļa problēmām, un konkrētais cēlonis var nebūt atrodams, pamatojoties tikai uz neparastu informāciju par lietojumprogrammu strupceļiem, tāpēc ir nepieciešams izmantot paplašinājuma notikumus SQL serverī, lai izsekotu strupceļa problēmas un reģistrētu konkrētu informāciju par strupceļa rašanos.
Paplašināts notikumu pārskats
Paplašinātie notikumi ir viegla veiktspējas uzraudzības funkcija, kas ļauj lietotājiem apkopot datus, kas nepieciešami, lai uzraudzītu un atrisinātu problēmas. Šis līdzeklis ļauj skatīt detalizētu informāciju par datu programmas iekšējām darbībām veiktspējas pārraudzībai un problēmu risināšanai.
Izmantojot paplašināto notikumu (XEvents) arhitektūru, lietotāji var izmantot tik daudz vai tik maz datu, cik nepieciešams, lai pārraudzītu, identificētu vai novērstu SQL Server, Azure SQL datu bāzes un Azure SQL pārvaldītās instances veiktspēju. Paplašinātie pasākumi ir ļoti konfigurējami, viegli un labi mērogojami.
Atsauce:
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Strupceļa cēloņi
Strupceļus izraisa konkurējošas vienlaicīgas bloķēšanas datu bāzē, parasti vairāku soļu darījumos. Katrai lietotāja sesijai var būt viens vai vairāki uzdevumi, kas tiek izpildīti tās vārdā, kur katrs uzdevums var iegūt vai gaidīt, lai iegūtu dažādus resursus. Tālāk norādītie resursu veidi var izraisīt bloķēšanu un galu galā izraisīt strupceļu.
- Slēdzenes: slēdzenes, kas gaida, lai iegūtu resursus, piemēram, objektus, lapas, rindas, metadatus un lietojumprogrammas, var izraisīt strupceļus. Piemēram, darījumam T1 rindā r1 ir kopīga bloķēšana (S bloķēšana) un tas gaida, lai saņemtu ekskluzīvu bloķēšanu (X slēdzeni) rindai r2. Darījumam T2 rindā r2 ir kopīga bloķēšana (S slēdzene) un gaida, lai saņemtu ekskluzīvu slēdzeni (X slēdzene) rindai r1. Tas rada bloķēšanas cilpu, kurā gan T1, gan T2 gaida, kamēr viens otrs atbrīvos bloķēto resursu.
- Darbinieku pavedieni: uzdevumi, kas atrodas rindā pēc pieejamiem darbinieku pavedieniem, var izraisīt strupceļus. Ja rindā ievietotam uzdevumam ir resurss, kas bloķē visus darbinieka pavedienus, tas radīs strupceļu. Piemēram, pēc sesijas S1 sāk darījumu un iegūst koplietojamu slēdzeni (S-lock) rindai r1, tā pāriet miega režīmā. Aktīva sesija, kas darbojas visos pieejamos strādnieku pavedienos, mēģina iegūt ekskluzīvu slēdzeni (X-lock) rindai r1. Tā kā sesija S1 nevar iegūt darbinieka pavedienu, tā nevar veikt transakciju un atbrīvot rindas r1 bloķēšanu. Tas novedīs pie strupceļa.
- Atmiņa: strupceļš var rasties, ja vienlaicīgs pieprasījums gaida, lai iegūtu atmiņu, un pašlaik pieejamā atmiņa nav pietiekama tā vajadzībām. Piemēram, divi vienlaicīgi vaicājumi (Q1 un Q2) tiek izpildīti kā lietotāja definētas funkcijas, iegūstot attiecīgi 10 MB un 20 MB atmiņas. Ja katram vaicājumam ir nepieciešami 30 MB un kopējā pieejamā atmiņa ir 20 MB, Q1 un Q2 ir jāgaida, kamēr viens otram atbrīvos atmiņu, kas radīs strupceļu.
- Paralēlie vaicājumi un ar izpildi saistītie resursi: apstrādes koordinatori, ģeneratori vai patērētāju pavedieni, kas parasti saistīti ar komutējamiem portiem, var bloķēt viens otru, ja tajos ir vismaz viens process, kas nav daļa no paralēlā vaicājuma, kā rezultātā rodas strupceļš. Turklāt, kad tiek sākta paralēla vaicājuma izpilde, SQL Server nosaka paralēlisma pakāpi vai darba pavedienu skaitu, pamatojoties uz pašreizējo darba slodzi. Strupceļš var rasties, ja ir neparedzētas izmaiņas sistēmas darba slodzē, piemēram, kad serverī sāk darboties jauns vaicājums vai kad sistēmā beidzas darbinieku pavedieni.
- Vairāku darbību rezultātu kopas (MARS) resursi: šie resursi tiek izmantoti, lai kontrolētu vairāku darbību pieprasījumu savstarpēju izpildi MARS.
Atsauce:
Hipersaites pieteikšanās ir redzama.
Strupceļa paplašinātā notikumu reģistrēšana
Izveidojiet paplašinājuma notikumu, lai ierakstītu strupceļa informāciju ar šādu komandu:
Strupceļa notikuma sesijas sākšana
Notikuma sesijas apturēšana
Pasākuma sesijas dzēšana
Vaicājuma notikumu sesijas dati
Testa strupceļi
Izveidojiet jaunu Tab1 tabulu testēšanai un izveidojiet divus jaunus izpildes logus un izpildiet attiecīgi šādas komandas:
Strupceļš notiek šādi:
Darījums (procesa ID 68) ar citu procesu ir bloķēts bloķētā resursā un ir izvēlēts kā strupceļa upuris. Lūdzu, atkārtoti palaidiet transakciju. Darījums (procesa ID 68) tika bloķēts bloķēšanas resursos ar citu procesu un tika izvēlēts kā strupceļa upuris. Atkārtoti palaidiet transakciju.
Skatiet pasākuma sesijas datus, kā parādīts nākamajā attēlā:
Detalizēti XML dati ir šādi:
(Beigas)
|
Iepriekšējo:.NET/C# veiktspējas optimizācija, izmantojot PLINQ paralēlo vaicājumuNākamo:Koda izpilde Visual Studio, izmantojot C# interaktīvo logu
|