Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 44050|Απάντηση: 3

[Πηγή] Entity Framework Query Optimization WITH(NOLOCK)

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2021-1-6 14:52:16 | | | |
Πρώτα απ 'όλα, αυτό το άρθρο καιΌχι με την προσθήκη WITH(NOLOCK) για τη βελτίωση της απόδοσης των ερωτημάτωνΑντίθετα, τα δεδομένα διαβάζονται μέσω του μηχανισμού απομόνωσης της συναλλαγής.

Στις βάσεις δεδομένων του SQL Server, όταν ο ίδιος πίνακας βάσης δεδομένων διαβάζεται και γράφεται συχνά ταυτόχρονα, θα υπάρχει πρόβλημα κλειδώματος, δηλαδή δεν μπορείτε να διαβάσετε μέχρι να ολοκληρωθεί η προηγούμενη συναλλαγή εισαγωγής, ενημέρωσης και διαγραφής και πρέπει να περιμένετε μέχρι να ολοκληρωθεί η λειτουργία για να μπορέσετε να εκτελέσετε τη λειτουργία επιλογής, προκειμένου να αποτρέψετε ταυτόχρονες λειτουργίες και να διαβάσετε βρώμικα δεδομένα.

SELECT με WITH (NOLOCK) για να λύσετε το αδιέξοδο αποκλεισμού.

Σημείωση:Η χρήση του WITH(NOLOCK) θα έχει ως αποτέλεσμα τη βρώμικη ανάγνωση δεδομένων

Το ef εμφανίζει τις προτάσεις SQL που δημιουργούνται
https://www.itsvse.com/thread-3813-1-1.html
Ο κωδικός δοκιμής έχει ως εξής:

Χρησιμοποιήστε το πληρεξούσιο Func για να συσκευάσετε τον κώδικα ως εξής:

Η δήλωση SQL που προκύπτει έχει ως εξής:

2021-01-06 14:32:09.9505 [ νήμα] DEBUG DEBUG LogCenter - δήλωση SQL: SELECT TOP (1)
    [Έκταση1]. [ID] ΩΣ [ID],
    [Έκταση1]. [Ονομα] AS [Όνομα]
    ΑΠΟ [dbo]. [Itsvse] AS [Έκταση1]
    WHERE ([Έκταση1].[ Όνομα] = @p__linq__0) Ή (([Έκταση1].[ Όνομα] ΕΙΝΑΙ NULL) ΚΑΙ (@p__linq__0 ΕΙΝΑΙ ΜΗΔΕΝΙΚΟ))
2021-01-06 14:32:09.9515 [ νήμα] DEBUG DEBUG LogCenter - δήλωση SQL:

2021-01-06 14:32:09.9525 [ νήμα] DEBUG DEBUG LogCenter - δήλωση sql: -- p__linq__0: 'itsvse.com' (τύπος = συμβολοσειρά, μέγεθος = 4000)

2021-01-06 14:32:09.9525 [ νήμα] DEBUG DEBUG LogCenter - δήλωση sql: -- Εκτέλεση στις 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ νήμα] DEBUG DEBUG LogCenter - δήλωση sql: -- Ολοκληρώθηκε σε 1 ms με αποτέλεσμα: SqlDataReader

2021-01-06 14:32:09.9555 [ νήμα] DEBUG DEBUG LogCenter - δήλωση sql:

2021-01-06 14:32:09.9555 [ νήμα] DEBUG DEBUG LogCenter - δήλωση sql: Κλειστή σύνδεση στις 2021-01-06 14:32:09 +08:00
Το ερώτημα επιλογής δεν περιλαμβάνει τη λέξη-κλειδί Nolock.

(Τέλος)





Προηγούμενος:Το .NET/C# υλοποιεί απλή καταγραφή με βάση το BlockingCollection
Επόμενος:Προδιαγραφή δημόσιας γλώσσας .NET (CLS)
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2021-1-6 14:53:17 |
Χρήση: Προσθέστε την ακόλουθη πρόταση στην Application_Start() του Global.cs και η SQL που δημιουργείται θα προστεθεί αυτόματα με(nolock)
//ef命令拦截器
DbInterception.Add(νέο WithNoLockInterceptor());
Εάν η πρόταση SQL πρέπει να κλειδωθεί, προσθέστε την ακόλουθη επέκταση


1. Διορθώθηκε το πρόβλημα σφάλματος των κανονικών εκφράσεων που παρέχονται στο Διαδίκτυο υπό ειδικές συνθήκες

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2021-1-10 10:27:32 |
Δοκιμή σεναρίων SQL:

Αποτελέσματα δοκιμών:

Δεν προστίθεται καμία συναλλαγή από προεπιλογή και το προεπιλεγμένο επίπεδο απομόνωσης είναι σωστό:



Διάρκεια: 17561 χιλιοστά του δευτερολέπτου

IsolationLevel.ReadUncommitted επίπεδο απομόνωσης, όπως φαίνεται στην παρακάτω εικόνα:



Χρόνος: 519 ms

Πηγή:



 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2023-5-2 11:45:35 |
ADO.NET ρυθμίσεις επιτρέπουν τη βρώμικη ανάγνωσηΑνάγνωσηΜη δεσμευμένο, ο κωδικός έχει ως εξής:


Υπάρχει ένας άλλος τρόπος για να το γράψετε, ο κωδικός dapper είναι ο εξής:

Δεν υπάρχουν προβλήματα και με τα δύο γραπτά τεστ,Συνιστάται η απευθείας χρήση του πρώτου!!!


Άλλοι τρόποι γραφής:



Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com