Имя: Пароль:
1C
1С v8
Deadlock - Повышение уровня блокировки (Управляемый режим)
,
0 Alex_MA
 
29.04.14
11:11
Здравствуйте!

Помогите понять текущую картину.
Управляемый режим:
В ИТС статье написано, что дедлок такого типа возможен при чтении без установки блокировки и последующая запись - но как такое возможно. Ведь после чтения ресурса блокировка с него будет снята!

Спасибо.
9 К_Дач
 
29.04.14
11:26
Если читаешь данные без установки блокировок - то по умолчанию режим чтения - read committed. При записи разработчик обязан в управляемом режиме сам управлять блокировками и уровнями изоляции. Соответственно, если запись набора записей регистра - это свойство БлокироватьДляИзменения (блокируется весь набор, блокировка снимается после записи набора), в остальных случаях - открывать транзакцию, блокировать нужные данные с помощью объекта БлокировкаДанных, закрывать транзакцию.
10 Жан Пердежон
 
29.04.14
11:26
(8) управляемый режим не всегда был в 1С
11 К_Дач
 
29.04.14
11:28
(8) посмотри, что происходит в коде при одновременном чтении и записи. Кто-то из них пытается установить более пессимистичную блокировку
12 Господин ПЖ
 
29.04.14
11:30
>сценарию повышения уровня блокировки

это вообще что? повышение уровня изоляции транзакций? изменение вида блокировки?
13 fisher
 
29.04.14
11:40
(0) Да, странно... При READ COMMITED блокировка снимается сразу после чтения... А как статья называется?
14 DmitrO
 
29.04.14
11:46
(0) "повышение уровня блокировки" это с разделяемой до исключительной.
Лочит твоя транзакция сначала разделяемой потом исключительной один и тот же объект.
говоришь "без Новый БлокировкаДанных"
как читаешь? а)запросом? или б)объект получаешь или набор записей читаешь?
15 Spieluhr
 
29.04.14
11:46
(13) в СУБД - да, а в менеджере блокировок 1С будет висеть до конца транзакции
16 DmitrO
 
29.04.14
11:49
Просто где-то в последних релизах 8.2 умники в 1С решили, что если объект читается в транзакции то непременно надо воткнуть  разделяемую блокировку (внутренее).
17 Alex_MA
 
29.04.14
11:51
(13)"Анализ и устранение взаимоблокировок"
18 Alex_MA
 
29.04.14
11:55
(15)только если в коде написано Новый БлокировкаДанных - то уже да, до конца транзакции. А если не написано, то не лочится
19 MrStomak
 
29.04.14
11:59
(9) У вас неверное представление о назначении свойства "БлокироватьДляИзменения"
20 MrStomak
 
29.04.14
12:00
(16) Это же неправда. Зачем так писать?
21 MrStomak
 
29.04.14
12:06
(12) Перевести с разделяемой на исключительную блокировку - это повысить уровень блокировки. Т.е. нам нужно усилить имеющуюся блокировку, увеличить количество конфликтов в таблице совместимостей. На мой взгляд, это достаточно понятный термин.
22 Alex_MA
 
29.04.14
12:07
23 fisher
 
29.04.14
12:10
(17) Не вижу я там такого для управляемых блокировок. Конкретизируй место в статье.
24 DmitrO
 
29.04.14
12:11
(20)лично слышал это, от чего сам был в недоумении.
25 fisher
 
29.04.14
12:12
(23) Для управляемого режима написано следующее:
"Обратите внимание на то, что взаимоблокировки в данном случае не произошло. Вместо этого была нарушена бизнес-логика системы"
26 fisher
 
29.04.14
12:13
Короче, просто структура статьи немного бестолковая.
27 MrStomak
 
29.04.14
12:19
(24) Менеджер блокировок работает над СУБД, у него нет информации о данных, он не может знать, что запрос нам вернёт и что он пройдёт по пути, автоматическая блокировка при чтении средствами менеджера 1С невозможна. При записи используется объектная техника и всегда есть конкретные записываемые данные - вот тут менеджер блокировок может автоматически выставить исключительную блокировку.
28 fisher
 
