|
Управляемые блокировки и план обмена | ☑ | ||
---|---|---|---|---|
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) верно, судя по темам автора у него нетиповая, а нетленка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |