Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 19946|Відповідь: 3

[Джерело] Блокування бази даних NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Копіювати посилання]
Опубліковано 14.01.2021 15:23:14 | | | |
NOLOCK
Коли ця опція вибрана, SQL Server зчитує або змінює дані без жодних блокувань. У такому випадку користувач може прочитати дані з незафіксованої транзакції або відкату назад, відомих як «брудні дані».

УТРИМАЙТЕ ЗАМОК
Коли ця опція вибрана, SQL Server зберігає цей спільний блок до кінця всієї транзакції, не розкриваючи його на ходу.

UPDLOCK
Коли це опцію вибрано, SQL Server використовує modify lock замість спільного блокування при читанні даних і зберігає цей блок до кінця всієї транзакції або команди. Ця опція гарантує, що кілька процесів можуть одночасно читати дані, але лише цей процес може їх змінювати.

TABLOCK
Коли ця опція вибрана, SQL Server встановлює спільне блокування на всю таблицю до завершення команди. Ця опція гарантує, що інші процеси можуть лише читати і не змінювати дані.

ПАГЛОК
Ця опція є опцією за замовчуванням, і при виборі SQL Server використовує спільне блокування сторінки.

TABLOCKX (Ексклюзивний замок столу)
Коли це опцію вибрано, SQL Server встановлює блокування на всю таблицю до завершення команди або транзакції. Це завадить іншим процесам читати або змінювати дані в таблиці.

HOLDLOCK зберігає спільний замок до завершення всієї транзакції і повинен бути звільнений, щойно заблокований об'єкт не потрібен, що дорівнює рівню ізоляції СЕРІАЛІЗОВАНОЇ транзакції

Оператор NOLOCK виконується без видачі спільного блокування, що дозволяє здійснювати брудні читання, що дорівнює рівню ізоляції транзакції READ UNCOMMITTED

PAGLOCK використовує кілька сторінкових замків, де застосовується один замок для столу

READPAST дозволяє sql-серверу пропускати будь-які заблоковані рядки та виконувати транзакції, а для рівнів ізоляції READ UNCOMMITTED транзакцій пропускає лише блокування RID, а не блокування сторінок, зони та таблиць

ROWLOCK забезпечує застосування rowlock

TABLOCKX забезпечує використання ексклюзивного блокування на рівні таблиці, яке не дозволяє будь-яким іншим транзакціям використовувати таблицю під час транзакції

UPLOCK змушує використовувати оновлення при читанні таблиці без спільного блокування

Примітка: Різниця між блокуванням таблиці в базі даних
ВИБРАТИ * З ТАБЛИЦІ З (HOLDLOCK) Інші транзакції можуть читати таблицю, але не можуть оновлювати чи видаляти
ВИБРАТИ * З ТАБЛИЦІ З (TABLOCKX) Інші транзакції не можуть читати, оновлювати та видаляти таблиці




Попередній:Віддалений дисплей робочого столу win10 з двома екранами
Наступний:.NET/C# Створити обліковий запис гаманця ETH та пароль для верифікації на основі Nethereum [з вихідним кодом]
 Орендодавець| Опубліковано 14.01.2021 16:53:24 |
Протестуйте замок TABLOCKX

Тестовий sql виглядає так:


Тестування коду C#:


Відкриття,Вся таблиця заблокована, і дані можна запитувати лише під час виконання транзакції, як показано на рисунку нижче:



Видалити WITH(TABLOCKX) і оновити дані лише з ID 1, тест виглядає так:



Оскільки Завдання 2 і Завдання 4 не містять даних з id 1, запит дуже швидкий, і 3 та 4 потрібно чекати завершення транзакції перед відправленням запиту.

Поведінка при зміні даних

У транзакції фіксованого читання, що використовує версування рядків, виберіть рядки, які потрібно оновити, за допомогою блокувального сканування, де до рядка даних застосовується блокування оновлення (U-lock) при зчитуванні значення даних. Це те саме, що транзакція фіксованого читання, яка не використовує версування рядків. Якщо рядок даних не відповідає критеріям оновлення, на цьому рядку відкривається блокування оновлення, і наступний рядок блокується та сканується.

Update Lock (U): Режим блокування, який запобігає глухим точкам, коли дві транзакції спочатку читають ресурс даних. У випадку модифікації використання спільних і ексклюзивних блокувань іноді призводить до глухих кутів, тоді як оновлення блокувань дозволяє уникнути виникнення глухих кутів. Блокування оновлення ресурсу може бути призначене лише одній транзакції одночасно, і якщо ресурс потрібно змінити, блокування оновлення стає ексклюзивним, інакше — спільним блокуванням.

Вхід за гіперпосиланням видно.

 Орендодавець| Опубліковано 28.01.2021 17:30:51 |
Випуск:

udpate a
встановити стовпець1 = 1
де idx = 1
Коли sqlserver виконує оператор оновлення, він блокує всю таблицю

Аналіз:

Структура годинника,Без основного ключа ви не можете заблокувати лише ряди
 Орендодавець| Опубліковано 02.05.2023 11:47:24 |
Оптимізація запитів до фреймворку сутностей WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com