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

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

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


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