Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
Я не настоящий сварщик, поэтому вопросы возможно будут дилетантские. Есть интеграционный блок учетной программы на 1С и учетной программы на плюсах (легаси). Обе программы под MSSQL (сервера разные). 1С пишет данные во вторую базу через ADO. Данные обычно затрагивают много связанных таблиц, запись выполняется в основном с помощью хранимых процедур второй базы (которые реализуют бизнес-логику второй программы). Основная схема такая: - создается соединение - посылается BEGIN TRANSACTION - поочередно посылаются разные запросы на чтение и запись, в том числе с помощью вызова хранимых процедур второй программы - посылается COMMIT TRANSACTION - соединение явно не закрывается (может это имеет какое-то значение). По-идее оно закрывается неявно при выходе из scope, где оно создавалось (практически сразу после коммита). Все это нормально работало долгое время и тут по непонятным причинам начались "затыки" производительности. Типовая картина при этом - монитор активности (MSSQL 2014) показывает очередь задач и цепочку взаимоблокировок (транзакций из 1С и "родных" транзакций программы вперемешку, где в колонке "Главная причина блокировки" единичка стоит напротив процесса из 1С выполняющего в этот момент единственный оператор - COMMIT TRANSACTION. При этом во всех остальных информационных колонках - "по нулям". Типа ничего его "не держит", никакого времени ожидания, никаких типов ожидания, никаких ресурсов - ничего. Я не совсем понимаю, что это означает и в какую сторону копать. По моим наивным представлениям коммит уже ничего блокировать не должен. Блокировки должны были возникать на операторах внутри транзакции. Иногда причиной блокировок отображается выполнение хранимки, которая выполняет просто чтение одной строки из одной таблицы по кластерному индексу - тоже не понимаю, как это может быть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 10:00 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
Чудес не бывает. Ищите где у вас в блокирующей сессии остается незавершенная транзакция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 11:51 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
invm, Я знаю, что чудес не бывает. Просто приведите мне понятный пример воспроизводимого сценария, при котором будет наблюдаться аналогичное поведение. Потому что я не понимаю, как такое может происходить и что может к этому привести. Ок, незавершенная транзакция. То есть без COMMIT. Но ведь блокировка-то как раз на коммите! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 12:05 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
fisherОк, незавершенная транзакция. То есть без COMMIT. Но ведь блокировка-то как раз на коммите!Блокировка не на commit'е. commit - последняя выполненная инструкция. Посмотреть блокировки можно так Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 12:11 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
invmБлокировка не на commit'е. commit - последняя выполненная инструкция] А, дошло. То есть, если коммит был последней операцией, но существует вышестоящая транзакция и она не завершена, то пока соединение открыто - будет такая картина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 12:16 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
fisher, то пока соединение открыто - будет такая картина? пока транзикция открыта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 12:19 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
Последний глупый вопрос. Закрытие соединения с БД откатит незавершенную транзакцию или зафиксирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 10:11 |
|
||
|
Как оператор COMMIT может быть источником блокировок?
|
|||
|---|---|---|---|
|
#18+
fisherЗакрытие соединения с БД откатит незавершенную транзакцию или зафиксирует?Откатит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 10:20 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39721979&tid=1688909]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 417ms |

| 0 / 0 |
