AXForum  
Вернуться   AXForum > Рынок > Другие системы на рынке
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.01.2011, 14:13   #1  
Сисой is offline
Сисой
Участник
Аватар для Сисой
Злыдни
1C
 
938 / 339 (13) ++++++
Регистрация: 05.02.2003
Адрес: Москва
Как в 1С работают транзакционные блокировки
Меня часто спрашивают о принципах транзакционных блокировок в 1С.
Вот краткая шпаргалка.
Справедливо для клиент-серверных версий 1С 8.х

1. Вне транзакций (в т.ч. отчеты) - "грязное чтение" (Read Uncommited). Теоретически можно вызвать транзакцию внутри отчета и перевести режим доступа в Repeatable Read, но тогда начинает работать п.2 и на все читаемые данные накладывается разделяемая блокировка.
2. Транзакция в автоматическом режиме блокировок (1С 8.0) - по умолчанию Repeatable Read или Serializable на уровне записей, блокируются все отбираемые записи всех таблиц, считываемые в процессе транзакции.
Если нужно наложить исключительную (неразделяемую) блокировку - программист должен в запросе к данным использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ с перечислением блокируемых таблиц.
Исключительная блокировка также возникает в момент записи движений документа (в конце транзакции проведения, если в коде нет явных конструкций типа
X++:
 ..();
).
3. Управляемый режим блокировок (введен с версии 8.1, но программист может использовать и автоматический режим) - по умолчанию в рамках транзакции везде Read Commited на уровне записей,
Если нужно использовать разделяемую (по чтению) или исключительную блокировку, программист самостоятельно должен определить таблицы и записи, на которые накладывается блокировка.
X++:
Dl=New DataLock;
Element1= Dl.Add("РегистрНакопления.ОстаткиНаСкладе"); // элементов блокировки м.б. много
Element1.Mode=DataLockMode.Exclusive;
Element1.SetValue("Склад", ); // фильтр по складу
Element1.DataSource= QueryResult;  // например, результат запроса, но м.б. и табличная часть, и временная таблица.
Element1.UseFromDataSource("Товар","Номенклатура"); // фильтруем измерение Товар по колонке результата запроса Номенклатура
Dl.Lock();
Исключительная блокировка также возникает в момент записи движений документа.

Последний раз редактировалось Сисой; 17.01.2011 в 14:19.
За это сообщение автора поблагодарили: ziva (2), kosenkov (1).
Старый 18.01.2011, 11:49   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
1.
Цитата:
2. Транзакция в автоматическом режиме блокировок (1С 8.0) - по умолчанию Repeatable Read или Serializable на уровне записей, блокируются все отбираемые записи всех таблиц, считываемые в процессе транзакции.
Так какой из двух видов блокировок используется ?

2.
Цитата:
Если нужно использовать разделяемую (по чтению) или исключительную блокировку, программист самостоятельно должен определить таблицы и записи, на которые накладывается блокировка.
Если не ошибаюсь в 1С нет простой связи между полями и свойствами документа и таблицами БД. Как же программист определит на какие таблицы блокировки налагать ? Или он укажет на объект метаданных, а ядро само найдет таблицы которые надо блокировать ?
Старый 18.01.2011, 13:57   #3  
Сисой is offline
Сисой
Участник
Аватар для Сисой
Злыдни
1C
 
938 / 339 (13) ++++++
Регистрация: 05.02.2003
Адрес: Москва
1. Возможна эскалация. Надо отметить, что в DB2 и PostgreSQL еще хуже. В DB2 всегда Serializable (записи), а в PostgreSQL - Read Commited на уровне таблиц. Как в Oracle - не знаю.
2. Да, указываются объекты метаданных.

Для ускорения записи в регистры 1С использует разделение итогов (включается опционально для каждого регистра), т.е. если две транзакции одновременно пишут в регистр остатков по измерению "Кабель ПВХ-10" записи -5 и -3, а текущий остаток на складе равен 8, то в таблице остатков появятся следующие записи:
0; Кабель ПВХ 10; 3
1; Кабель ПВХ 10; -3

где первое значение - номер сессии параллельной записи.
(Упаковка выполняется регламентным заданием.)
Старый 11.04.2011, 11:29   #4  
dimetra2008 is offline
dimetra2008
Участник
 
1 / 10 (1) +
Регистрация: 11.04.2011
Кстати вот хороший материал по блокировкам Анализ блокировок
Старый 15.12.2014, 09:49   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
SEO оптимизаторов тут банят
__________________
-ТСЯ или -ТЬСЯ ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
1С: Франчайзи - есть ли будущее? miklenew Другие системы на рынке 13 03.10.2009 12:22
Изменения ассортимента, цен, условий поставки и сопровождения ряда продуктов «1С:Предприятия 7.7» mazzy Другие системы на рынке 40 30.04.2008 23:31
Обсуждение документа "Сравнение 1С и AX" Кузнецов Александр Сравнение ERP-систем 44 20.02.2008 13:56
Платформа «1С:Предприятие» как средство разработки бизнес-приложений Morpheus Другие системы на рынке 1 26.12.2006 13:10
1С ищет стратегического инвестора Роман Кошелев Другие системы на рынке 1 16.04.2003 23:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:31.