Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 44050|Vastaus: 3

[Lähde] Entity Frameworkin kyselyoptimointi KANSSA(NOLOCK)

[Kopioi linkki]
Julkaistu 2021-1-6 klo 14:52:16 | | | |
Ensinnäkin, tämä artikkeli jaEi lisäämällä WITH(NOLOCK) kyselysuorituskyvyn parantamiseksiSen sijaan data luetaan transaktion eristysmekanismin kautta.

SQL Server -tietokannoissa, kun sama tietokantataulu luetaan ja kirjoitetaan usein samanaikaisesti, syntyy lukitusongelma, eli et voi lukea ennen kuin edellinen insert-, update- ja delete-transaktio on suoritettu, ja sinun täytyy odottaa toimenpiteen valmistumista ennen kuin voit suorittaa select-toiminnon, jotta voidaan estää samanaikaiset operaatiot ja lukea likaista dataa.

SELECT-lause, jossa on WITH (NOLOCK) estotilan ratkaisemiseksi.

Muistiinpano:WITH(NOLOCK)-menetelmän käyttö johtaa epäpuhtaaseen datalukemaan

ef näyttää luodut SQL-lauseet
https://www.itsvse.com/thread-3813-1-1.html
Testikoodi on seuraava:

Käytä Func delegatea paketoidaksesi koodin seuraavasti:

Tuloksena saadaan SQL-lause seuraavasti:

2021-01-06 14:32:09.9505 [ ketju] DEBUG DEBUG LogCenter - sql-lause: VALITSE TOP (1)
    [Laajuus1]. [ID] AS [ID],
    [Laajuus1]. [Nimi] AS [Nimi]
    FROM [dbo]. [Itsvse] AS [Laajuus1]
    MISSÄ ([Extent1].[ Nimi] = @p__linq__0) TAI (([Extent1].[ Nimi] ON NOLLA) JA (@p__linq__0 ON NOLLA))
2021-01-06 14:32:09.9515 [ ketju] DEBUG DEBUG LogCenter - sql-lausunto:

2021-01-06 14:32:09.9525 [ ketju] DEBUG DEBUG LogCenter - sql-lause: -- p__linq__0: 'itsvse.com' (tyyppi = merkkijono, koko = 4000)

2021-01-06 14:32:09.9525 [ ketju] DEBUG DEBUG LogCenter - sql-lause: -- Suoritetaan 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ ketju] DEBUG DEBUG LogCenter - sql-lause: -- Suoritettu 1 ms tuloksella: SqlDataReader

2021-01-06 14:32:09.9555 [ ketju] DEBUG DEBUG LogCenter - sql-lausunto:

2021-01-06 14:32:09.9555 [ketju] DEBUG DEBUG LogCenter - sql-lause: Suljettu yhteys 2021-01-06 14:32:09 +08:00
Select-kysely ei sisällä nolock-avainsanaa.

(Loppu)





Edellinen:.NET/C# toteuttaa yksinkertaisen lokituksen, joka perustuu BlockingCollectioniin
Seuraava:.NET (CLS) julkisen kielen määrittely
 Vuokraisäntä| Julkaistu 2021-1-6 klo 14:53:17 |
Käyttää: Lisää seuraava lause Global.cs:n Application_Start():hen, ja generoitu SQL lisää automaattisesti (nolock)
//ef命令拦截器
DbInterception.Add(uusi WithNoLockInterceptor());
Jos SQL-lause täytyy lukita, lisää seuraava laajennus


1. Korjattiin virheongelma säännöllisissä lausekkeissa Internetissä erityistilanteissa

 Vuokraisäntä| Julkaistu 2021-1-10 10:27:32 |
SQL-skriptien testaus:

Testitulokset:

Oletuksena transaktiota ei lisätä, ja oletuseristystaso on oikea:



Kesto: 17561 millisekuntia

IsolationLevel.ReadUncommitted isolation level, kuten seuraavassa kuvassa näkyy:



Aika: 519 ms

Lähde:



 Vuokraisäntä| Julkaistu 2023-5-2 klo 11:45:35 |
ADO.NET asetukset sallivat likaisen lukemisenReadUncommitted, koodi on seuraava:


On olemassa toinenkin tapa kirjoittaa se, tyylikäs koodi on seuraava:

Kirjoituskokeissa ei ole ongelmia,Suositellaan käyttämään ensimmäistä suoraan!!!


Muita tapoja kirjoittaa:



Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com