29.04.14
12:21
(24) Плюнь в сказавшего
(27) +1
29 DmitrO
 
29.04.14
12:34
(27)Я не говорил ничего про автоматические блокировки. Я имел в виду что будет вставать разделяемая управляемая.
Полностью согласен с (27).

Хотя вот я уже специально проверил на 8.2.19.83 - нет ее.
Хм.. тогда о чем же мы говорили с Рупасовым.. склероз у меня чтоли, старость не радость..
сори кого обидел..
30 fisher
 
29.04.14
12:38
(29) Чисто теоретически, могли повысить уровень изоляции до REPEATABLE READ. Тогда прочитанные данные будут блокироваться до конца транзакции. Но это нонсенс.
Думаю, просто не поняли друг-друга.
31 К_Дач
 
29.04.14
12:59
(19), (22) друзья, я знаю, что по факту это включение/выключение разделения итогов

"следствием этого является блокировка всех нужных записей (без учета разделителя)" = "блокируется весь набор, блокировка снимается после записи набора"
32 MrStomak
 
29.04.14
13:03
(31) Да ты в общем неверно пишешь, при записи разработчик ничего не должен делать как раз - управляемая блокировка при записи встаёт самостоятельно. То, что блокировка снимается после записи, тоже неверно - она снимается при окончании транзакции.
33 К_Дач
 
29.04.14
13:12
(31) Блокировка снимается после окончания транзакции - абсолютно верно, а когда заканчивается транзакция в случае записи набора записей регистра?

Как раз таки именно разработчик должен позаботиться о том, чтобы грамотно наложить нужные блокировки на нужные данные при их записи. Возможно ли чтение этих данных в процессе записи или невозможно. Какой уровень изоляции выставить и т.д., какие конкретно данные блокировать - это все на совести того, кто непосредственно внедряет многопользовательскую систему.
34 К_Дач
 
29.04.14
13:12
(33) к (32)
35 К_Дач
 
29.04.14
13:17
В автоматическом режиме работы - блокируется вся таблица, куда пишутся данные, многопользовательская работа невозможна. В управляемом - разработчик сам обязан все проконтролировать, вот что имел ввиду. Надо смотреть в коде чтения и записи, что там происходит, может чтение пытается выставить исключительную блокировку
36 DmitrO
 
29.04.14
13:22
К_Дач, как давно ты занимаешься "непосредственным внедрением многопользовательских систем"?
37 MrStomak
 
29.04.14
13:30
(33) Запись набора записей не заканчивает транзакцию. Например, там может быть запись следующего набора записей потом. Если речь про операцию .Записать(), находясь вне транзакции, то тогда безусловно - она закончится после записи, но и смысла в каких-либо управляемых блокировках в таком случае нет.

Разработчик не должен заботиться о наложении блокировок при записи на записываемые данные, они и сами накладываются прекрасно. Разработчику следует чесаться только тогда, когда ему по какой-либо причине нужно наложить более широкую блокировку, чем просто на записываемые данные. Например, в упомянутом тобой случае с разделителем.

Разработчик не выставляет уровни изоляции транзакций. Всё его манипулирование уровнями изоляций сводится к выставлению автоматическиго/управляемого режима (serializable-repeatableread/readcommitted), а также использованию или не использованию НачатьТранзакцию() при чтении данных (readuncommitted или repeatableread-readcommitted).

В автоматическом режиме вся таблица блокируется только при использовании СУБД-версионников и файлового варианта (который тоже версионник).
38 К_Дач
 
29.04.14
13:32
(36) как раз сейчас внедряем. Одновременная запись и чтение из разных БД в одну и ту же таблицу и не стандартными средствами платформы 1С, между прочим, хотя и из нее.

Вместо того, чтобы переходить на личности, если не согласны опровергните аргументированно.

Вводная:

Необходимо, чтобы в одну и ту же таблицу писались одновременно данные. Одинаковый набор всех полей-колонок возможен. Необходимо реализовать, чтобы записываемые данные не читались до тех пор, пока не запишется весь пакет строк. Необходимо, чтобы чтение данных не мешало записи и не замедляло ее работу. Запись не должна ждать чтение.

Как будете реализовывать?
39 Alex_MA
 
