Имя: Пароль:
1C
 
Уровни изоляции и блокировки в MSSQL
,
0 paxan
 
04.10.19
13:35
Здравствуйте. Разбираюсь с управляемыми блокировками в 1с 8.3 Чем больше читаю, тем больше запутался) Просьба пояснить - уровни изоляции и виды блокировок на стороне сервера SQL это разные ведь вещи? Как-то на итс про это слишком упрощенно написано, а статьи в инете кишат ошибками даже в терминах, что еще больше запутывает. Может кто подскажет где лучше про это почитать? Уровень изоляции - он от чего зависит и кто его устанавливает?
1 ДенисЧ
 
04.10.19
13:39
Да, это разные вещи.
2 ДенисЧ
 
04.10.19
13:40
Уровень изоляции устанавливается в свойствах базы и может меняться в запросе.
3 unenu
 
04.10.19
13:46
4 H A D G E H O G s
 
04.10.19
13:58
(0) Уровни изоляции и блокировки - это разные, но связанные вещи.
5 Trier
 
04.10.19
14:10
(0) Управляемые блокировки - это блокировки на стороне 1С, управляемые менеджером блокировок. В случае, если срабатывает эта блокировка, запрос до СУБД даже не доходит.

Отдельно есть СУБД, где уровень изоляции напрямую зависит от платформы 1С. Так, в платформе 8.3 без совместимости с 8.2. MSSQL работает с уровнем изоляции read commited snapshot.
В зависимости от установленного уровня изоляции транзакций накладываются различные блокировки - например в указанном выше случае запросы в транзакции 1С не накладывают блокировки на СУБД.
6 paxan
 
04.10.19
16:13
А какие данные будут читаться в запросе, который выполняется в транзакции (1с 8.3), если при этом явно не установлены никакие управляемые блокировки? Попадут только завершенные транзакции или будет грязное чтение?
7 paxan
 
04.10.19
16:19
(2) Можно чуть подробней про то, что означает "уровень изоляции может менять в запросе"? Я не знаток особый SQL..  Я правильно понимаю, что запрос отправляемый с 1с в СУБД кроме указания что собственно мы хотим получить также передает это самый уровень изоляции который мы хотим поставить. Это имеется ввиду?
8 H A D G E H O G s
 
04.10.19
16:47
(6) Только завершенные
9 ДенисЧ
 
04.10.19
16:57
(7) " Можно чуть подробней про то, что означает "уровень изоляции может менять в запросе"?"

SELECT * FROM MyTable (NOLOCK) - поменяли уровень изоляции для данного запроса.
10 ДенисЧ
 
04.10.19
16:57
(6) Грязного не будет.
11 paxan
 
04.10.19
17:22
Спасибо за всем за ответы! Прочитал про уровни изоляции на спецфорумах по скулю, в частности про уровень "READ COMMITTED", с которым кая я понял и работает 8.3. Становится потихоньку понятно почему при использовании этого уровня и нужны управляемые блокировки на стороне 1с.
Как я понял при этом уровне изоляции читаются уже завершенные транзакции, т.е грязного чтения то не будет, но блокировка на запись снимается СРАЗУ после выполнения запроса пусть он и в транзакции, и это самое главное (а не до конца транзакции как при авто), поэтому далее в продолжении транзакции мы не можем гарантировать неповторяемого чтения и возможны фантомы, если со стороны 1с не поставить "забор" в виде дополнительных управляемых блокировок, чтобы если сработала упр. блокировка на стороне 1с запрос до СУБД не доходил. Просьба поправить, если не так )
12 paxan
 
04.10.19
17:33
Добавлю, что по сути "уровень изоляции" это описание того, что со стороны СУБД разрешено с данными, прочитанными/записанными в запросе и как именно (сразу после выполнения запроса или до окончания транзакции).
13 Sapiens_bru
 
04.10.19
17:51
(11) Да, ты прав.
Но и Read Commited это не плохо. В автоматическом режиме блокировок вместо него был Repetable Read, который как-раз не отпускал S блокировку до конца транзакции. Но это порождало дополнительные блокировки. Например считал ты в транзакции остатки товаров и ещё зачем-то считал цены номенклатуры по этим товарам - repetable read поставит S блокировки на ВСЕ таблицы что были в запросах в транзакции. Часто ошибаются, думая что блокировки это ключевое слово ДЛЯ ИЗМЕНЕНИЯ, но это не так. ДЛЯ ИЗМЕНЕНИЯ ставит на считанные таблицы U блокировку вместо S.

Переход на управляемые блокировки дал возможность блокировать именно то что надо, избегая блокировок лишних таблиц.
14 H A D G E H O G s
 
04.10.19
17:57
(13) "Переход на управляемые блокировки дал возможность блокировать именно то что надо, избегая блокировок лишних таблиц."

Расскажи это Фузиновцам.
15 Cyberhawk
 
04.10.19
18:20
(5) "например в указанном выше случае запросы в транзакции 1С не накладывают блокировки на СУБД" // Ошибаешься
16 Cyberhawk
 
04.10.19
18:21
+(15) Хотя... лень накатила
17 rphosts
 
04.10.19
18:23
(14) у тебя просто на них аллергия. И да, у них нет реально крупных внедрений, похоже, поэтому нет смысла думать о многом.
18 rsv
 
04.10.19
20:59
(0) "Спасибо за всем за ответы! Прочитал про уровни изоляции на спецфорумах по скулю, в частности про уровень "READ COMMITTED", с которым кая я понял и работает 8.3 "

Поставте в свойствах базы режим  автоматический - и будет другая история.

Уровни изоляции - это уровни согласованности данных . А способы достижения  этих уровней -  либо блокировки либо версии.
19 Bro
 
04.10.19
21:02
(14) фузионцы знают такую штуку как версионники.
20 Bro
 
04.10.19
21:04
(17) спросите у tada про крупные внедрения. Он нас не любит, но думаю даже при этом отрицать не будет
21 rsv
 
04.10.19
21:04
как достигаются  требования ansi блокировками или версиями .... главное чтобы достигались.
22 Bro
 
04.10.19
21:05
(18) А еше postgresql поставьте при этом. Совсем весело будет.
23 rsv
 
04.10.19
21:09
(22) без разницы  какая субд - поставили автомат в свойствах   значит поедет serializable . как будет обеспечивать это субд без разницы.
24 Bro
 
04.10.19
21:09
(21) версиями читатель не блокирует писателя. Что на порядок повышает масштабируемость.
25 Bro
 
04.10.19
21:11
(23) вы документацию вообще читали. В версионниках 1с таблицы блокирует целиком. То есть их логику serializable не использует. Хотя может что то изменилось в этом плане.
26 rsv
 
04.10.19
21:12
поставили управляемые в свойствах - поехал READ COMMITTED плюс стал доступным прикладной механизм 1С управляемые блокировки
27 Bro
 
04.10.19
21:20
(26) и? Вы же написали как это будет обеспечивать СУБД без разницы. Когда вы ставите автоматические блокировки, никакой serializable в версионниках не включается.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.