Общая блокировка SQL Server при выборе - PullRequest
0 голосов
/ 14 ноября 2018

Я запрашиваю таблицу в БД SQL Server, которая получает непрерывные вставки из других источников.Оператор SELECT, используемый для чтения данных из этой таблицы, используется в моем задании ETL, и он запрашивает только выбранный раздел в таблице.

SELECT * 
FROM REALTIMESRC 
WHERE PARTITION = '2018-11';

Я понимаю, что оператор SELECT по умолчанию вводитОбщий замок на выбранных строках.

  1. Когда эта таблица получает вставки из других источников в том же разделе, где я запрашиваю, влияет ли вставка данных из-за моей операции выбора?
  2. Я предполагаю, что общая блокировка, введенная оператором Select, будет применима к таблице строк и не будет применяться к новым вставкам, что происходит параллельно.Может кто-нибудь уточнить, пожалуйста?

1 Ответ

0 голосов
/ 14 ноября 2018

Я понимаю, что оператор SELECT по умолчанию вводит общую блокировку для выбранных строк.

Это верно, да.

Когда эта таблица получает вставки из других источников в том же разделе, где я запрашиваю, влияет ли вставка данных из-за моей операции Select?

Нетпоскольку при вставке вводятся только новые строки, которые вы не выбрали, проблем не должно быть.

Я предполагаю, что общая блокировка, введенная оператором Select, будет применима в строкетаблица и не относится к новым вставкам, что происходит параллельно.

Да, это правильно - INSERT и SELECT должны прекрасно работать параллельно.

Могут быть некоторые крайние случаи, когда вы можете столкнуться спроблема:

  • если оператор INSERT пытается вставить более 5000 строк в одну транзакцию, SQL Server может выбрать эскалацию этих 5000 отдельных блокировок в * * * * * * исключительная блокировка на уровне таблицы - в этот момент операции SELECT будут невозможны, пока транзакция INSERT не завершится
.
...