29.04.14
13:39
(25)в абзаце:
"Особенности взаимоблокировок данного вида"

Автоматический режим:
....
Управляемый режим
40 DmitrO
 
29.04.14
13:41
(38)Это был просто вопрос, не напрягайтесь так. Буду считать что вы на него ответили. :)
41 MrStomak
 
29.04.14
13:43
(38) 1) версионная схема с read committed.
     2) использовать 2 БД, зеркалировать 1 во 2, выставлять для 2ой read-only.

Пункт с замедлением работы неясен - ресурсы СУБД не бесконечны, любая операция влияет.
42 fisher
 
29.04.14
13:47
(39) Ага. А переходишь по ссылке "Управляемый режим", а там (25)
43 К_Дач
 
29.04.14
14:04
(33) запись набора производится в СВОЕЙ, отдельной транзакции, во вложенной. Легко проверить, если в документе, проводимом по нескольким регистрам в одном из регистров выставить автоматический режим - вывалится ошибка.
44 MrStomak
 
29.04.14
14:10
(43) Я даже не знаю как это комментировать, чтобы не обидеть. Ну посмотрите профайлером начало и конец транзакции. Или попробуйте откатить только запись регистра, продолжая проведение документа. Или посмотрите блокировки в sp_locks после того, как все регистры записаны. Можно еще почитать ИТС.
45 DmitrO
 
29.04.14
14:10
господь всемогущий, прости их, ибо они не ведают что творят :)
46 Новиков
 
29.04.14
14:14
(43) Нобелевская. Продолжай наблюдения.
47 К_Дач
 
29.04.14
14:39
(45), (46) а судьи кто? ;)

(43) профайлером не проверял.

Режим проведения документа - управляемый. Режим одного из регистров, непосредственно по которому документ не проводится - автоматический. В итоге:

Ошибка при выполнении обработчика - 'ПриЗаписи'. Ошибка использования Менеджера блокировок
Автоматический режим блокировки недопустим в этой транзакции.

Столкнувшись раз с такой ошибкой, решил, что запись наборов делается во вложенных транзакциях. Ошибаюсь?
48 К_Дач
 
29.04.14
14:43
На минуточку, мы тут выяснили выше, что блокировки выставляет и снимает открываемая транзакция. 10 регистров, все в управляемом, один в автоматическом. И?
49 К_Дач
 
29.04.14
14:45
Если документ проводится в упр режиме, транзакция открыта в управляемом режиме, явно или нет. Так почему же он тогда не игнорирует свойство регистра? И зачем тогда вообще это свойство, если можно было бы обойтись только свойством документа? Эй, "знатоки" (45), (46), поделитесь соображениями
50 Alex_MA
 
29.04.14
15:00
(42)Ага. Вообщем статья криво написана. Вводит в заблуждение.
51 DmitrO
 
29.04.14
15:03
(49)Об этом написано в документации. Читать пробовали? Для этого не надо быть "знатоком".
Читать, только читать, писать еще рано.
52 fisher
 
29.04.14
15:08
(49) Какими соображениями? Это тупо проверка платформы на совместимость режимов. Остальное - твои домыслы.
53 К_Дач
 
29.04.14
15:09
(51) ну так дай ссылку, ткни так сказать носом нерадивого, а уж потом только взывай к всевышнему. Я если не прав - признаю и скажу спасибо, что наставил на путь истинный, а пока так - типа ты, холоп, недостоин еще с барином спор вести. Несолидно
54 К_Дач
 
29.04.14
15:12
(52) тут выше писали, что, мол уровнями блокировок управляет транзакция
55 fisher
 
29.04.14
15:15
(54) Эта загадочная фраза должна была что-то прояснить? В любом случае, мне это неинтересно.
56 DmitrO
 
29.04.14
15:20
(53)да я и ссылку могу дать: http://its.1c.ru/db/v8doc#content:63:1:IssOgl2_9.3.5.ОсобенностиработыврежимеАвтоматическийиуправляемый

Если туда нет доступа, то это: Руководство программиста 9.3.5
57 К_Дач
 
29.04.14
15:21
(55) я предполагаю, что записи наборов регистров производятся во вложенных транзакциях. На этот вывод меня натолкнула ситуация из (47), а также статья:

