Влияние режима удаления движений на производительность

03.11.13

База данных - HighLoad оптимизация

Статья навеяна одним хитрым вопросом, который иногда задают на экзамене 1С Эксперт. Вопрос звучит примерно так: «Чем опасен режим удаления движений «Удалять автоматически?»

Возможно, для кого-то эта статья покажется творчеством капитана очевидность, тем не менее, есть много людей, которые затрудняются ответить на этот вопрос.

А все на самом деле очень просто.

Если у документа установлен режим удаления движений «Удалять автоматически», то при перепроведении этого документа, еще до выполнения процедуры ОбработкаПроведения, движения будут удалены.

Теперь вспомним теорию, что бы удалить данные необходимо наложить X блокировку, а она как известно, держится до конца транзакции.

Получается, что мы блокируем данные в самом начале транзакции, что негативно сказывается на параллельности работы пользователей.

Рассмотрим пример.

Допустим у нас есть некий документ, который делает движения по одному регистру.

При проведении документа сначала выполняются различные сложные вычисления и прочие действия, которые занимают значительное время. В конце процедуры проведения, происходит запись движений, а контроль остатков выполняется уже после записи в модуле набора записей регистра.

Теперь давайте посмотрим, как будет меняться поведение системы, если мы будем использовать различные режимы удаления движений, при перепроведении этого документа.

Оранжевым цветом, закрашены этапы, на которых данные буду блокированы.

На схеме видно, что во втором случае, данные будут заблокированы на гораздо меньшее время, чем в первом. А чем меньше длится блокировка, тем меньше вероятность возникновения проблем при многопользовательской работе.

автоматическое удаление движений

См. также

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9260    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5097    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7573    vasilev2015    20    

42

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12422    241    ZAOSTG    80    

115

HighLoad оптимизация Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5669    glassman    18    

40

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    14018    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. peterxx 23 27.09.13 09:21 Сейчас в теме
Да почему бы и нет. Ликбез нужен, без него никак.
4. awk 744 30.09.13 18:57 Сейчас в теме
(1) peterxx, Нужен, но тема не до конца раскрыта. Была бы раскрыта вопроса (2) не было бы.
2. vvr908 449 29.09.13 13:35 Сейчас в теме
В таком случае возникает ламерский вопрос - а зачем вообще нужен режим "Удалять автоматически"?
3. webester 26 30.09.13 07:20 Сейчас в теме
(2) Потому что этого может требовать логика приложения а так же для обеспечения совместимости. В модуле обработки проведения "Длительных вычислений и прочих действий" может и не быть.
С любовью, всегда ваш Кэп.
dimisa; bulpi; +2 Ответить
5. Ndochp 103 02.10.13 09:57 Сейчас в теме
Забыт еще один момент - при перезаписи в регистр набора, совпадающего с уже записанным фактической записи не происходит.
То есть при перерпроведении с "удалять автоматически" для какого-нибудь крупного документа сначала запишется пустой набор, потом снова все его движения, а при записи движений "поверх" старых движений есть шанс, что СУБД вообще дергаться не будет.
user598350_grimax; +1 Ответить
6. webester 26 03.10.13 06:47 Сейчас в теме
(5)Я бы сказал, ключевой момент, который вроде бы вытекает из повествования, но не очевиден.
8. Andreynikus 1378 08.10.13 13:04 Сейчас в теме
(6)
Ключевой момент в том, что записи будут блокированы для удаления в самом начале проведения, что не есть хорошо.
7. Andreynikus 1378 08.10.13 12:58 Сейчас в теме
(5)
при перерпроведении с "удалять автоматически" для какого-нибудь крупного документа сначала запишется пустой набор, потом снова все его движения

Так и есть, только это будет действовать не только для крупных документов, а вообще для всех :)

а при записи движений "поверх" старых движений есть шанс, что СУБД вообще дергаться не будет

Опишите ситуацию при которой СУБД не будет удалять и перезаписывать движения если установлен режим "Удалять автоматически"
На моих тестах удаление происходит всегда.
9. Ndochp 103 08.10.13 14:39 Сейчас в теме
(7)
а при записи движений "поверх" старых движений есть шанс, что СУБД вообще дергаться не будет

Опишите ситуацию при которой СУБД не будет удалять и перезаписывать движения если установлен режим "Удалять автоматически"

Так я и сравниваю "удалять автоматически" и нет, как и в статье. Если "удалять автоматически" стоит, то очистка идет всегда и обойтись без перезаписи в СУБД шансов нет.

Про большие документы я хотел написать, что у них даже удаление движений долго идет, не то что формирование. Но как-то передумал в процессе написания поста.
11. Poison Angel 03.07.15 15:00 Сейчас в теме
(5) Ndochp, вот сейчас на фактических данных проверил:
- провел документ. режим удаления движений "Удалять автоматически при отмене проведения."
- выбрал в документе ещё раз то же самое значение в реквизите таб. части
- получил при проведении ошибку записи в регистр сведений "запись с такими ключевыми полями..." (ну вы в курсе, про неуникальность)

Так что условия, требуемые для того, чтобы СУБД вообще "не дергалась", несколько строже, чем простое совпадение набора с существующей записью.
10. dyak84 17.10.13 16:57 Сейчас в теме
Да все что можно удалить нужно закрить от простых и смертеных пользователей чем подальше, а то потом глюков не оберешся,а туту еще чтото удаляется автоматически етот факт заставляет задуматся что в базе на 200 пользователей размером 300 гб кто и чтото автоматически почнет удалять про какую производительность идет речь
12. user598350_grimax 25.12.19 10:51 Сейчас в теме
К сожалению господа оптимизаторы забывают о типовых кейсах а именно: изменение старых документов и участие документа в обмене! и когда приходится перепроводить старые документы а еще при наличии у них введенных на основании или перегрузке старых то такие оптимизации выливаются в просто ад с кучей доков у которых либо есть движения при снятом признаке проведения либо вообще расходятся с данными в таблицах документов. Вывод чем больше в конфигурации документов с признаком удаление движений Не удалять автоматически тем больше скрытых проблем может обрушится на пользователя но зато блокировок меньше ура).
13. user598350_grimax 25.12.19 15:34 Сейчас в теме
(12)К слову в ERP таких 133 (состав ОпределяемыйТип.ПроверяемыйДокументРеглУчета)
14. Andreynikus 1378 26.12.19 07:24 Сейчас в теме
(12)
Рекомендуемый режим удаления никак не может привести к тому что документ будет расходиться с движениями или будет проведен без пометки проведения. К сожалению Вы не поняли того что написано в статье.
15. FilippSerg 83 04.10.23 16:51 Сейчас в теме
В книге "Реализация прикладных задач" говорится, что режим «Удалять автоматически?» приводит к тому, что при перепроведении документа между завершением транзакции удаления движений и началом блокировки данных для проведения есть временной промежуток. Если это Расходная накладная, то при перепроведении на некоторое время остатки товара высвободятся, и эти остатки может списать другой документ.
16. Andreynikus 1378 05.10.23 14:16 Сейчас в теме
(15)
Если транзакция открыта, то все X блокировки, которые как раз возникают при удалении, будут держаться до окончания транзакции, это подтверждается экспериментами, опытом, документацией СУБД и здравым смыслом.
Попробуйте сами отследить профайлером/расширенными событиями команды СУБД по установке и снятии блокировок и начале завершении транзакций.
Оставьте свое сообщение