Имя: Пароль:
1C
1С v8
Управляемые блокировки и план обмена
0 bodri
 
12.03.13
09:38
Есть центральная база и куча переферийных баз, настроен обмен между ними через план обмена. Обмен осуществляется в ручную. При выгрузке данных все пользователи испытывают трудности в работе (конфликты блокировок).
Хочу попробовать прикрутить управляемые блокировки к обмену. Возможно ли такое?
Если да, то раскажите куда копать?
1 Fragster
 
гуру
12.03.13
09:38
нет
2 Fragster
 
гуру
12.03.13
09:38
вообще странно
3 bodri
 
12.03.13
09:39
(2) что именно?
4 Fragster
 
гуру
12.03.13
09:39
если большая проблема - то можно уменьшить количество перифериек, например, добавив промежуточный уровень
5 Fragster
 
гуру
12.03.13
09:39
(3) что блокировки
6 Fragster
 
гуру
12.03.13
09:40
(4)+ типа
Центр  - 5 перифериек - 5 * 5 перифериек (по 5 к каждой периферийке 1го уровня)
7 Maxus43
 
12.03.13
09:40
(5) что странного? косяк обменов 1с в том, что блокируются таблицы изменений, полностью, а не по записям
8 Fragster
 
гуру
12.03.13
09:41
(7) только на 1 момент "прочитать изменения"
9 Fragster
 
гуру
12.03.13
09:41
и на второй - когда меняется номер сообщения
10 Fragster
 
гуру
12.03.13
09:41
оба этих действия почти мгновенны
11 Maxus43
 
12.03.13
09:42
(10) прочитать изменения мгновенны? чо?) если зарегистрировано 400 тыщ объектов - он и читает минуты 2-3
12 Fragster
 
гуру
12.03.13
09:42
(11) о_О
13 Maxus43
 
12.03.13
09:42
ну не 2-3 конечно, но чувствуется
14 Maxus43
 
12.03.13
09:43
при записи объекта в базу - тоже происходит блокировка таблицы изменений при регистрации. Это мгновенно, но если идёт обмен (и загрука и выгрузка) - таблицы заблокированы
15 bodri
 
12.03.13
09:43
+ (13) Тем более чем больше база тем больше времени
16 Fragster
 
гуру
12.03.13
09:44
(15) эээ.... а ответы загружаешь, чтобы с регистрации снималось?
17 Maxus43
 
12.03.13
09:44
(16) это стандартный механизм жеж
18 bodri
 
12.03.13
09:45
(16) обязательно
19 Fragster
 
гуру
12.03.13
09:45
(14) нет, после ВыбратьИзменения, или как там его - таблица изменений разблокируется. Ну и можно выбирать изменения по метаданным, а не все сразу.
20 Fragster
 
гуру
12.03.13
09:45
(18) тогда почему (15)?
21 MrStomak
 
12.03.13
09:48
Разве остались еще конфы не на управляемом режиме? План обмена полный, или идёт фильтр при выгрузке?
22 Maxus43
 
12.03.13
09:49
(19) ну смотри, идёт загрузка - в это время таблицы изменений заблокированы даже на чтение, загрузка идёт нифига не быстро, объекты пишутся последовательно. Каждый обыъект записаный вызывают блокировку таблицы изменений свою, хоть и быстро - но объектов дофига и грузятся сплошняком. Пусть микро-блокировки, но постоянно. В это время что-то записать в базу становится проблемой
23 MrStomak
 
12.03.13
09:50
(22) Рассматриваем случай выгрузки
24 Maxus43
 
12.03.13
09:50
(21) блокировки таблиц изменений живут своей жизнью, влиять на них ты не можешь своими управляемыми режимами
25 Maxus43
 
12.03.13
09:52
(23) при выгрузке как ни странно - так же, блокировка таблиц даже на чтение, что странно но так есть. Иль я отстал от жизни?
26 Maxus43
 
12.03.13
09:54
например на УПП, где много таблиц впринципе - даже ПрочитатьИзменения - не мгновенно, достаточно ощутимо
27 Fragster
 
гуру
12.03.13
09:56
(26)->(19), выбирай по метаданым
28 Maxus43
 
12.03.13
10:04
(27) мы про типовой Полный обменн, не? там всё сделано просто, что ведёт к траблам блокировок
29 bodri
 
12.03.13
10:07
(21) с фильтром, он в процедуре ПриОтправкеДанныхПодчиненному
30 Maxus43
 
12.03.13
10:10
(29) хреновый фильтр кстати
31 MrStomak
 
12.03.13
10:10
(29) Действенный способ - переписать фильтр на регистрацию изменений.
32 bodri
 
12.03.13
10:11
(31) при записи документов?
33 Maxus43
 
12.03.13
10:13
(32) да, на подписках обычно делают, снимая авторегистрацию
34 bodri
 