http://www.lavelin.ru/articles/18-1s/razrabotka-i-administrirovanie/268-blokirovki-dannyh-v-1spredpriyatii-8.html

Господа (44), (45) и (46) изволили посмеяться, однако контраргументов не привели.
58 DmitrO
 
29.04.14
15:24
А еще небольшой раздел 9.2.2 вам будет очень полезен. :)
Чтобы вы не пугали своих заказчиков "вложенными" транзакциями, они ведь тоже могут оказаться людьми грамотными.
59 К_Дач
 
29.04.14
15:28
(58) О, ну да, "вложенный" - конечно не то слово, которое верно отражает суть, но для простого понимания, "на пальцах" - почему бы и нет, спасибо, месье

Прокомментируй таблицу №3 из статьи в (57), там где " Сочетания режимов управления блокировками в транзакции"
60 MrStomak
 
29.04.14
15:51
(57) Какие тут могут быть "аргументы"? Берешь и проверяешь. Есть ТЖ, есть профайлер, раздолье для любых проверок.

Лениво тебе что-то объяснять, ты явно не стремишься к пониманию.

Зато не стесняешься писать откровенный бред про снятие блокировок после записей регистров, ручные блокировки при записи объектов, управление уровнями изоляций и так далее.
61 К_Дач
 
29.04.14
16:10
(60) последняя попытка вступить в конструктивный спор.

1. "снятие блокировок после записей регистров" - я уверен, что блокировки устанавливаются и снимаются транзакцией, в рамках которой производится запись набора. Также считаю, что набор записывается в рамках отдельной транзакции (раздел 9.3.5, ситуация из (47)),слово "вложенный" применять не буду, хотя на ИТС спокойно оперируют понятием "транзакция верхнего уровня". Но, думаю, понятно, о чем идет речь. Запись набора заканчивается фиксацией транзакции, поэтому "снятие блокировок после записей регистров".

2. "ручные блокировки при записи объектов, управление уровнями изоляций" - я попытался озвучить общий принцип, чтобы обратить внимание автора, где искать решение проблемы, на возможную коллизию чтения и записи или параллельной записи. Верность этих утверждений могу подтвердить практическим примером: при работе напрямую с СУБД, необходимо явно указывать уровень изоляции транзакции и блокировки. У объекта ADO, для наглядности, для этого есть свойства IsolationLevel и LockType.

Кажется, аргументировано? Опровергните или укажите на ошибки.
62 К_Дач
 
29.04.14
16:15
(60) вы сами, в (44) проверяли где и как открываются и фиксируются транзакции при проведении документа по нескольким регистрам? или голословно?
63 fisher
 
29.04.14
16:20
Нет чтобы сказать - простите дурака, у меня в голове каша из транзакций СУБД и транзакций 1С. Нужно права качать.
64 MrStomak
 
29.04.14
16:21
(61)
1. Друг, фразы вроде "я уверен" не имеют никакого отношения к "конструктивному спору". Тебе предложено проверить - ты отказываешься.
Выдержка из документации, надеюсь, достаточно конструктивна: "Это означает, что всегда действует только транзакция самого верхнего уровня. Все транзакции, вызванные внутри уже открытой транзакции, фактически относятся к той же транзакции, а не образуют вложенную транзакцию"
2. А управляемый и автоматический режимы, про который ты при этом пишешь, они в каком свойстве объекта ADO находятся?
(62) Я смотрел километры логов ТЖ.
65 К_Дач
 
29.04.14
16:27
(63) никто ничего не качает, лично я пытаюсь разобраться. Проверять тоже не отказывался, разве где-то написал об этом? с удовольствием проверю, благо и задачи как раз по теме.
66 fisher
 
29.04.14
16:34
Самое смешное, что мне неясно, каким бы образом повлияло использование вложенных транзакций СУБД (если бы они имели место) на профильное обсуждение.
67 К_Дач
 
