Статьи

Удаление потерянных транзакций в MS SQL Server

Вы можете найти часть 2 здесь .

Вступление

Довольно часто транзакции в MS SQL Server теряются теми, кто их запускал. Нередко запускается сценарий в SSMS, который запускает явную транзакцию с помощью оператора BEGIN TRANSACTION, но затем возникает ошибка и происходит сбой COMMIT TRANSACTION или ROLLBACK TRANSACTION, в то время как инициатор транзакции покидает этот запрос в течение некоторого времени. Транзакции, оставленные забытыми на длительные периоды времени, могут препятствовать доступу пользователей к заблокированным ресурсам (таблицам, ресурсам сервера (ОЗУ, ЦП, система ввода-вывода).

В этой статье мы рассмотрим, как удалять потерянные транзакции с помощью SQL Complete .

Под  потерянной транзакцией мы в основном будем понимать активную (запущенную) транзакцию, которая не имеет активных (запущенных) запросов в течение некоторого длительного периода времени T.

Общий алгоритм удаления потерянных транзакций

Вот общий алгоритм удаления потерянных транзакций:

  1. Создайте две таблицы: одну таблицу для хранения и анализа информации о текущих потерянных транзакциях, а вторую — для архивации транзакций, выбранных из первой таблицы, в соответствии с действиями по удалению для последующего анализа.
  2. Соберите информацию о транзакциях и их сеансах, которые не имеют запросов, то есть транзакции, запущенные и оставленные забытыми в течение определенного промежутка времени T.
  3. Обновите таблицу, содержащую текущие потерянные транзакции, начиная с шага 1 (если потерянная транзакция получает активный запрос, то такая транзакция больше не считается потерянной и удаляется из таблицы).
  4. Определите сеансы, которые нужно уничтожить (в сеансе есть хотя бы одна потерянная транзакция, упомянутая в таблице из шага 1, и для этого сеанса также не выполняются запросы).
  5. Заархивируйте информацию, которую вы собираетесь удалить (подробности о сеансах, соединениях и транзакциях, которые нужно уничтожить).
  6. Убить выбранные сессии.
  7. Удалите обработанные записи вместе с теми, которые не могут быть удалены и были в таблице с шага 1 слишком долго.

Теперь давайте посмотрим, как мы можем реализовать этот алгоритм.


Вы также можете прочитать:  
Восстановить удаленные данные из таблицы SQL, используя журнал транзакций и номера LSN.

Реализация алгоритма удаления потерянных транзакций

Таблица для хранения и анализа потерянных транзакций

Форматирование кода

Давайте создадим таблицу для хранения и анализа информации о текущих потерянных транзакциях с использованием dbForge SQL Complete:

1. Раскрывающийся список предложений помогает быстро составить таблицу.

2. Команды SQL преобразуются в верхний регистр:

Таким образом, мы завершим скрипт для создания нужной нам таблицы:


SQL