Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 44050|Atbildi: 3

[Avots] Entītiju struktūras vaicājumu optimizācija ar(NOLOCK)

[Kopēt saiti]
Publicēts 2021-1-6 14:52:16 | | | |
Pirmkārt, šis raksts unNevis pievienojot WITH(NOLOCK), lai uzlabotu vaicājuma veiktspējuTā vietā dati tiek nolasīti, izmantojot darījuma izolācijas mehānismu.

SQL Server datu bāzēs, ja viena un tā pati datu bāzes tabula bieži tiek lasīta un rakstīta vienlaicīgi, rodas bloķēšanas problēma, tas ir, jūs nevarat lasīt, kamēr nav pabeigta iepriekšējā ievietošanas, atjaunināšanas un dzēšanas transakcija, un jums ir jāgaida, līdz operācija ir pabeigta, pirms varat veikt atlases operāciju, lai novērstu vienlaicīgas darbības un lasītu netīrus datus.

SELECT paziņojumu ar WITH (NOLOCK), lai atrisinātu bloķēšanas strupceļu.

Piezīme:Izmantojot WITH(NOLOCK), datu nolasīšana būs netīra

ef parāda ģenerētos SQL priekšrakstus
https://www.itsvse.com/thread-3813-1-1.html
Testa kods ir šāds:

Izmantojiet Func pārstāvi, lai iepakotu kodu šādi:

Iegūtais SQL paziņojums ir šāds:

2021-01-06 14:32:09.9505 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums: SELECT TOP (1)
    [Apjoms1]. [ID] KĀ [ID],
    [Apjoms1]. [Vārds] AS [Nosaukums]
    NO [dbo]. [Itsvse] AS [1. apjoms]
    WHERE ([Apjoms1].[ Nosaukums] = @p__linq__0) VAI (([Apjoms1].[ Nosaukums] IR NULL) UN (@p__linq__0 IR NULL))
2021-01-06 14:32:09.9515 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums:

2021-01-06 14:32:09.9525 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums: -- p__linq__0: 'itsvse.com' (tips = virkne, izmērs = 4000)

2021-01-06 14:32:09.9525 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums: -- Izpilde 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums: -- Pabeigts 1 ms laikā ar rezultātu: SqlDataReader

2021-01-06 14:32:09.9555 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums:

2021-01-06 14:32:09.9555 [ pavediens] DEBUG DEBUG LogCenter - sql paziņojums: Slēgts savienojums 2021-01-06 14:32:09 +08:00
Atlases vaicājums neietver atslēgvārdu Nolock.

(Beigas)





Iepriekšējo:.NET/C# īsteno vienkāršu reģistrēšanu, pamatojoties uz BlockingCollection
Nākamo:.NET (CLS) publiskās valodas specifikācija
 Saimnieks| Publicēts 2021-1-6 14:53:17 |
Izmantojiet: pievienojiet šādu priekšrakstu Global.cs Application_Start(), un ģenerētais SQL tiks automātiski pievienots ar(nolock)
//ef命令拦截器
DbInterception.Add(jauns WithNoLockInterceptor());
Ja SQL priekšraksts ir jābloķē, pievienojiet šādu paplašinājumu


1. Novērsta kļūdu problēma ar regulārajām izteiksmēm, kas tiek nodrošinātas internetā īpašos apstākļos

 Saimnieks| Publicēts 2021-1-10 10:27:32 |
SQL skriptu testēšana:

Testa rezultāti:

Pēc noklusējuma netiek pievienota neviena transakcija, un noklusējuma izolācijas līmenis ir pareizs:



Ilgums: 17561 milisekundes

IsolationLevel.ReadNesaistītais izolācijas līmenis, kā parādīts šajā attēlā:



Laiks: 519 ms

Avots:



 Saimnieks| Publicēts 2023-5-2 11:45:35 |
ADO.NET iestatījumi ļauj netīri lasītLasīt bez saistībām, kods ir šāds:


Ir vēl viens veids, kā to uzrakstīt, dapper kods ir šāds:

Ar abiem rakstīšanas testiem nav problēmu,Pirmo ieteicams lietot tieši!!!


Citi rakstīšanas veidi:



Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com