12.03.13
10:15
(33) получается, спимаю авто регистрацию и при записи регистрирую в нужном плане обмена?
35 bodri
 
12.03.13
10:16
(33) объясни, что это даст.
36 hhhh
 
12.03.13
10:20
(35) ну например 1000 документов, а отправить нужно 5 из них. Ты отправляешь всю тысячу, она у тебя нереально где-то лопатится и лопатится, потом наступает только событие ПриОтправкеПодчиненному и ты выясняешь, что нужно отправлять не 1000, а только 5. А он сразу на первом этапе регистрирует 5 документов. Выигрыш у него в 200 раз.
37 bodri
 
12.03.13
10:21
(36) ясно спс
38 bodri
 
12.03.13
10:24
(36) вопрос: 1000 документов по 20 в каждую переферийку, он же всё равно лопатит всю 1000, даже если регистрацию переписать?
39 bodri
 
12.03.13
10:43
На мой взгляд выход только один
Основная база -> Копия базы для обмена (через полный обмен) -> Переферийки
где полный обмен делается автоматически через каждые 15-30 минут
40 Maxus43
 
12.03.13
10:46
(38) смотри, если ты зарегистрируешь 1000 доков в 10 узлов - на каждый документ будет 10 записей в таблицах изменений.
а если документ надо всего в 5 узлов - записей будет 5. Не будет лишних записей
41 bodri
 
12.03.13
10:50
(40) я понял, но на переферийки уходят только документы "Перемещение товаров", а эти документы только для них и делаются, за исключением 2-3 документов в месяц из  примерно 5000 которые делаются между складами в центре.
42 bodri
 
12.03.13
10:51
+(41) поэтому прирост скорости минимален и не существенен.
43 Maxus43
 
12.03.13
10:53
(42) ну это зависит конечно от того, много ли на самом деле деления данных по узлам, если основнаяя масса данных ходит по всем узлам - то да, прироста мало.
44 bodri
 
12.03.13
10:54
Вот интересно у 1С есть в планах реализация управляемых блокировок на таблицу регистраций.
45 MrStomak
 
12.03.13
11:00
(44) Регистрация изменений работает в управляемом режиме, т.е. на уровне изоляции read committed. Просто ты через менеджер блокировок не может туда наставить блокировку, т.к. это просто не нужно (на таблицу субконто в регистре бухгалтерии ты отдельно тоже блокировку ставить не можешь, и что?)
46 Serg_1960
 
12.03.13
11:00
ТС, попробуй отделить мух от котлет :) Вариант для "подумать": в сети центрального узла создать ещё один подчиненный узел... Зачем спросите вы? Для пользователей центрального узла.
47 MrStomak
 
12.03.13
11:02
И блокировки таблиц при выгрузке как бы тоже не происходит, кстати.
48 Maxus43
 
12.03.13
11:03
(45) чот я не догоняю смысла заявления. Блокируется целиком таблица, а не записи, в этом случае пофиг какой режим
49 bodri
 
12.03.13
11:03
(45) было бы удобней просто
50 Maxus43
 
12.03.13
11:05
(47) происходит, даже на чтение. зачем - я хз
51 Bober
 
12.03.13
11:07
(0) прикрутить можно, но объем работ будет большой.
для начала как вариант отключить текущие итоги у всех регистров и включить разделение итогов.
52 MrStomak
 
12.03.13
11:08
(47) Выполняется запрос update на таблицы регистрации по условию "где не стоит номер сообщения выгрузки, надо его поставить". Так как у нас изменение данных, происходит блокировка этих строк или страниц на чтение. Таблицы блокируются по обычным правилам - согласно настройкам эскалации (когда тратится много памяти на блокировки строк). Можно избежать ожидания на блокировке, если проставить для ms sql read_comitted_snapshot, или использовать версионники: postgres, oracle
53 Maxus43
 
12.03.13
11:08
(50) ЗаписатьИзменения - блокирует всё намертво, там в транзакции идёт запись, пока она активна - блокировка даже на чтение таблиц изменений
54 Bober
 
12.03.13
11:10
(53) да не, она блокирует все таблицы изменений на определенный период и все.
55 MrStomak
 
12.03.13
11:13
(53) Неправда, там идёт апдейт по условию.
(54) Какой нафик период?
56 Bober
 
12.03.13
11:19
(55) на период замены null на число в таблицах изменений в колонке номер сообщения.
57 Maxus43
 
12.03.13
11:23
(52)(55) в общем случае там нигде не стоит номер сообщения. Это сильное допущение, что он там есть, отсюда по факту блокировка всей таблицы. При нормально настроеных обменах - откуда там проставленные номера возьмутся?
По условию - это методом выбрать изменения, когда проставляется номер сообщения.
А ЗаписатьИзменения - в СП посмотри, там накладываются дополнительные блокировки в т.ч. и на данные, чтобы избежать их изменения в процессе выгрузки.
РИБ 1с застрахован создателями от неоднозначных ситуаций, способом в их духе - блокируем всё, чтоб вдруг ничо не случилось
58 Bober
 