29.04.14
16:37
Хорошо, тогда кто-нибудь, объясните, почему возникает ситуация в (47)? Еще раз, режим работы конфигурации - автоматический и управляемый. Документ проводится, записывается и удаляется в управляемом режиме. Один из регистров - в автоматическом. Транзакция по документу открыта в управляемом режиме, одна из транзакций по регистру пытается открыться в автоматическом до момент фиксации "самой первой" (давайте так говорить) транзакции - ошибка. Выходит, все-таки набор записывается в своей транзакции, разве нет? Да, она в рамках "самой первой", но тем не менее?
68 fisher
 
29.04.14
16:46
(67) Нет. Признак режима блокировок для регистра - это всего лишь контролька. Признак. Галка. Чтобы исключить запись в одну и ту же таблицу с использованием разных идеологий блокировок.
69 MrStomak
 
29.04.14
17:32
(67) Вся эта ситуация - конкретный способ реализации смешанного режима блокировок в 1с. В автоматическом режиме у нас просто идут запросы в СУБД, это более простой для платформы режим. В управляемом используется новый элементв  уравнении - менеджер блокировок 1с. В смешанном режиме, чтобы менеджер блокировок мог установить управляемую блокировку, объект блокировки должен поддерживать работу в управляемом режиме - то есть в метаданных это явно должно быть прописано, так вот решили сделать. Почему управляемый в автоматическом может работать,а  наоборот - нет? Так это как раз следствие того, что всё происходит в одной транзакции! Если у транзакции автоматический режим, значит она менеджер блокировок использовать не будет в любом случае - ей не важно, что там будет у остальных объектов стоять в качестве режима блокировки. Если у транзакции управляемый режим, то запись любого объекта будет вызывать помимо всего прочего еще и попытку наложения управляемой блокировки. А для регистров в автоматическом режиме это сделать будет нельзя - это запрещено разработчиком в конфигураторе!
70 fisher
 
29.04.14
17:38
(69) Не совсем так. Намутили они со смешанным режимом чего-то.
Мне крышу сносит этот абзац из документации:
"Первая особенность заключается в том, что даже если для транзакции используется автоматический режим управления блокировками, система установит дополнительно и соответствующие управляемые блокировки при записи данных в этой транзакции. Из этого следует, что транзакции, исполняющиеся в режиме управляемых блокировок, могут конфликтовать с транзакциями, исполняющимися в режиме автоматического управления блокировками."
Вот что они имели в виду? Что такое "соответствующие управляемые блокировки"?
71 MrStomak
 
29.04.14
17:41
(70) Имеют ввиду, что при записи регистра на всякий случае будет установлена управляемая исключительная блокировка, как если бы он записывался в управляемой транзакции. Уровень изоляции транзакций на СУБД при этом всё равно остаётся высоким, а нужно это для того, чтобы управляемые блокировки на регистр не игнорировались при его записи из автоматической транзакции.
72 fisher
 
29.04.14
18:11
(71) На какой "всякий" случай? Для параллельной управляемой транзакции? А нафига? Что-то я туплю под конец дня...
73 MM
 
29.04.14
18:38
(72) Пример, регистр в управляемом режиме, его двигают два документа один в управляемой транзакции, второй в автоматической. Как его предложите блокировать на СУБД или в менеджере блокировок 1С?
Совместимость штука мутная.
74 fisher
 
29.04.14
18:42
(73) Автоматическая транзакция в любом случае на уровне СУБД заблокирует те же ресурсы, что и "дублированной" управляемой блокировкой. При этом "дубляж" ничего не решает, т.к. автоматическая блокировка всегда будет "попутно" блокировать и другие ресурсы, о которых менеджер управляемых блокировок заведомо ничего знать не будет.
75 MM
 
29.04.14
19:04
(74) Раз не знает значит они и не важны.
Продолжая (73) оба документа прочли регистр, первый поставил управляемую блокировку (на СУБД поставил и снял); второй накладывает S (или U) на остатки регистра.
Потом первый документ хочет писать и ждёт снятия на уровне СУБД; второй повышает S (или U) до X, пишет и успешно заканчивает транзакцию.
Первый документ списывает в минус на разлоченном регистре.
76 MrStomak
 
29.04.14
19:08
Автоматическая блокировка ничего не будет знать о ручной управляемой блокировке в соседней, управляемой, транзакции, и позволит записать документ тогда, когда разработчик явно это запретил.
77 К_Дач
 
