Курс по Оптимизации 1С – Занятие №9
В рамках этого занятия необходимо изучить следующие материалы.
Модуль 3. Причины медленной работы
- Глава 8. Анализ причин медленной работы и оптимизация системы
- Основные сведения о транзакциях
- Объектные блокировки
- Уровни изоляции и проблемы параллельной работы
- Автоматические и управляемые блокировки
- Особенности использования режимов блокировки
Практические задания
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (356):
Комментарии закрыты
Андрей, подскажите, пожалуйста, по поводу вложенных явных и неявных транзакций. Мы знаем, что вложенных явных транзакций не бывает. А если внутри явной транзакции фиксируется неявная, то явная транзакция тоже фиксируется или нет? Имеет ли смысл проведение документов делать в явной транзакции, чтобы сократить время записи?
…
(текст комментария доступен только участникам Мастер-группы)
Можно ли по технологическому журналу отловить эскалацию на управляемых блокировках и на блокировках субд?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
Вопрос про автоматический режим управления блокировками и СУБД-версионники. В курсе говорится, что при такой схеме минимальная гранулярность блокировок – таблица, и уровень изоляции транзакций – Read Committed. Но как такое сочетание спасает от отрицательных остатков? Ведь при Read Committed S-блокировка снимается сразу после чтения данных, т.е. таблица освобождается, и ее может прочитать другая транзакция.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день.
Сколько примерно весит снимок, формируемый при использовании RCSI? Скажем, если база 100 Гб? Как долго он хранится? До конца транзакции?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте! Помогите пожалуйста прояснить вопрос: Открывает ли неявную вложенную транзакцию использование скобок Попытка…КонецПопытки внутри транзакции или нет? Заранее спасибо!
…
(текст комментария доступен только участникам Мастер-группы)
Конфигурация переводится на управляемые блокировки, для нее задается Автоматический и управляемый режим. Есть документ, который при проведении двигает регистр остатков, но ПередЗаписью() документ создает либо перезаписывает элементы справочника, ссылки на которые хранятся в табличной части документа. Для документа, регистра и справочника ставим управляемый режим. Табличная часть документа имеет две колонки: Код -тип строка (код нового или уже созданного элемента), Ссылка на элемент справочника. Помогите оценить “риски” данной ситуации.
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо. Перевести все сразу не получается – не хватает людских ресурсов. Просто переключить режим не получится-есть хитрые документы с контролем остатков.
При решении данной схемы выявилась проблема чтения фантомов. В одной сессии создается документ Документ1, который в свою очередь создает внутри транзакции записи документа элемент справочника Справочник1, транзакция не завершена. В это время во второй сессии в списке справочника появляется этот элемент Справочник1. При выборе этого элемента во второй сессии появляется сообщение о конфликте блокировок на уровне СУБД. Это понятно. Но вот как сделать, чтобы фантомы не считывались во второй сессии? Если только ставить управляемую разделяемую блокировку при чтении справочника во второй сессии, но это происходит в форме документа, странновато… Что я делаю/понимаю не так? Платформа 8.2.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте!
В курсе говорится что уровень изоляции READ UNCOMMITTED используется только при чтении “вне транзакции”.
То что “вне транзакции” в взято кавычки говорит о том, что все-таки READ UNCOMMITTED используется в транзакции или нет. Я интересуюсь потому что описан случай как на экзамене спросили “Возможна ли транзакция в динамическом списке?”, на что человек естественно ответил “НЕТ” и получил минус. С помощью профайлера решил глянуть что происходит при формировании отчета и открытии динамического списка в упр. режиме. При формировании отчета есть строка “SET TRANSACTION ISOLATION LEVEL READ COMMITTED” при открытии динамического списка строки SET TRANSACTION не нашел.
Вопросов получается сразу несколько.
1) “Возможна ли транзакция в динамическом списке?”
2) Почему при формировании отчета есть установка уровня изоляции, а с динамическим списком такого не наблюдается?
3) Почему при формировании отчета есть строка “SET TRANSACTION ISOLATION LEVEL READ COMMITTED” а не READ UNCOMMITTED?
4) Все-таки READ UNCOMMITTED используется только при чтении “вне транзакции” или в транзакции.
Заранее спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, обратил внимание что платформа 1С для индексов устанавливает возможность использования блокировки строк и страниц (см. вложение). Для каких целей используется возможность блокировки страниц (Use page locks)?
Если для индекса установить оба флага то при экскалации блокировки с уровня строки будет заблокирована страница или таблица?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, провожу эксперимент.
Среда – 8.2, конфигурация с курса, совместимости нет, управляемый режим.
Оперативно провожу две реализации с пересекающимися данными (второй документ создан копированием).
Перевел документ и РН ОстаткиТоваров в управляемый режим, разделитель итогов включен и в конфигураторе и в предприятии, явных управляемых блокировок нет, св-во блокировать для изменения не используется.
Транзакция 1 – ставлю остановку после “Движения.ОстаткиТоваров.Записать();”.
Транзакция 2 – провожу второй документ.
Документ во второй транзакции провелся.
Тран.1 – устанавливает эксклюзивную блокировку 1С на таблицу движений(период(месяц)+регистратор+номер строки), затем устанавливает эксклюзивную блокировку на субд по кластерному индексу на таблицу движений (аналогично 1С блокировке). После, устанавливает эксклюзивную 1С блокировку на таблицу итогов (период(месяц)+набор измерений+splitter), на субд аналогично.
Тран.2 – делает аналогичные действия но с другим значением сплиттера и из за этого документ проводится.
Я правильно сделал вывод почему документ в транзакции 2 провелся успешно?
…
(текст комментария доступен только участникам Мастер-группы)
Настроил ТЖ на сбор всех событий TLock.
Если включен разделитель итогов то устанавливается следующая управляемая блокировка для транзакции 2:
Пространство – AccumRg18.DIMS
Тип блокировки – X
Period=[T”20151001000000″:+] Splitter=1 Fld19=11:955e080027c5281d11e2fba6ef8f8610 Fld20=7:a779080027c5281d11e2df19ad3b78a8 Fld404=396:00000000000000000000000000000000
Если выключить разделить итогов то значение сплиттера для обоих транзакций будет 0, от сюда и ожидание на блокировке 1С.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день, Андрей.
Выполняю следующие действия: провожу документ “Продажа” в конфигурации курса. Режим управления блокировкой данных в свойствах конф. – управляемый.В конфигураторе поставила точку останова в процедуре “Обработка проведения” модуля документа “Продажа”. В первом сеансе провожу документ, останавливаюсь в конфигураторе. Во втором сеансе провожу второй документ “Продажа”, у которого Контрагент, Склад и Номенклатура совпадают с данными документа в первом сеансе. Документ проводится и списывает товар. Почему так происходит? В видео 46 и 56 сказано, что неявные управляемые блокировки устанавливаются автоматически при любом изменении данных (например, проведении документов). Блокируются данные, указанные в движениях документа – в этих двух документах данные одинаковые. Прочитала комментарии к данной теме и в одном из них вы писали, что:
> В каких случаях неявная управляемая блокировка сработает наверняка
В уроке все было сказано:
1. при изменении данных, исключительная блокировка до конца транзакции
При проведении первый документ установил исключительную блокировку, транзакция еще не завершена. Почему провелся второй документ, ведь исключительные блокировки несовместимы?
Что я не учла?
…
(текст комментария доступен только участникам Мастер-группы)
Тоже столкнулся с этим. Потом дошло, что если документ перепроводить, а не проводить заново или отменять проведение, то его движения не изменяются, поэтому блокировка не накладывается. Платформа 8.3.6.2100.
Установка блокировки по 2м товарам и 2м складам
// Вариант 1 – из курса
ЭлементБлокировки = Блокировка.Добавить(“РегистрНакопления.ОстаткиТоваров”);
ЭлементБлокировки.ИсточникДанных = ТаблицаТовары; // Стул, Кресло
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(“Товар”, “Товар”);
ЭлементБлокировки.УстановитьЗначение(“Склад”, СсылкаОсновной); // Основной
ЭлементБлокировки2 = Блокировка.Добавить(“РегистрНакопления.ОстаткиТоваров”);
ЭлементБлокировки2.ИсточникДанных = ТаблицаТовары; // Стул, Кресло
ЭлементБлокировки2.ИспользоватьИзИсточникаДанных(“Товар”, “Товар”);
ЭлементБлокировки2.УстановитьЗначение(“Склад”, СсылкаРозничный); // Розничный
// Вариант 2
ЭлементБлокировки = Блокировка.Добавить(“РегистрНакопления.ОстаткиТоваров”);
ЭлементБлокировки.ИсточникДанных = ТаблицаТовары; // Стул, Кресло
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(“Товар”, “Товар”);
ЭлементБлокировки.ИсточникДанных = ТаблицаСклады; // Основной, Розничный
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(“Склад”, “Склад”);
При использовании варианта 2 в итоге заблокируются все товары по 2м складам или 2 товара по всем складам?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, я правильно понимаю, если у конфигурации поставить режим “Автоматический и управляемый”, а для отдельных объектов метаданных – “Управляемый”, то для этих объектов будут создаваться неявные блокировки?
…
(текст комментария доступен только участникам Мастер-группы)
Немного запутался по уровням изоляции. Я верно понял:
Уровни изоляции являются термином СУБД и существуют только в СУБД?
Когда две транзакции читают остаток = 1 [в управляемом режиме без явных управляемых блокировок], то S-блокировка, устанавливается на уровне СУБД и снимается после чтения (уровень изоляции READ COMMITTED), а на уровне 1С ничего не происходит?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день, возник вопрос по управляемым блокировкам.
Что будет заблокировано Управляемой блокировкой для объектных и не объектных сущностей?
Есть ли какая нибуть таблица по объектам метаданных?
Если ли какие нибуть возможности для отладки по аналогии например с профайлером для транзакционных блокировок субд?
…
(текст комментария доступен только участникам Мастер-группы)
В разделе взаимоблокировок приведен пример блокировки при включенном параллелизме (max degree of parallelism 1).
Правильно ли я понял что запрос заблокировал сам себя? Если да то почему?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, а разные потоки не могут обращаться к одним и тем же ресурсам с несовместимыми режимами блокировки? Те в терминах урока это будет два пользователя, верно?
…
(текст комментария доступен только участникам Мастер-группы)