Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 44050|Jawab: 3

[Sumber] Pengoptimalan Kueri Kerangka Entitas WITH(NOLOCK)

[Salin tautan]
Dipaparkan pada 2021-1-6 14:52:16 | | | |
Pertama-tama, artikel ini danBukan dengan menambahkan WITH(NOLOCK) untuk meningkatkan performa kueriSebagai gantinya, data dibaca melalui mekanisme isolasi transaksi.

Dalam database SQL Server, ketika tabel database yang sama sering dibaca dan ditulis pada saat yang sama, akan ada masalah kunci, yaitu, Anda tidak dapat membaca hingga transaksi menyisipkan, memperbarui, dan menghapus sebelumnya selesai, dan Anda harus menunggu hingga operasi selesai sebelum Anda dapat melakukan operasi pilih, untuk mencegah operasi bersamaan dan membaca data kotor.

SELECT dengan WITH (NOLOCK) untuk mengatasi kebuntuan pemblokiran.

Nota:Menggunakan WITH(NOLOCK) akan menghasilkan pembacaan data yang kotor

ef menampilkan pernyataan SQL yang dihasilkan
https://www.itsvse.com/thread-3813-1-1.html
Kode pengujiannya adalah sebagai berikut:

Gunakan delegasi Func untuk mengemas kode sebagai berikut:

Pernyataan SQL yang dihasilkan adalah sebagai berikut:

2021-01-06 14:32:09.9505 [ utas] DEBUG DEBUG LogCenter - pernyataan sql: PILIH ATAS (1)
    [Luas1]. [ID] SEBAGAI [ID],
    [Luas1]. [Nama] AS [Nama]
    DARI [dbo]. [Itu] AS [Luas1]
    WHERE ([Extent1].[ Nama] = @p__linq__0) ATAU (([Extent1].[ Name] ADALAH NULL) DAN (@p__linq__0 ADALAH NULL))
2021-01-06 14:32:09.9515 [ utas] DEBUG DEBUG LogCenter - pernyataan sql:

2021-01-06 14:32:09.9525 [ utas] DEBUG DEBUG LogCenter - pernyataan sql: -- p__linq__0: 'itsvse.com' (jenis = string, ukuran = 4000)

2021-01-06 14:32:09.9525 [ utas] DEBUG DEBUG LogCenter - pernyataan sql: -- Dijalankan pada 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ utas] DEBUG DEBUG LogCenter - pernyataan sql: -- Selesai dalam 1 ms dengan hasil: SqlDataReader

2021-01-06 14:32:09.9555 [ utas] DEBUG DEBUG LogCenter - pernyataan sql:

2021-01-06 14:32:09.9555 [ utas] DEBUG DEBUG LogCenter - pernyataan sql: Koneksi tertutup pada 2021-01-06 14:32:09 +08:00
Pilih kueri tidak menyertakan kata kunci NoLock.

(Akhir)





Mantan:.NET/C# mengimplementasikan pengelogan sederhana berdasarkan BlockingCollection
Depan:Spesifikasi bahasa publik .NET (CLS)
 Tuan tanah| Dipaparkan pada 2021-1-6 14:53:17 |
Gunakan: Tambahkan pernyataan berikut ke Application_Start() Global.cs, dan SQL yang dihasilkan akan secara otomatis ditambahkan dengan(nolock)
//ef命令拦截器
DbInterception.Add(baru DenganNoLockInterceptor());
Jika pernyataan SQL perlu dikunci, tambahkan ekstensi berikut


1. Memperbaiki masalah kesalahan ekspresi reguler yang disediakan di Internet dalam keadaan khusus

 Tuan tanah| Dipaparkan pada 2021-1-10 10:27:32 |
Menguji skrip SQL:

Hasil pengujian:

Tidak ada transaksi yang ditambahkan secara default, dan tingkat isolasi default sudah benar:



Durasi: 17561 milidetik

IsolationLevel.ReadUncommitted tingkat isolasi, seperti yang ditunjukkan pada gambar berikut:



Waktu: 519 ms

Sumber:



 Tuan tanah| Dipaparkan pada 2023-5-2 11:45:35 |
Pengaturan ADO.NET memungkinkan pembacaan kotorBacaTidak Terkomitmenkan, kodenya adalah sebagai berikut:


Ada cara lain untuk menulisnya, kode dapper adalah sebagai berikut:

Tidak ada masalah dengan kedua tes penulisan,Disarankan untuk menggunakan yang pertama secara langsung!!!


Cara lain untuk menulis:



Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com