29.04.14
19:31
(75), (76) если я все верно понимаю, по одним и тем же регистрам не должны делать движения документы в разных режимах....? зачем тогда режим совместимости... Вернее тогда всю конфигурацию перевести в управляемый режим.
78 MM
 
29.04.14
20:15
(77) неверно. В смешанном режиме автоматический режим транзакции ставит некоторые управляемые блокировки сам.
+ процесс перехода подразумевает установку управляемых блокировок из кода даже в автоматическом режиме транзакции, с заделом на будущее, когда они понадобятся.
Т.е. если хочешь сделать регистр управляемым, везде где надо, ставь управляемые блокировки, а затем меняй его режим. Когда закончишь эту операции со всеми регистрами по которым проводится документ, можно и документ сделать управляемым. И так далее.
Мне тоже кажется, что всю конфигурацию проще перевести в управляемый режим сразу.
79 kuromanlich
 
29.04.14
20:19
(78) " режим транзакции ставит некоторые управляемые блокировки сам" - наверное "позволяет ставить"
80 vi0
 
29.04.14
21:12
(37)
> В автоматическом режиме вся таблица блокируется только при использовании СУБД-версионников

можно этот момент поподробнее
интересно исходя из того, что блокировок в версионнике наоборот становится меньше, насколько я могу судить по sql server
81 vi0
 
29.04.14
21:14
+(80) так, это у нас в управляемом режиме так работает
а что тогда под версионником здесь подразумеваешь?
82 Новиков
 
29.04.14
21:20
Чувствую, в этой ветке порвется еще много валькин-дед-bоянов.

В любом случае, MrStomak прав, впрочем как и всегда ;)
83 vi0
 
29.04.14
21:41
+(80) Вижу в документации, что  при автоматическом режиме у Постгреса и Оракла блокируются таблицы.

Я правильно понимаю, что это 1С их так ограниченно использует, что Оракл аналогичен файловой БД по способу блокирования?

http://its.1c.ru/db/v83doc#content:67:1:IssOgl2_9.3.2.Управляемыеблокировки
84 MrStomak
 
29.04.14
23:50
(83) Я думаю, это связано с особенностями блокировок у версионников на высоких уровнях изоляции. Вот выдержка из документации на PostgreSQL пункт 13.3.2: Row-level locks do not affect data querying; they block only writers to the same row.
85 MrStomak
 
30.04.14
00:07
(79) Да нет, именно ставит...
86 MrStomak
 
30.04.14
00:15
(82) Чувствую, где не отпишу - ты тут как тут, караулишь, контролируешь :)
87 su_mai
 
30.04.14
00:22
(0) Речь идет о транзакционных блокировках, действующих до окончания транзакции, в которой они вызваны.
88 su_mai
 
30.04.14
00:24
+(87) SQL Server Profiler Вам в помошь :)
или на крайняк, технологический журнал.
89 MKZM
 
30.04.14
01:47
(84) А какие блокировки у версионников?
90 MKZM
 
30.04.14
01:48
(84) Тут файерберд пытался блокировать, а меня спрашивают - "а что такое блокировка?"
91 vi0
 
30.04.14
09:21
(84) я к тому, что 1с юзает крутой оракл как файловую базу
и причина тут только в 1с, а не в оракле
вопрос в этом был
92 MM
 
30.04.14
10:42
(91) Причина в том, что автоматический режим не должен применяться с версионными СУБД, включая оракл. Он существует для совместимости со старыми конфигурациями.
93 MrStomak
 
30.04.14
12:20
(91) Я не очень понимаю выражения "юзать как файловую базу". Да, процедуры, триггеры, функции, пакеты не используются. Равно как и не используются возможности любой другой СУБД, работающей с 1С.
Всё многообразие типов данных, объектов - всё мимо.
Но связано всё это с тем, что прикладная логика зашивается в конфигурации и платформе и нет смысла переносить её в СУБД, которая решает только задачи чтения/записи. Иначе невозможно было бы поддерживать работу платформы на разных СУБД.
94 vi0
 