12.03.13
11:25
(57) ЗаписатьИзменения там специально есть второй параметр количество в транзакции, чтобы не зависала вся база на этот период
59 Maxus43
 
12.03.13
11:38
(58) есть, но не рекомендовано, согласованность данных тоже важна. Я к тому что возможности манёвра с блокировками при обменах очень ограничены самой реализацией данного механизма, никакие управляемые блокировки не спасут, один фиг эскалация возникнет если бы и можно было рулить блокировками конкретных записей
60 MrStomak
 
12.03.13
12:04
(57) Блин, пассаж про номер сообщения - он для того, чтобы ты понял, что таблица не блокируется, блокируются записи. Ключевая разница - мы можем новые объекты добавлять, которые не выгружаются, без конфликта блокировок. На данные никаких блокировок уж тем более не накладывается - read committed всегда в любом случае обеспечит блокировки на любые изменения данных. Никакого там "блокируем всё, лишь бы ниче не случилось" нет.
61 MrStomak
 
12.03.13
12:05
(59) Происходит блокировка конкретных записей.
62 Maxus43
 
12.03.13
12:08
(61) пусть так, не буду спорить, надо лезть вглубь.
>>Происходит блокировка конкретных записей
а не кажется ли тебе что эти конкретные и есть ВСЕ? смысл блокировать часть? выгружается/загружается/выбирается Всё, последовательно, не кусками
63 MrStomak
 
12.03.13
12:12
(62) В справочнике номенклатура 15000 позиций, в очередном сообщении мы выгружаем 100 позиций, которые присутствуют в таблице регистрации без номера выгруженного сообщения,все они блокируются в таблице изменений, остальные 14900 доступны для работы. Поэтому нет, мне не кажется, что это и есть все.
64 Maxus43
 
12.03.13
12:21
(63) на блокировку не номенклатуры, а таблицы изменений смотри, в момент проставления номеров/выгрузки ты не сможешь всё равно эти 14900 других записать, в момент загрузки - тоже. Или сможешь?
65 krbIso
 
12.03.13
12:33
по хорошему перевод в управляемый режим может помочь частично, блокировка будет снята срау после выполнения запроса, запрос простой выполняется быстро и пользователи по идее не должны будут долго ждать в ожидании.
66 Bober
 
12.03.13
12:43
(59) типовой РИБ достается почти всегда бесплатно, чтобы сделать хороший РИБ и при его работе не было таких проблем, которые туту описаны, нужно самостоятельно делать реализацию обмена по РИБ. Делать нужно через два плана обмена. В первом плане обмена идет регистрация изменений конфигурации и все, во втором плане идет регистрация изменений объектов. Все, теперь ты может работать с упр блокировками при выгрузке, с блокировками объектов в транзакции, но уже как тебе надо, а не через топорный счетчик. Блокировать таблицы изменений так как тебе надо и на сколько надо. Но! Все это нужно написать, а большинство здесь только языком может мести.
67 MrStomak
 
12.03.13
12:44
(64) Никакой блокировки номенклатуры нет, есть блокировка записей в таблице регистрации изменений. Все эти 14900 можно записать в момент выгрузки-загрузки.
(65) Ты просто не понимаешь, что такое управляемый режим. Повторю еще раз - обмен данными и работа с таблицей регистрации идёт на read committed.
68 MrStomak
 
12.03.13
12:47
(66) Замес с двумя планами обмена вообще не понял - причем тут это. Блокировка записей таблицы регистрации изменений идёт только при их изменении, а не при чтении, т.е. в соответствии с тем, как работает управляемый режим блокировок и со всеми остальными объектами.
69 Bober
 
12.03.13
12:49
(68) рано еще такие вещи понимать
70 MrStomak
 
12.03.13
12:53
(69) Аргументацию понял, бессильно сливаюсь.
71 Bober
 
12.03.13
12:56
(70) все правильно понял, разжевывать никто тебе не собирается.
72 krbIso
 
12.03.13
12:59
(67) Чего не понятного я написал? Перевод в управляемый поможет, так как снизится уровень изоляции до твоего так часто упоминаемого read commited. Что дает что? При проведении нового документа снятия блокировки в таблице изменения после выполнения запроса, соответственно так как запрос там простой по условию где номер пакета=null, запрос выполнился быстро, блокировка снялась, пользователь провел документ без таймаута.
73 MrStomak
 
12.03.13
13:02
(72) А, ты на тему перевода всей конфигурации? Ну автор не написал, что за конфа у него, типовые то на управляемом режиме все в принципе. Я просто думал ты задвигаешь мифы про неуправляемую работу плана обмена в управляемом режиме.
74 krbIso
 
12.03.13
13:06
(73) верно, судя по темам автора у него нетиповая, а нетленка
Основная теорема систематики: Новые системы плодят новые проблемы.