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