Почему оператор SQL не работает? Как работают транзакции? - PullRequest
0 голосов
/ 05 октября 2019

Выражение вопроса:

Я пробую несколько вещей относительно транзакций. Рассмотрим следующие операции:

  1. Откройте окно подключения 1 в SQL Server Management Studio
  2. BEGIN транзакцию, затем удалите около 2000 строк данных из таблицы A
  3. Откройте другое окно подключения 2 в SQL Server Management Studio
  4. Вставьте одну новую строку данных в таблицу A в окне 2 (без транзакций), сейчас она успешно выполняется

ЗатемЯ повторяю ту же операцию, но в ШАГЕ 2 я удаляю 10 тыс. Строк данных, в этом случае ШАГ 4 не может работать успешно. Я уже ждал полчаса.

Это показывает, что он выполняет SQL ... не может завершиться. Наконец, я вставляю данные, используя окно подключения 1, оно работает прямо сейчас.

Почему оно работает с 2k строк, а не с 10k строк?


Предложение Sql Iвыполнить:

В окнах соединения A я выполняю BEGIN TRAN Delete из таблицы A (10K строк)

В окнах соединения B я выполняю Вставить в таблицу A (..) ЗНАЧЕНИЯ (. ..)

Windows B не может успешно выполнить.


Большое спасибо @Gordon

Причина :

Я ищу ключевое слово о повышении блокировки. Я пытаюсь отслеживать эскалацию блокировки с помощью SQL Server Profiler и получаю блокировку: эскалация, когда я удаляю много данных в транзакции (я не фиксирую и не откатываю).

Итак, я знаю концепцию блокировкиэскалация. Я удаляю слишком много данных в таблице, затем строка блокирует эскалацию таблицы до эскалации таблицы. Я не фиксировал и не откатывал их, другое соединение (или приложение) не может получить доступ к таблице с помощью блокировки таблицы. Повышение блокировки трассировки в SQL Server Profiler


Когда повышение защиты происходит в MSSQL Server

"Параметр блокировки также влияет при повышении блокировкиКогда блокировка установлена ​​в 0, эскалация блокировки происходит, когда память, используемая текущими структурами блокировки, достигает 40 процентов пула памяти компонента Database Engine. Когда блокировки не установлены в 0, эскалация блокировки происходит, когда количество блокировок достигает 40 процентов. значения, указанного для блокировок. "


Как установить Использование SQL Server Management Studio, которое повлияет на повышение блокировки:

Чтобы настроить параметр блокировки в объектеВ проводнике щелкните правой кнопкой мыши сервер и выберите «Свойства».

Щелкните узел «Дополнительно».

В разделе «Параллелизм» введите нужное значение для параметра блокировки.

Используйте параметр блокировкизадать максимальное количество доступных блокировок, например, ограничение объема памяти, используемого SQL Server для них.

1 Ответ

3 голосов
/ 05 октября 2019

То, что вы испытываете, это «эскалация блокировки». По умолчанию SQL Server использует (я думаю) блокировки на уровне строк для удаления. Однако если выражение имеет более чем некоторый порог - 5000 блокировок - тогда SQL Server увеличивает блокировку всей таблицы.

Это автоматический механизм, который можно отключить, если вам нужно.

Существует много информации об этом как в документах SQL Server, так и в связанных документах.

...