Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как оператор COMMIT может быть источником блокировок? / 9 сообщений из 9, страница 1 из 1
24.10.2018, 10:00
    #39721856
fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
Я не настоящий сварщик, поэтому вопросы возможно будут дилетантские.
Есть интеграционный блок учетной программы на 1С и учетной программы на плюсах (легаси). Обе программы под MSSQL (сервера разные). 1С пишет данные во вторую базу через ADO. Данные обычно затрагивают много связанных таблиц, запись выполняется в основном с помощью хранимых процедур второй базы (которые реализуют бизнес-логику второй программы).
Основная схема такая:
- создается соединение
- посылается BEGIN TRANSACTION
- поочередно посылаются разные запросы на чтение и запись, в том числе с помощью вызова хранимых процедур второй программы
- посылается COMMIT TRANSACTION
- соединение явно не закрывается (может это имеет какое-то значение). По-идее оно закрывается неявно при выходе из scope, где оно создавалось (практически сразу после коммита).
Все это нормально работало долгое время и тут по непонятным причинам начались "затыки" производительности.
Типовая картина при этом - монитор активности (MSSQL 2014) показывает очередь задач и цепочку взаимоблокировок (транзакций из 1С и "родных" транзакций программы вперемешку, где в колонке "Главная причина блокировки" единичка стоит напротив процесса из 1С выполняющего в этот момент единственный оператор - COMMIT TRANSACTION. При этом во всех остальных информационных колонках - "по нулям". Типа ничего его "не держит", никакого времени ожидания, никаких типов ожидания, никаких ресурсов - ничего.
Я не совсем понимаю, что это означает и в какую сторону копать.
По моим наивным представлениям коммит уже ничего блокировать не должен. Блокировки должны были возникать на операторах внутри транзакции.
Иногда причиной блокировок отображается выполнение хранимки, которая выполняет просто чтение одной строки из одной таблицы по кластерному индексу - тоже не понимаю, как это может быть...
...
Рейтинг: 0 / 0
24.10.2018, 11:51
    #39721957
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
Чудес не бывает.
Ищите где у вас в блокирующей сессии остается незавершенная транзакция.
...
Рейтинг: 0 / 0
24.10.2018, 12:05
    #39721979
fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
invm, Я знаю, что чудес не бывает.
Просто приведите мне понятный пример воспроизводимого сценария, при котором будет наблюдаться аналогичное поведение.
Потому что я не понимаю, как такое может происходить и что может к этому привести.
Ок, незавершенная транзакция. То есть без COMMIT. Но ведь блокировка-то как раз на коммите!
...
Рейтинг: 0 / 0
24.10.2018, 12:11
    #39721984
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
fisherОк, незавершенная транзакция. То есть без COMMIT. Но ведь блокировка-то как раз на коммите!Блокировка не на commit'е. commit - последняя выполненная инструкция.
Посмотреть блокировки можно так
Код: sql
1.
select * from sys.dm_tran_locks where session_id = ...
...
Рейтинг: 0 / 0
24.10.2018, 12:16
    #39721993
fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
invmБлокировка не на commit'е. commit - последняя выполненная инструкция]
А, дошло. То есть, если коммит был последней операцией, но существует вышестоящая транзакция и она не завершена, то пока соединение открыто - будет такая картина?
...
Рейтинг: 0 / 0
24.10.2018, 12:19
    #39721997
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
fisher,

то пока соединение открыто - будет такая картина?

пока транзикция открыта
...
Рейтинг: 0 / 0
25.10.2018, 10:11
    #39722651
fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
Последний глупый вопрос.
Закрытие соединения с БД откатит незавершенную транзакцию или зафиксирует?
...
Рейтинг: 0 / 0
25.10.2018, 10:20
    #39722656
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
fisherЗакрытие соединения с БД откатит незавершенную транзакцию или зафиксирует?Откатит
...
Рейтинг: 0 / 0
25.10.2018, 10:47
    #39722668
fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оператор COMMIT может быть источником блокировок?
Спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как оператор COMMIT может быть источником блокировок? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]