Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 44050|Ответ: 3

[Источник] Оптимизация запросов к фреймворку сносов WITH(NOLOCK)

[Скопировать ссылку]
Опубликовано 2021-1-6 14:52:16 | | | |
Прежде всего, эта статья иНе добавляя WITH(NOLOCK) для улучшения производительности запросовВместо этого данные считываются через механизм изоляции транзакции.

В базах данных SQL Server, когда одна и та же таблица часто читается и записывается одновременно, возникает проблема блокировки, то есть вы не можете читать до завершения предыдущей операции вставки, обновления и удаления, и нужно дождаться завершения операции, чтобы выполнить операцию select, чтобы предотвратить параллельные операции и чтение грязных данных.

Оператор 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)
    [Extent1]. [ID] КАК [ID],
    [Extent1]. [Имя] AS [Имя]
    ОТ [dbo]. [Это] AS [Extent1]
    ГДЕ ([Extent1].[ Name] = @p__linq__0) ИЛИ (([Extent1].[ Name] IS NULL) и (@p__linq__0 — NULL))
2021-01-06 14:32:09.9515 [ thread] 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 [ thread] DEBUG DEBUG LogCenter - sql-оператор: -- Выполняется в 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ thread] DEBUG DEBUG LogCenter - sql-оператор: -- Завершено за 1 мс с результатом: SqlDataReader

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - sql-оператор:

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - sql-оператор: Соединение закрыто в 2021-01-06 14:32:09 +08:00
Select Query не включает ключевое слово nolock.

(Конец)





Предыдущий:.NET/C# реализует простое логирование на основе BlockingCollection
Следующий:Спецификация публичного языка .NET (CLS)
 Хозяин| Опубликовано 2021-1-6 14:53:17 |
Используй: Добавьте следующее высказывание в Application_Start() Global.cs, и сгенерированный SQL автоматически добавит with(nolock)
//ef命令拦截器
dbInterception.Add(new with NoLock Interceptor());
Если оператор SQL нужно заблокировать, добавьте следующее расширение


1. Исправлена проблема ошибок регулярных выражений, предоставляемых в Интернете при особых обстоятельствах

 Хозяин| Опубликовано 2021-1-10 10:27:32 |
Тестирование скриптов SQL:

Результаты тестов:

По умолчанию транзакция не добавляется, и уровень изоляции по умолчанию правильный:



Продолжительность: 17561 миллисекунд

IsolationLevel.ReadUncommitted isolation level, как показано на следующем изображении:



Время: 519 мс

Источник:



 Хозяин| Опубликовано 2023-5-2 11:45:35 |
ADO.NET настройки позволяют грязное чтениеReadUncommitted, код следующий:


Есть и другой способ написания, стильный код выглядит следующим образом:

С обоими письменными тестами нет проблем,Рекомендуется использовать первую напрямую!!!


Другие способы написания:



Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com