30.04.14
12:32
(93) это да
я о другом - о твоей фразе
> В автоматическом режиме вся таблица блокируется только при использовании СУБД-версионников
95 vi0
 
30.04.14
12:33
(92)
> автоматический режим не должен применяться с версионными СУБД
это официальная информация?
96 fisher
 
30.04.14
12:46
(75),(76) Я просил пример коллизий для случая, когда автоматический режим НЕ УСТАНАВЛИВАЕТ управляемые блокировки, а не когда он их НЕ ПРОВЕРЯЕТ. Ясен пень, что раз допускается совместное использование управляемых и автоматических блокировок, то транзакции в автоматическом режиме должны анализировать управляемые блокировки. Непонятно, нафига в автоматическом режиме УСТАНАВЛИВАТЬ управляемые блокировки.
97 MrStomak
 
30.04.14
14:00
(96) "то транзакции в автоматическом режиме должны анализировать управляемые блокировки"

Такой операции как "анализировать" не существует в прикладном решении. "Анализом" по таблице совместимости занимается менеджер блокировок СУБД и менеджер блокировок 1С, когда в них пытаются засунуть новую блокировку.

В случае, если в менеджер блокировок 1С устанавливать блокировку не будут, то и никого "анализа" не последует. СУБД скажет "на блокировку, всё ок" и будет лажа.
98 fisher
 
30.04.14
14:04
(97) Таки да, тупанул. Спасибо.
99 MM
 
30.04.14
14:17
(93) можно было хотя бы часть реализовать через хранимые процедуры, в 7.7 же они использовались иногда
(95) прямое следствие из факта (91)
100 vi0
 
30.04.14
14:19
(99) ну как логическое следствие это понятно
101 MM
 
30.04.14
14:25
(100) но поскольку новые конфигурации идут в управляемом режиме, то это для них не существенно. А старые надо адаптировать, это не особо сложно, раз уж хочется воспользоваться ораклом.
102 fisher
 
30.04.14
14:25
(99) 7.7 поддерживала только MSSQL. А 8-ка, на минуточку - четыре разных СУБД. Если немножко подумать головой - то это абсолютно правильное решение. Вкладываться в условиях кросс-платформенности в глубокую оптимизацию под конкретные СУБД - это немерянный головняк и экономический бесперспективняк.
103 MrStomak
 
30.04.14
14:36
(94) Тогда в этом 1С не причем. В версионниках нет возможности блокировать строки на чтение - это противоречит их версионной природе. А у 1с в автоматическом режиме нет возможности обеспечить управляемые блокировки на нужные строки. Поэтому там используется блокировка таблиц, иначе нельзя заставить читающую транзакцию ЖДАТЬ пока завершится запись.
104 MM
 
30.04.14
14:42
(102) всё равно под MS SQL платформа работает лучше, чем под остальными СУБД. Не думаю, что использование хранимых процедур считается ГЛУБОКОЙ оптимизацией.
105 fisher
 
30.04.14
14:47
(104) Ну а теперь считай затраты - это объекты метаданных, которыми надо управлять, целостность которых нужно поддерживать, обеспечивать работоспособность и совместимость в разных версиях MSSQL. Плюс реализация в разных СУБД - разная.
На поддержку этой лабуды нужно дополнительно немало нехилых спецов. И все равно воплей про "глюкавость" станет в разы больше, т.к. количество потенциальных источников глюкавости умножится.
106 fisher
 
30.04.14
14:52
Простой пример. Допустим, вынесут часть алгоритмов СКД с сервера приложений на уровень СУБД. Т.е. была одна реализация, а стало четыре. Каждую из которых сопровождают свои спецы. Дальше продолжать или не надо?
107 MM
 
30.04.14
14:59
(106) поддержка разных СУБД реализована в разных ДЛЛ, полагаю, что интерфейс для остальной части 1С у них максимально похожий. И их и так разрабатывают разные спецы.
Я как-то больше о механизме пересчёта итогов регистров думал, который выполняется при любой записи в него, так и просится в в виде триггера реализовать.
108 fisher
 
30.04.14
15:12
Мне нечего добавить к уже сказанному и лениво долго дискутировать об очевидных для меня вещах.
С наступающими!