0. zhichkin 352 13.11.16 19:55 Сейчас в теме

Планы обмена. Управляемый режим блокировок

Статья о том, как устроен объект конфигурации 1С:Предприятие 8 "План обмена", в том числе на уровне СУБД SQL Server. Анализируются особенности его использования при управляемом режиме блокировок.

Перейти к публикации

Комментарии
Сортировка: Древо
1. Evil Beaver 5255 28.11.16 16:14 Сейчас в теме
Я, может быть, не прав, но по-моему, транзакция начинается еще до момента вызова ПередЗаписью. Т.е. в обработчике ПередЗаписью транзакция уже открыта.
2. zhichkin 352 28.11.16 17:35 Сейчас в теме
(1) Вы абсолютно правы! Спасибо за замечание. Поправил.
3. headMade 135 28.11.16 17:42 Сейчас в теме
Посмотрите - вроде часть скринов пропала. Например там где "выполнив код SQL:".
4. zhichkin 352 28.11.16 17:44 Сейчас в теме
(3) Да, есть такое дело. Честно говоря, устал бороться с этим явлением =(
5. spezc 494 29.11.16 12:52 Сейчас в теме
Так как в итоге то? Какое лекарство, когда например 100 узлов решили обменяться информацией с центром?
EMelihoff; +1 Ответить
7. zhichkin 352 04.12.16 16:59 Сейчас в теме
(5) Прошу прощения, но Вы бы не могли уточнить, что конкретно имеется ввиду? Например, я понял вопрос так: есть 100 входящих сообщений обмена для центральной базы. Вероятно это РИБ. Если каждое сообщение имеет по 1 объекту, то я не вижу в этом вообще никакой проблемы ... Дайте, пожалуйста, цифры.
8. zhichkin 352 04.12.16 20:43 Сейчас в теме
(5) Если отвечать на Ваш вопрос глобально, то, при условии, что были исчерпаны все варианты оптимизации планов обмена, нужно использовать альтернативные варианты. Например, можно использовать свою реализацию регистрации изменений. Это как минимум. Некоторые размышления по этому поводу я зафиксировал здесь. Есть и другие публикации по этому поводу. Ссылки на них можно найти в моём профиле.

В ближайшее время я планирую сделать ещё пару публикаций на тему того как можно оптимизировать работу планов обмена. Если проблемы серьёзные и требуется частная консультация, то я готов оказать посильную помощь. Пишите в личку.
11. sommid 11.01.17 18:07 Сейчас в теме
(8)
В ближайшее время я планирую сделать ещё пару публикаций на тему того как можно оптимизировать работу планов обмена

- если не сложно, то отпишитесь в комментариях этой темы. Интересно будет почитать. Спасибо.
6. tormozit 4779 29.11.16 14:57 Сейчас в теме
9. kolya_tlt 11 11.01.17 13:53 Сейчас в теме
Добрый день.
было бы здорово добавить в статью информацию по автоматическому режиму или отличий с управляемым
10. zhichkin 352 11.01.17 15:07 Сейчас в теме
(9) Тут не так много мест где будут отличия. Пожалуй это все те места, где выполняется команда SELECT. Если Вы хорошо понимаете разницу между READ COMMITED (автоматический режим) и READ COMMITED SNAPSHOT (управляемый режим), то без труда поймёте где и какая разница возникает.

Если отвечать упрощённо, то разница между этими двумя режимами такова, что:
1. При чтении данных:
в первом случае мы получаем версию записи после её изменения в другой транзакции. При этом мы ждём её завершения (нас блокируют - мы ждём, чтобы прочитать). А в случае со snapshot, мы получаем версию записи, которая была до начала второй транзакции. При этом мы ничего не ждём и допускаем "грязное чтение".
2. В процессе чтения данных:
в первом случае мы блокируем транзакции, которые желают изменить данные, которые мы читаем (мы блокируем - нас ждут, чтобы изменить). А в случае со snapshot мы никого не блокируем.

Некоторые могут подумать, что в первом случае прочитанные нами данные блокируются до конца транзакции, но это не так. Уточняю: речь идёт о первом случае (автоматический режим блокировок), когда опция read_commited_snapshot на уровне базы данных имеет значение OFF (выключено).
Это зависит от режима изоляции транзакции. В случае с планами обмена используется режим изоляции транзакции SQL Server по умолчанию, а он чаще всего равен READ COMMITED, то есть данные блокируются только на время их чтения.
То есть одна запись блокируется пока она читается в выборку, затем блокировка снимается, делается попытка получить разрешение на чтение следующей записи, устанавливается блокировка чтения и читается следующая запись. И так до тех пор, пока все, попавшие в условие отбора, записи не будут прочитаны.
13. kolya_tlt 11 12.01.17 09:26 Сейчас в теме
(10)
А в случае со snapshot, мы получаем версию записи, которая была до начала второй транзакции. При этом мы ничего не ждём и допускаем "грязное чтение".

хм, где про снэпшот такую информацию пишут ? мне казалось COMMTITED исключает грязное чтение
14. zhichkin 352 12.01.17 14:01 Сейчас в теме
(13) Очень много информации по этим вопросам можно найти в сети Интернет, например:
https://msdn.microsoft.com/ru-ru/library/tcbchxcb(v=vs.110).aspx
https://habrahabr.ru/post/305600/
15. zhichkin 352 12.01.17 14:06 Сейчас в теме
(13) Коротко отвечу всё же:
READ COMMITTED - это уровень изоляции транзакций, как правило, используемый SQL Server.
read_committed_snapshot - это опция уровня базы данных, которая может изменять поведение уровня изоляции READ COMMITTED, принятое по умолчанию. По умолчанию read_committed_snapshot = OFF. Однако при включении управляемого режима блокировок 1С переключает это значение в положение ON. Это меняет поведение уровня изоляции транзакций READ COMMITTED принятое по умолчанию.
dr.death; +1 Ответить
16. VVi3ard 41 06.09.17 09:55 Сейчас в теме
Интересная статья, для полноты не хватает описания того как работает платформа при использовании: ЗаписатьИзменения, и особенно в части работы параметра "ЭлементовВТранзакции".
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии



Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день

Консультант-аналитик 1С: ЗУП
Санкт-Петербург
Полный день