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

Skats: 45345|Atbildi: 5

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

[Kopēt saiti]
Publicēts 06.01.2021 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 06.01.2021 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 10.01.2021 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 02.05.2023 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:



 Saimnieks| Publicēts 22.12.2025 13:26:15 |
Microsoft.Data.SqlClient.SqlException (0x80131904): atmiņai optimizētas tabulas neatbalsta transakciju izolācijas līmeni "READ UNCOMMITTED".
         at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Būla zvanītājsHasConnectionLock, Būla asyncClose)
         vietnē Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
         vietnē Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Būla isInternal, Būla forDescribeParameterEncryption, Būla shouldCacheForAlwaysEncrypted)
         vietnē Microsoft.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader(Būla isInternal, Būla forDescribeParameterEncryption)
         vietnē Microsoft.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, Boolean isInternal, String endMethod)
         vietnē Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
         vietnē Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
         at System.Threading.Tasks.TaskFactory'1.FromAsyncCoreLogic(IAsyncResult iar, Func'2 endFunction, Action'1 endAction, Task'1 promise, Boolean requiresSynchronization)

SqlTransaction un TransactionScope noplūdes izolācijas līmeņi(Tas.)Kļūda pastāv jau 8 gadus, līdz šim tas nav salabots! Es domāju, ka daudzi cilvēki varētu tikt ietekmēti, to neapzinoties):Hipersaites pieteikšanās ir redzama.
Vaicājiet SQL priekšrakstu pašreizējās sesijas izolācijas līmenī šādi:

 Saimnieks| Publicēts 23.12.2025 08:53:39 |
ReadUncommitted BeginTransaction izmantošana var izraisīt netīrus lasījumus ārpus transakcijas vaicājumiem:Hipersaites pieteikšanās ir redzama.
Kad savienojums ir slēgts, transakcijas izolācijas līmenis netiek atiestatīts:Hipersaites pieteikšanās ir redzama.
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