Щодо продуктивності ви постійно концентруєте увагу на обраному.
Спільний доступ не блокує читання.
Оновлення спільних блокувальних блоків.
Якщо у вас є сотні спільних блокувань, потрібно буде оновити деякий час, щоб отримати ексклюзивний замок, оскільки він повинен почекати, поки загальні блокування очистяться.
За замовчуванням select (читання) робить спільне блокування.
Спільні (S) блокування дозволяють паралельним транзакціям читати (ВИБРАТИ) ресурс.
Спільний замок, оскільки це не впливає на інші селекти (1 або 1000).
Різниця полягає в тому, як операції оновлення та вставки ефектів nolock та спільних ефектів блокування.
Жодні інші транзакції не можуть змінювати дані, поки на ресурсі існують загальні (S) блокування.
Спільний замок блокує оновлення!
Але nolock не блокує оновлення.
Це може мати величезний вплив на продуктивність оновлень. Це також впливає на вставки.
Брудне читання (nolock) просто звучить брудно. Ви ніколи не збираєтесь отримувати часткові дані. Якщо оновлення змінює Джона на Саллі, ти ніколи не отримаєш Веселого.
Я багато використовую спільні замки для одночасності. Дані застаріли, як тільки їх прочитано. Читання Джона, яке змінюється на Саллі наступної мілісекунди, - це застарілі дані. Читання Саллі, яке відкочує Джона наступної мілісекунди, - це несвіжі дані. Це на рівні мілісекунд. У мене є завантажувач даних, який займає 20 годин, якщо користувачі беруть спільні блокування, а 4 години - це те, що користувачі не беруть блокування. Спільні замки в цьому випадку спричиняють застарілі дані на 16 годин.
Не використовуйте nolocks неправильно. Але їм є місце. Якщо ви збираєтеся вирізати перевірку, коли байт встановлено в 1, а потім встановити його в 2, коли перевірка вирізана - не час для nolock.
SELECT
міг би це мати вплив (на сотні запитів) для використанняWITH (NOLOCK)
без причини?