|
А это правда, что ПодпискаНаСобытие....8.2 | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
ВалераОшкин
21.02.13
✎
22:36
|
А это правда, что в 8.2 ПодпискаНаСобытиеЗаписиДокумента вызывает транзакцию в режиме автоматической блокировки таблиц, не смотря на то, что конфигурация находится в управляемом режиме блокировок?
P.S. Мне недавно на одной авторитетной встрече так сказали. Может кто пояснить эту ситуацию? |
||||||||||
78
ВалераОшкин
22.02.13
✎
10:18
|
(75) Дорогой, я просто хочу навести тебя на мысль и получить ответы:
- а нафига мне знать про "Serializable или Repeatable Read" если транзакция в автоматическом режиме? - как это знание мне поможет в 1С в этом режиме блокировок? |
||||||||||
79
saaken
22.02.13
✎
10:19
|
(74) без СУБД разговор не имеет смысла
|
||||||||||
80
MrStomak
22.02.13
✎
10:20
|
(78) Да можно вообще ничего не знать - это твоё дело. Просто потом когда тебя спрашивают "что такое автоматический режим?" не надо нести ахинею про "это когда все таблицы блокируются всегда", говори тогда - я с СУБД не знаком, поэтому для меня, как для программиста, это режим, когда мне управляемые блокировки ставить не нужно - система сама обеспечивает целостность данных. Как она это делает мне неинтересно.
|
||||||||||
81
ВалераОшкин
22.02.13
✎
10:21
|
(80) нафига засирять себе мозг ненужными в ситуации (78) вещами?
|
||||||||||
82
MrStomak
22.02.13
✎
10:22
|
(81) Когда пишешь масштабируемые решения это необходимо. Например, в автоматическом режиме иногда нужно ставить "Для изменения" в запросе, чтобы повысить уровень блокировки до экслюзивного, чтобы не было взаимоблокировки. Чтобы понимать, зачем это нужно, надо понимать работу 1с на уровне изоляции транзакций в автоматическом режиме.
|
||||||||||
83
MrStomak
22.02.13
✎
10:24
|
(81) "Для изменения" это вообще явная установка исключительной блокировки, по сути даже в автоматическом режиме блокировками управлять приходится, иначе остатки контролировать не сможешь.
|
||||||||||
84
saaken
22.02.13
✎
10:24
|
(80) на разных данных одна и та же база работает по разному
|
||||||||||
85
ВалераОшкин
22.02.13
✎
10:26
|
(82) "Для Изменения" в автоблокировках используется как раз в том случае, если ты хочешь железобетонно заблокировать таблицу в режиме Serializable
|
||||||||||
86
MrStomak
22.02.13
✎
10:26
|
(84) Это очень общая фраза, с которой невозможно спорить и которая не несет смысла.
|
||||||||||
87
MrStomak
22.02.13
✎
10:27
|
(85) Блокировка накладывается исключительная или разделяемая, а не "Serializable"
|
||||||||||
88
ВалераОшкин
22.02.13
✎
10:27
|
+(85) вернее, записи таблицы, попавшие в запрос
|
||||||||||
89
MrStomak
22.02.13
✎
10:28
|
(85) И не всю таблицу, а записи, если СУБД так решит.
|
||||||||||
90
ВалераОшкин
22.02.13
✎
10:28
|
(87) да, Serializable и прочие аглицкие термины, отдельно от СУБД к 1С не применимы
|
||||||||||
91
ВалераОшкин
22.02.13
✎
10:28
|
(89) ---> (88)
|
||||||||||
92
MrStomak
22.02.13
✎
10:28
|
(88) А иногда - и всю таблицу, если СУБД решит что ресурсов для блокировки записей тратиться слишком много.
|
||||||||||
93
ВалераОшкин
22.02.13
✎
10:29
|
(92) ты когда разрабатываешь в 1С, каждый раз думаешь, что происходит в SQL?
|
||||||||||
94
MrStomak
22.02.13
✎
10:29
|
(90) Ты путаешь режим блокировки и уровень изоляций, ну как с тобой о чем-то спорить?
|
||||||||||
95
MrStomak
22.02.13
✎
10:29
|
(92) Ты не поверишь - да.
|
||||||||||
96
ВалераОшкин
22.02.13
✎
10:30
|
(94) ты со своим уровнем изоляций пытаешься затроллить меня на разговор о СУБД и уйти от платформы 1С
|
||||||||||
97
ВалераОшкин
22.02.13
✎
10:30
|
(95) от у тебя мозг наверно пухнет...
|
||||||||||
98
MrStomak
22.02.13
✎
10:31
|
(90) Ты путаешь уровень изоляции транзакций и режим блокировки. Это как бы очень демонстрирует знание вопроса.
|
||||||||||
99
MrStomak
22.02.13
✎
10:32
|
(96) Ты изначально начал говорить о СУБД, как только написал в топике про блокировки. Блокировки - это всегда связано с СУБД, не зная работы СУБД можно даже не соваться в блокировки.
|
||||||||||
100
ВалераОшкин
22.02.13
✎
10:32
|
(98) каким образом платформа 1С относится к понятию "уровень изоляции транзакции", если этим управляет не платформа, а СУБД?
|
||||||||||
101
MrStomak
22.02.13
✎
10:33
|
(96) Тем более, автоматический режим блокировок - это вообще абсолютно не связанная с 1С вещь, реализуемая именно СУБД, а не платформой, за исключением "Для изменения"
|
||||||||||
102
MrStomak
22.02.13
✎
10:36
|
(100) 1С инициирует транзакции для операций с базой. На 1С лежат задачи обеспечения логической целостности данных - смотри классическую задачу про контроль остатков. На 1С, как работающем с СУБД приложением, лежит задача обхода взаимоблокировок - делать захват ресурсов в одном порядке, накладывать максимальную блокировку сразу, а не повышать её уровень. Иначе 1С не сможет обеспечить корректную работу сотен пользователей. Это нужно знать программисту.
|
||||||||||
103
ВалераОшкин
22.02.13
✎
10:38
|
(102) Насколько я знаю, в 1С свой менеджер блокировок, который никоим образом не относится к управлению уровнями изоляции транзакций в СУБД.
Или ты опять скажешь, что я не прав? |
||||||||||
104
Fragster
гуру
22.02.13
✎
10:42
|
(103) ага
|
||||||||||
105
MrStomak
22.02.13
✎
10:43
|
(102) Есть свой менеджер блокировок, да. И что? Он нужен для того, чтобы в тех случаях, когда СУБД блокировку не поставить, поставить её самостоятельно. СУБД не будет ставить блокировки при чтении таблиц в транзакции на уровне Read comitted, но будет на уровне Repeatable Read, значит, если из логики работы нашей базы следует, что блокировка там нужна, это нужно делать самостоятельно - через менеджер блокировок. Не учитывать изоляции транзакций нельзя, т.к. блокировки СУБД накладывает в любом случае, нужно понимать в каком случае какие блокировки она наложит, чтобы средствами 1С обойти взаимоблокировки и чтобы обеспечивать целостность данных.
|
||||||||||
106
ВалераОшкин
22.02.13
✎
10:43
|
(104) тогда поясни, будь ласка :)
|
||||||||||
107
ВалераОшкин
22.02.13
✎
10:44
|
(105) тогда при чем тут "Для изменения" и уровень изоляции транзакций в СУБД?
|
||||||||||
108
MrStomak
22.02.13
✎
10:46
|
(107) "для изменения" - это средство обеспечить целостность данных и обойти взаимоблокировку путем повышения уровня блокировки, которую накладывает СУБД, средствами 1С
|
||||||||||
109
ВалераОшкин
22.02.13
✎
10:46
|
(108) Думаешь, что если в запросе ты написал "Для изменения", то СУБД наложит другой уровень изоляции?
|
||||||||||
110
ВалераОшкин
22.02.13
✎
10:48
|
+(109) ты можешь на этот вопрос ответить "Да" или "Нет"?
|
||||||||||
111
MrStomak
22.02.13
✎
10:48
|
(109) Это ты так думаешь. На самом деле СУБД повысит уровень блокировки до исключительного.
|
||||||||||
112
ВалераОшкин
22.02.13
✎
10:49
|
(111) ты уверен в том, что именно СУБД повысит уровень блокировки?
|
||||||||||
113
MrStomak
22.02.13
✎
10:50
|
(112) В случае с "Для изменения" - да.
|
||||||||||
114
ВалераОшкин
22.02.13
✎
10:50
|
(113) Т.е. ты утверждаешь, что встроенный в 1С менеджер блокировок влияет на уровни изоляции транзакций, которые выполняет СУБД?
|
||||||||||
115
MrStomak
22.02.13
✎
10:51
|
(114) Ты продолжаешь обнажать своё невежество. Менеджер блокировок используется в управляемом режиме. "Для изменения" - автоматический режим.
|
||||||||||
116
ВалераОшкин
22.02.13
✎
10:54
|
(115) Т.е. я пишу запрос и указываю в нем "Для изменения".
В СУБД возникает соответствующий уровень изоляции транзакций? А может все по-другому? Сервер приложения получает результат запроса от SQL и в результате запроса накладывает свои блокировки на записи? |
||||||||||
117
MrStomak
22.02.13
✎
10:54
|
(114) Ну и эта, на уровни изоляции транзакций не влияет и "Для изменения" - он влияет на уровень блокировки. Я тебе подскажу - их два: разделяемая и исключительная.
|
||||||||||
118
MrStomak
22.02.13
✎
10:55
|
(116) Прекрати немедленно нести чушь про смену уровня изоляций от конструкции "Для изменения".
|
||||||||||
119
ВалераОшкин
22.02.13
✎
10:55
|
+(116) Очень хочу, чтобы ты помог мне разобраться в моем невежестве. Особеннно вот в этом:
Сервер приложения получает результат запроса (в котором ДЛЯИЗМЕНЕНИЯ) от SQL и в результате запроса накладывает свои блокировки на записи или СУБД меняет уровень изоляций? |
||||||||||
120
MrStomak
22.02.13
✎
10:57
|
(119) Система транслирует Для изменения в "For update" на SQL, что вызовет на СУБД исключительную блокировку по записям.
|
||||||||||
121
ВалераОшкин
22.02.13
✎
10:58
|
(118) Имхо, я пытаюсь тебя понять и осмыслить свою чушь.
Пля буду, на курсах мне говорили, что режим изоляции транзакций СУБД никоим образом не относится к блокировкам, которые накладывает сама 1С в данных сервера приложений. |
||||||||||
122
MrStomak
22.02.13
✎
10:58
|
(119) Прекрати немедленно нести чушь про смену уровня изоляций от конструкции "Для изменения".
|
||||||||||
123
ВалераОшкин
22.02.13
✎
10:58
|
(112) Немедленно ответь мне на все вопросы
|
||||||||||
124
MrStomak
22.02.13
✎
10:59
|
(121) В управляемом режиме так и есть - блокировками управляем менеджер. При это блокировки на СУБД также присутствуют - любая запись делает блокировку на чтение.
|
||||||||||
125
MrStomak
22.02.13
✎
11:00
|
(124) собственно, для изменения именно поэтому и не работает в управляемом режиме.
|
||||||||||
126
ВалераОшкин
22.02.13
✎
11:00
|
(124) У нас разговор вообще-то шел про автоматический режим, а не про управляемый.
В свете управляемого режима, ДляИзменения тупо игнорируется платформой. |
||||||||||
127
ВалераОшкин
22.02.13
✎
11:02
|
(125) Т.е. ты хочешь сказать, что в автоматическом режиме, ДляИзменения передается напрямую в SQL и он, ориентируясь на это слово накладывает дополнительные блокировки?
|
||||||||||
128
MrStomak
22.02.13
✎
11:02
|
(126) В 8.0 был автоматический режим. В 8.0 не было менеджера блокировок вообще. Про какое управление блокировками на стороне 1С в автоматическом режиме ты говоришь?
|
||||||||||
129
saaken
22.02.13
✎
11:03
|
(126) не прав
|
||||||||||
130
MrStomak
22.02.13
✎
11:03
|
(127) Ты еще 10 раз спроси меня одно и тоже. Да, так и есть.
|
||||||||||
131
ВалераОшкин
22.02.13
✎
11:03
|
(130) ну ты сразу бы так ответил...
|
||||||||||
132
ВалераОшкин
22.02.13
✎
11:05
|
(130) тогда я не понимаю, как вяжется между собой (126) и утверждение в (129)?
|
||||||||||
133
MrStomak
22.02.13
✎
11:05
|
(131) Когда ты говоришь "Для изменения" заставляет менять уровень изоляций на СУБД - я не могу на такое ответить "Да"
|
||||||||||
134
ВалераОшкин
22.02.13
✎
11:06
|
(133) Ну если "ДляИзменения" передается на прямую в SQL и SQL накладывает блокировки на записи, то это должно существовать и в управляемом режиме и не зависеть от менеджера блокировок платформы.
Что-то тут не вяжется... Можешь пояснить? |
||||||||||
135
saaken
22.02.13
✎
11:07
|
(134) блокировка накладывается, но действует не до конца транзакции, а снимается после выполнения запроса
|
||||||||||
136
ВалераОшкин
22.02.13
✎
11:09
|
(135) Т.е. ДляИзменения работает и в управляемом режиме?
Почему у меня тогда в методичке запись, что применение "ДляИзменения" не несет в себе смысла в режиме управляемых блокировок? |
||||||||||
137
saaken
22.02.13
✎
11:10
|
(136) и даже вредна, блокирует то что не может удержать до момента записи
|
||||||||||
138
ВалераОшкин
22.02.13
✎
11:14
|
(137) вона оно как.
Видать преподаватель не знал четко и отделался общей фразой, что "применение "ДляИзменения" не несет в себе смысла в режиме управляемых блокировок". А я уже додумал, что оно игнорируется платформой. Спасибо. |
||||||||||
139
MrStomak
22.02.13
✎
11:19
|
(138) Тебя вводят в заблуждение - конструкция "Для изменения" не влияет в управляемом режиме, как минимум на сторону СУБД она тупо не передается.
|
||||||||||
140
MrStomak
22.02.13
✎
11:21
|
Запрос с "Для изменения" на стороне MS SQL 2008R2 в управляемом (1) и автоматическом (2) режимах:
SELECT T1._IDRRef FROM _Reference7 T1 SELECT T1._IDRRef FROM _Reference7 T1 WITH(REPEATABLEREAD, UPDLOCK) |
||||||||||
141
ВалераОшкин
22.02.13
✎
11:23
|
(140)
Спасибо. Значит все-таки "Для изменения" игнорируется платформой в управляемом режиме и передается в SQL в автоматическом режиме. |
||||||||||
142
ВалераОшкин
22.02.13
✎
11:24
|
+(141) А то уже хотел лезть и ДляИзменения вычищать :)
|
||||||||||
143
8vC1
22.02.13
✎
11:44
|
Подписка выполниться в транзакции. Если в транзакции не указывать про режим, то будет блокировка по умолчанию (автоматическая) не обращая внимание на то, что флажок в регистре стоит на управляемый режим.
|
||||||||||
144
8vC1
22.02.13
✎
11:45
|
Описано косвено в ЖКК.
|
||||||||||
145
ВалераОшкин
22.02.13
✎
11:49
|
(143) > Если в транзакции не указывать про режим, то будет блокировка по умолчанию (автоматическая)
Это неверное утверждение. |
||||||||||
146
ВалераОшкин
22.02.13
✎
11:51
|
+(145) Если ты записываешь документ, на котором "Управляемый режим", то транзакция начнется в управляемом режиме.
|
||||||||||
147
8vC1
22.02.13
✎
11:52
|
(145) То есть ты создал пост, чтобы доказать сам себе что тебя не справедливо слили с собеседования ?
|
||||||||||
148
ВалераОшкин
22.02.13
✎
11:56
|
(147) я создал этот пост для того, чтобы убедиться, что мои знания верны или узнать как правильно
|
||||||||||
149
8vC1
22.02.13
✎
11:57
|
(146) Ты там пишешь БлокировкаДанных
РежимБлокировкиДанных.Разделяемый или РежимБлокировкиДанных.Эксклюзивный. А подписка пихает твою транзакцию в свою внешнюю. |
||||||||||
150
ВалераОшкин
22.02.13
✎
11:58
|
(149) тогда проголосуй как правильно
Всю жизнь думал, что не подписка создает транзакцию.... |
||||||||||
151
ВалераОшкин
22.02.13
✎
12:00
|
+(150) а событие начала записи документа
|
||||||||||
152
ВалераОшкин
22.02.13
✎
12:01
|
(149) т.е. ты утверждаешь, что подписка на событие первична и она создает транзакцию?
|
||||||||||
153
8vC1
22.02.13
✎
12:04
|
(148) Ну вот на первом месте "мои знания верны". Признай уже наконец поражение. Это спец вопрос на который 99 процентов 1Сников не ответит, потому как вряд ли им это когда нибудь в работе пригодится и смысл которого посадить коллегу в лужу, доказав что он не так крут как тот кто спрашивает :)
|
||||||||||
154
MrStomak
22.02.13
✎
12:04
|
(143) Расскажи побольше про инициацию транзакций подписками и особенно про фразу "по умолчанию (автоматическая)".
|
||||||||||
155
MrStomak
22.02.13
✎
12:06
|
(146) Свойство документа не влияет на режим блокировок, если для конфигурации установлен "Управляемый".
|
||||||||||
156
Borteg
22.02.13
✎
12:06
|
мля не одного поста не понял, пошел читать)
|
||||||||||
157
8vC1
22.02.13
✎
12:07
|
(152) я тебе скопипастил на 1 странице из документации по платформе. Подписка создает свою транзакцию, внутри которой твоя управляемая. А в итоге будет тот режим который у транзакции подписки.
|
||||||||||
158
MrStomak
22.02.13
✎
12:09
|
(157) Какая подписка? Я так понимаю, речь про подписки типа "Перед записью"? Я проверял трассировкой - уровень read comitted во всех транзакциях.
|
||||||||||
159
MrStomak
22.02.13
✎
12:11
|
(157) Подписки вида "призаписи" или "припроведении" вообще не могут транзакцию начинать, так как выполняются внутри транзакции записи документа, а, как было сказано выше, фактически поддержки вложенных транзакций в 1С нет, всё выполняется в первой транзакции.
|
||||||||||
160
8vC1
22.02.13
✎
12:14
|
Или даже наоборот будет вложенной транзакция ПриЗаписи в твою управляемую блокировку, все равно общий эффект будет с тем режимом какой у транзакции подписки.
|
||||||||||
161
ВалераОшкин
22.02.13
✎
12:16
|
(157) На курсах утвердали, что платформа 1С не поддерживает вложенность транзакций. Транзакция всегда ОДНА.
В коде можно писать много уровней вложенности транзакций, но это игнорируется платформой и транзакция всегда ОДНА. |
||||||||||
162
MrStomak
22.02.13
✎
12:17
|
(161) Не игнорируется, там есть счетчик и менеджер блокировок отслеживает уровни, но на СУБД это всегда 1 транзакция.
|
||||||||||
163
ВалераОшкин
22.02.13
✎
12:18
|
(162) Запутался. Давай забудем про СУБД. В платформе транзакция ОДНА?
|
||||||||||
164
ВалераОшкин
22.02.13
✎
12:21
|
(159) А ПередЗаписьюСобытиеПодписки может транзакцию начинать?
|
||||||||||
165
Reset
22.02.13
✎
12:26
|
(163) Одна, одна.
У 8vС1 какая то cвоя 1С c внешними транзакциями |
||||||||||
166
ВалераОшкин
22.02.13
✎
12:26
|
(162)
НачатьТранзакцию() //Изменение данных №1 НачатьТранзакцию() //Изменение данных №2 ОтменитьТранзакцию() ЗафиксироватьТранзакцию() ЗафиксироватьТранзакцию() Утверждаешь, что, изменение данных №2 откатится? |
||||||||||
167
MrStomak
22.02.13
✎
12:27
|
(163) В платформе нет. Там есть транзакция и есть счетчик, показывающий уровень вложенности. Но мы не может говорить о транзакции в отрыве от СУБД, потому что весь смысл транзакций в неделимости операций с данными, а это уже, как ты понимаешь, на стороне СУБД происходит. Так как на СУБД транзакция одна, то откатить она сможет тоже только её.
|
||||||||||
168
ВалераОшкин
22.02.13
✎
12:27
|
(165) Спасибо :)
|
||||||||||
169
8vC1
22.02.13
✎
12:27
|
Да написано, что вложенные транзакции не поддерживаются. Тода хз почему так.
Написано, что в качестве источника в назначенный обработчик передается сам объект (набор записей) вызвавший событие; то есть, как я понимаю он уже должен быть записан в базу. |
||||||||||
170
MrStomak
22.02.13
✎
12:28
|
(166) Rollback - это действие СУБД, не 1С.
|
||||||||||
171
ВалераОшкин
22.02.13
✎
12:28
|
(167) Спасибо,пора составлять список людей, кому можно верить, а кому нет :)
|
||||||||||
172
MrStomak
22.02.13
✎
12:29
|
(169) Объект и набор записей - это не записи в БД, это мутабельные значения, которые существуют только в приложении 1С.
|
||||||||||
173
sanja26
22.02.13
✎
13:11
|
(172) ого, Леха, ну ты разошелся)
может и мне по роутеру объяснишь? |
||||||||||
174
MrStomak
22.02.13
✎
13:15
|
(173) Давай, я сегодня в боевом настрое!!:)
|
||||||||||
175
sanja26
22.02.13
✎
13:17
|
269 105 673
тим вьюер 7 |
||||||||||
176
sanja26
22.02.13
✎
13:18
|
2i52fa
|
||||||||||
177
8vC1
22.02.13
✎
14:40
|
Ну если трассировка выдала read commited значит управляемый режим однозначно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |