#0
by vi0
Ищу подтверждения своего понимания SNAPSHOT в 1С 8.3 Исходя из документации MSDN вижу, что чтобы включить уровень изоляции транзакции "Read committed snapshot" достаточно выполнить инструкцию: ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT ON и не требуется выполнять ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON Это также подтверждают тесты, которые я делал в SQL Server, а также тот момент, что 1С 8.3 при создании новой базы выполняет инструкцию ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT On WITH ROLLBACK IMMEDIATE и не выполняет инструкцию ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON Но в некоторых статьях по 1С эти инструкции всегда идут парой. Насколько я понимаю, инструкция ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON имеет другое назначение и оно описано в документации MSDN. ВОПРОС: Может кто нибудь сказать что _для 1С_ требуется SET ALLOW_SNAPSHOT_ISOLATION ON и для чего именно?
#0
by vi0
Ищу подтверждения своего понимания SNAPSHOT в 1С 8.3 Исходя из документации MSDN вижу, что чтобы включить уровень изоляции транзакции "Read committed snapshot" достаточно выполнить инструкцию: ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT ON и не требуется выполнять ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON Это также подтверждают тесты, которые я делал в SQL Server, а также тот момент, что 1С 8.3 при создании новой базы выполняет инструкцию ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT On WITH ROLLBACK IMMEDIATE и не выполняет инструкцию ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON Но в некоторых статьях по 1С эти инструкции всегда идут парой. Насколько я понимаю, инструкция ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON имеет другое назначение и оно описано в документации MSDN. ВОПРОС: Может кто нибудь сказать что _для 1С_ требуется SET ALLOW_SNAPSHOT_ISOLATION ON и для чего именно?
#2
by Torquader
Так вы хотите изоляцию по подтверждённым на момент запуска ? Что происходит потом, когда кто-то другой подтверждает параллельную транзакцию ?
#3
by vi0
Я хочу уровень изоляции транзакции "Read committed snapshot". Т.е. тот, который предлагает 1С 8.3
#5
by Torquader
В общем, SET ALLOW_SNAPSHOT_ISOLATION ON включает сохранение версий строк во временной базе TEMPDB. Данные в транзакции "замораживаются" на момент её начала. Поэтому, если в параллельной транзакции будет попытка сделать COMMIT уже считанных данной транзакцией данных, то произойдёт ошибка транзакции.
#7
by Torquader
SET READ_COMMITTED_SNAPSHOT ON включает доступ к версиям по умолчанию READ_COMMITED.
#9
by Torquader
Для 1С лучше всего обеспечивать режим транзакций REPEATABLE READ, так как это гарантирует правильность выполнения расчётов.
#11
by Torquader
Там написано, что включение двух этих режимов приводит к блокировке на уровне таблиц. То есть, вполне логично, что инструкция не выполняется при работе с управляемыми блокировками.
#15
by vi0
если ты про эту строку "For the READ_COMMITTED_SNAPSHOT and ALLOW_SNAPSHOT_ISOLATION levels, the read operations acquire only the Schema Stability (Sch-S) table level locks. It does not lock any pages or rows." То здесь говорится что выполняется только блокировка схемы, если правильно понял. И как раз это позволяет уменьшить блокировки в базе.
#16
by vi0
это одна из статей про которые я говорил мне интересно для чего авторы используют SET ALLOW_SNAPSHOT_ISOLATION ON
#20
by vi0
Попробую акцентировать еще раз на своем вопросе: В контексте платформы 1С, не важно вручную для 8.2 или как то иначе для 8.3 требуется ли выполнение SET ALLOW_SNAPSHOT_ISOLATION ON если требуется то зачем?
#22
by vi0
еще на всякий случай добавлю я понимаю для чего нужна инструкция SET ALLOW_SNAPSHOT_ISOLATION ON
#23
by Torquader
Включение версионирования в 1С приводит к тому, что разные сеансы могут видеть разные данные (так как изменения происходили в разное время), и, как результат, делать неправильные вычисления. Если версионирования нет, то кто-то видит данные, а кто-то ожидает (в блокировке) пока они будут видны.
#25
by Torquader
Ну, вот видишь, ты уже полностью подошёл к мысли, что всё важное и нужное надо искать самому.
#27
by vi0
дело в том, что эта тема касается именно 1с я видел хорошие обсуждения на форуме sql, но это в контексте SQL Server, здесь вопрос именно по платформе 1с как вообще обстоит с этими инструкциями я понимаю
#28
by vi0
еще раз в статьях про ручной перевод конф 8.2 на версионник пишут, что нужно выполнить: ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON я вижу, что достаточно выполнить ALTER DATABASE ИмяБазы SET READ_COMMITTED_SNAPSHOT ON и именно это делает платформа 8.3 при создании базы
#29
by Torquader
Проведи эксперимент на тестовой базе и посмотри, что происходит. Результат желательно изложить здесь.
#33
by vi0
если кратко, то это способ реализации многопользовательской работы в БД, где в случае параллельность достигается не блокированием изменяемых данных, а созданием своей версии для каждой читающей транзакции (может быть не совсем для каждой..)
#38
by vi0
документация говорит, что ALTER DATABASE ИмяБазы SET ALLOW_SNAPSHOT_ISOLATION ON требуется для уровня изоляции транзакции SNAPSHOT т.е. когда используется инструкция SET TRANSACTION ISOLATION LEVEL SNAPSHOT но я не вижу, чтобы она в 1С использовалась
#42
by floody
если для вас это такой животрепещущий вопрос, то может быть вам спросить об этом например славу гилева..
#43
by Федя Тяпкин
кажется в книжке по эксперту было подробное описание режимов. в каких версиях какой по умолчанию и на что влияют.
#46
by vde69
зачем тебе это???? на сколько я понял фишка snapshot это то что внутри сеанса который начал транзакцию ты при чтении получаешь данные которые были ДО начала транзакции... то есть запрет грязного чтения даже внутри транзакции.... для 1с такой уровень изоляции в обячной работе нельзя устанавлитать, по тому как в этом случае внутри модуля проведения ты не будешь иметь доступа к новым движениям ...
#48
by Леша1с
"как вообще обстоит с этими инструкциями я понимаю" суть в том, что никто не понимает, как, каким образом, и когда это будет реализовано у 1С.
#49
by Леша1с
"это майкрософт документация, не 1с." у 1С как-бы нет своей СУБД... Десятилетиями использует SQL.
#51
by Torquader
На самом деле, там если всё правильно настроить, то никто не получит то, что было после - а при попытке фиксации транзакции, будет её откат. Весь вопрос ещё в том, что бывают ReadOnly транзакции, которые данные не изменяют. В случае snapshot мы выключаем какие-либо блокировки базы транзакциями, только читающими данные, так как они радостно читают свой snapshot и для отчётов, например, это даже лучше, так как весь отчёт снимается на какой-то один момент времени, а не как бог на душу положит.
#52
by Леша1с
"ты при чтении получаешь данные которые были ДО начала транзакции" вы не то что-то написали. Пока транзакция не закончена - данные так и остаются в "исходном" (до транзакции) состоянии. Суть в том, что методом создания снапшота на уровне СУБД (не 1С!!!!! забудьте, это уровень СУБД, SQL и MS) обходится блокировка таблиц, по которым выполняется транзакция/
#54
by Torquader
Просто, если такой режим в транзакции обновления данных, то можно получить совсем не то, что ожидали - особенно, когда оба сеанса одновременно обновляют данные.
#55
by Леша1с
" по тому как в этом случае внутри модуля проведения ты не будешь иметь доступа к новым движениям ..." можно предположить, что сейчас в 1С мы имеем доступ к данным (к движениям) ВНУТРИ транзакции?
#56
by Леша1с
" по тому как в этом случае внутри модуля проведения ты не будешь иметь доступа к новым движениям ..." сныпшот не работает "на запись". Это сугубо "для чтения". А для чтения - разницы никакой: сеанс прочитал данные, которые через секунду (10 сек, час, день) будут изменены.
#57
by Леша1с
*ответ на "то можно получить совсем не то, что ожидали - особенно, когда оба сеанса одновременно обновляют данные." *снапшот
#58
by Torquader
Так если мы включаем уровень изоляции транзакций, то они могут писать данные в таблице, и не встречать блокировок при этом, блокировка встречается уже при фиксации транзакции.
#59
by hhhh
она использует SQL в урезанной форме. Поэтому глупо брать документацию c сайта майкрософт.
#60
by Леша1с
+ 53 в очереди блокировок. снапшотом обходят сугубо блокировки при чтении, и не более того.
#61
by Torquader
Вы ещё вспомните, как ведётся работа в 1С - сначала мы запросом получаем данные, а потом начинаем что-то куда-то записывать по данным этого запроса.
#62
by Леша1с
о том и речь: - 1С не использует SQL и на 10% - никто не знает, как 1С реализует "снапшот" (возьмет "обрезку", или подключится к "полнрой реализации" снапшота) - гадать про 1С - дело неблагодарное, но глупое.
#63
by Леша1с
" а потом начинаем что-то куда-то записывать по данным этого запроса." вот когда будете писать, то будете писать уже на "общих" основаниях со всеми блокировками и очередями записи.
#64
by Torquader
Так это понятно, только данные-то могут поменяться, если на стадии чтения мы не встретили блокировки.
#65
by Леша1с
+ 63 если имеете в виду, что получили данные чтением с помощью снапшота, приняли решение на их основе писать что-то, а в это время другая параллельная транзакция уже изменила именно эти данные (которые прочли, или которые собрались писать) - то просто будет откат таких ваших действий. Предполагаю, что в MS именно так и реализовано - чтение снапшота и последующая запись "туда же", где уже все модифицировала транзакция, параллеьная снапшоту. Это все-таки не 1С.
#66
by Torquader
Если в одной транзакции - то да - будет откат. Только вот при работе в 1С вместо записи получать откаты - так это вместо работы только жмаканье кнопок на удачу и останется.
#67
by Леша1с
+ 65 а вот, боюсь, в 1С будет реализован именно вариант "без контроля", в результате получим полностью неуправляемыей механизм, который будет писать данные на "основе снапшота", а не реального положенрия с учетом прошедших изменений.
#69
by Torquader
Особенно хорошо, когда код разбит на несколько транзакций - одна завершилась - другая - откатилась, и теперь нам нужно откатить (точнее отыграть назад) предыдущую - а её уже кто-то "перекрыл" - и всё. В результате работы алгоритма данные в базе пришли в "нестабильное состояние".
#70
by Леша1с
"когда код разбит на несколько транзакций" именно "песочницу" (дискретное выполнение кода) 1С не может реализовать, уже видимо, никогда.
#71
by Леша1с
"В результате работы алгоритма данные в базе пришли в "нестабильное состояние"." прсото сошлются на "неактуальность механизмов снапшота" и по-тихоньку сольют тему в новых релизах, попутно направив внимание 1с-ников на новые перделки-зазеркалки.
#73
by Torquader
Так это никто реализовать не может, в принципе - так как нужно предусматривать возможность отмены непоследней транзакции без последствий.
#75
by Torquader
Он включается командой при начале транзакции, а вот когда 1С эту команду даёт - это уже её (1С) дело.
#76
by vi0
Транзакция начинается или явно программистом или неявно при записи - тут все прозрачно. И до записи/считывания нужно сначала пройти сквозь слой управляемых блокировок.
#77
by Torquader
Это всё понятно, просто 1С, открывая соединение к базе данных, "устанавливает правила игры", то есть делает некоторые установки - что и как она будет читать. Весь вопрос в том - насколько они документированы и насколько SQL-сервер полностью их понимает и обеспечивает правильное функционирование.
#78
by vi0
приведи, пожалуйста, пример, когда > 1С, открывая соединение к базе данных, "устанавливает правила игры", то есть делает некоторые установки
#79
by Torquader
Так лови параметры подключения - там всё должно быть указано, если что-то не менялось, то будет то, что по-умолчанию установлено на сервере.
#80
by Леша1с
любое обращение к SQL - это установка 1С своих правил (отсуствие каких-либо правил - тоже "установка правил игры").
#82
by vi0
так можно сказать про любого разработчика SQL, что он устанавливает "свои правила игры" взаимодействуя с SQL
#83
by Torquader
Ну а что - не так что-ли ? Все режимы SQL прекрасно задокументированы - выбирай любой, только потом не обижайся, что работает так, как написано.
#84
by Infsams654
А у тебя к чему? 1С сделала под MS SQL, Oracle и т.д? В чем проблемы ? Какая-то реализация под эти СУБД все-таки должна быть, даже, если тебя не устраивает. Забей..
#88
by Леша1с
" так можно сказать про любого разработчика SQL" можно. Только, в отличие от 1С-разработчиков, они все строго документируют, и мы можем прекрасно посмотреть на той же MSDN, что почем.
#90
by Леша1с
мне, как и всем пытающимся разобраться в этой свалке, не хватает внятного описания - что, зачем и почему. Вот они написали, что "сделали снапшот". Зачем? Почему именно так?
#92
by vi0
возможно минимального описания от них не помешало бы но они поддерживают несколько субд, и в каждой свои особенности реализации уровней изоляции транкций в 8.2 был просто Read Commited для SQL Server - все можно посмотреть было в документации MS сейчас расширили до Read Commited Snapshot - тоже все написано в онлайне и книгах
#94
by Леша1с
"но они поддерживают несколько субд" я бы сказал, что поддерживают одну (MS), а в остальных "играются" ))
#97
by mistеr
Насколько я понимаю, READ_COMMITTED_SNAPSHOT без ALLOW_SNAPSHOT_ISOLATION работать не будет. Последняя опция более глобальная. Если 1С ее не устанавливает, вероятно она уже включена.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Черный список файлов программных лицензий 1С
- ЗУП 3.0 : как вывести подписи в АнализНачисленийИУдержаний
- 25 и 26 счета не закрываются.
- не проводятся документы при обмене из 1с 8 в 7.7
- УПП - расчет среднесписочной численности
- Зачем: Лицензии раздает сервер 1с, но при этом используется и менеджер лицензий?
- ошибка при выводе результата запроса в таблицу значения((
- Какие существуют алгоритмы подсчета движущихся объектов?
- Проверка остатков после проведения
- Вертикальная командная панель в УФ
- Ошибка. Блокировка
- Контроль остатков и резервов в УНФ
- ЭДО ЮЗД. Куча провайдеров, а хотелось бы хранить документы все в одном как быть?
- Вопросы по атестации 1С:Специалист
- Как делать Дефрагментацию и обновление статистики MS SQL 2008
- Начисление страховых взносов в УПП
- Корректировка реализации при особом переходе права собственности Бух 3.0
- ЗУП 2.5.79.4. Выгрузка РСВ-1, ошибка загрузки РСВ документа в ПТК АСВ
- как перенести реквизит из формы в табличную часть через конвертацию данных?
- Пропали сальдо после обновления в БГУ 8,2