Нужно ли удалять временные таблицы

1. Kaiden 01.10.12 20:36 Сейчас в теме
Всем доброго времени суток.

Предположим, что у нас есть запрос в 1С, в тексте которого создаются несколько временных таблиц. По ходу выполнения запроса некоторые временные таблицы становятся не нужны и их теоретически можно уничтожить, написав команду УНИЧТОЖИТЬ. Менеджер временных таблиц не установлен.

Вопрос в том, есть ли какой-то практический смысл в уничтожении временных таблиц сразу же после того, как они перестали быть нужными в такой ситуации? 1С их все равно уничтожит (точнее, очистит) сразу после того, как запрос будет выполнен, но мы можем сделать это чуть раньше по ходу выполнения запроса, сразу после того, как в той или иной временной таблицы отпала необходимость. Есть ли от этого какая-то польза? Или можно не загромождать текст запроса бесполезными командами УНИЧТОЖИТЬ?

Что думает уважаемая общественность? :)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Win98 01.10.12 21:00 Сейчас в теме
(1) Kaiden,
1С их все равно уничтожит (точнее, очистит) сразу после того, как запрос будет выполнен,
с этого места поподробнее, плиз.
ivangrant; kild; +2 Ответить
4. Kaiden 01.10.12 21:09 Сейчас в теме
(3) Если вооружиться SQL-профайлером, то можно увидеть, что после выполнения запроса, который создает временные таблицы и не имеет менеджера временных таблиц, 1С делает truncate table для всех созданных в запросе временных таблиц.
siamagic; Serg O.; user712426; theelectric; user811769; +5 Ответить
22. FIERYLIONS 223 11.01.13 14:27 Сейчас в теме
(1) Kaiden, Удалять нужно обязательно если временные таблицы очень большие например больше 1гб... даже если вы удалите запрос например "Запрос=Null" не всегда удалятся все временные таблицы т.к связь в памяти запроса и ВТ в исключительных ситуациях может быть утеряна в период выполнения запроса. Это редкость но факт по этому когда ВТ сверх большие заведите себе привычку всегда удалять ВТ. Это удаление ВТ введено в качестве перестраховки. Ну и как выше говорилось у вас при очень большом запросе с ужасно большими временными таблицами может резко упасть производительность системы и в исключительных случаях даже выкинуть с 1Ски если не сработает вспомогательное удаление ВТ (при большой нехватки памяти озу и на харде в 1C происходит удаление ВТ для возможности создать другую и при обращении к удаленной ВТ заново делается запрос и ВТ создается заново но это когда у вас память совсем встала). Это не задокументированная особенность системы.
user712426; +1 1 Ответить
2. andrewks 1375 01.10.12 20:55 Сейчас в теме
я думаю, что нужно соблюдать хороший стиль, и подчищать за собой
Serg O.; user712426; SagittariusA; +3 Ответить
5. Maldiv 02.10.12 09:43 Сейчас в теме
(2) andrewks, Согласен. Зачем занимать лишнюю память?
27. ybatiaev 59 29.01.18 22:47 Сейчас в теме
(2) понимаю, что поздно уже тут писать, но вот что заметил.
В программе есть управляемая форма с динамическим списком.
Сначала был запрос, в котором созданы временные таблицы, с которых основной запрос вытаскивает уже данные. Всё это работало прекрасно.
Но потом, как умный Ваня, сделал
1. Создание временных таблиц;
2. Основной запрос;
3. Удаление временных таблиц.

Так вот после добавления 3 пункта у меня 1С поработает и вылетает с ошибкой CPP...
Платформа: 1С:Предприятие 8.3 (8.3.10.2650)
Конфигурация: Архиватор баз 1С и файловых ресурсов (файловая версия) (1.11.0.0 (171229))
Поставщик архиваторов (...)
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский
Вариант интерфейса: Такси

Ошибки:
--------------------------------------------------------------------------------
29.01.2018 22:42:15
Недопустимое состояние объекта
[entext - src\Select.cpp (28173)]
(2)
6. alenakrr 02.10.12 11:06 Сейчас в теме
На одном франчайзи была целая дискуссия о том стоит ли удалять таблицы во время формирования запроса.
Пришли к выводу, что это зависит от требуемого быстродействия и возможностей сервера.

Если требуется быстродействие и достаточно памяти сервера, то не стоит удалять таблицы, т.к. на это требуется время. Сервер и сам затем подчистит временные таблицы, как писал Kaiden.
7. Kaiden 02.10.12 11:19 Сейчас в теме
(6)

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

Вы имеете, в виду оперативной или постоянной памяти?
10. alenakrr 02.10.12 11:41 Сейчас в теме
(7) Kaiden, и той и другой - чем больше дискового пространства и выше скорость винта и чем больше оперативной памяти может "сожрать" 1с - тем быстрей отработает Ваш запрос = это извечный закон 1С 8.

Я не чищу таблицы обычно - разве только если пишу для Инфостарта с открытым кодом. )))
В большой умной желтой книге по 1С таблицы не "убивают". "Убивать" их стали в методичках 1С.

Вообще выбирайте экспериментально для своего сервера с замерами производительности.
11. Kaiden 02.10.12 11:54 Сейчас в теме
(10) Ну, с памятью на жестком диске, по идее, проблем быть не должно - на серверах память обычно исчисляется терабайтами, с трудом представляю, чтобы временные таблицы могли "забить" весь диск. С оперативной памятью - да, но у меня нет полной уверенности, что эти временные таблички могут храниться в оперативной памяти, а не сразу пишутся на диск...

Что касается того, что на удаление временных таблиц (в запросе) требуется время, я тоже полностью не уверен, что, если не делать этого, 1С сразу вернет результат запроса, а не сначала сама почистит временные таблицы, а потом вернет результат запроса...

Сложно тут все...
8. DenisCh 02.10.12 11:23 Сейчас в теме
Я обычно чищу за собой.
Только не в случае множественных запросов в цикле :-)
9. DikSer 02.10.12 11:38 Сейчас в теме
А СКУЛ сервер не поджирает память из-за временных табличек, удалится то они удалились, а память была выделена, может зависла аль еще чего... )
12. alenakrr 02.10.12 12:20 Сейчас в теме
В книге знаний Миста: Если временных таблиц много и они висят в памяти не удаленные не очищенные возникает эффект постоянной загруженности сервера 1с предприятие как будто этот процесс выполняет все время какой то тяжелый запрос или обработку что сказывается на производительности системы в целом. Временную таблицу нужно удалять как можно скорее после использования.

http://aitika.ru/otvety/2472-1c-Nemnogo-teorii-Vremennie-tablitsi - здесь больше и четче прописаны нюансы (в том числе и в комментах).
)
13. Kaiden 02.10.12 12:49 Сейчас в теме
Я этой статье с Мисте не особо верю :)
Надо проверять, конечно, но каким образом временные таблицы могут грузить сервер приложений 1С? Еще можно было бы понять, что они бы грузили сервер СУБД...
Хотя для точности нужно проверять, конечно.

За ссылку спасибо, почитаю.
14. DikSer 03.10.12 05:50 Сейчас в теме
МенеджерВременыхТаблиц и просто в запросе "ПОМЕСТИТЬ Таблица" как они отличаются в этом плане?
15. Kaiden 03.10.12 08:36 Сейчас в теме
(14) Если менеджер временных таблиц в запросе не установлен, все временные таблицы (созданные командой ПОМЕСТИТЬ) будут очищены сразу после выполнения запроса. Таким образом, они будут недоступны для использования в последующих запросах.

Если МВР установлен, то временная таблица после выполнения запроса очищена не будет и будет как бы храниться в этом МВР. В дальнейших запросах, использующих этот же МВР, можно будет обращаться к этой временной таблице. Временные таблицы будут очищены в этом случае либо при прямом использовании команды УНИЧТОЖИТЬ, либо когда объект Запрос, в котором установлен МВР, перестанет существовать.
KUAvanesov; siamagic; Merkalov; ivangrant; smit1c; sangol; v.a.ryag; theelectric; zannv; Dimeron; user811769; Daynestro07; user_2010; ojiojiowka; +14 Ответить
16. DikSer 03.10.12 08:40 Сейчас в теме
(15)Ну теперь всё ясно стало. МВР практически не пользую, озадачило ПОМЕСТИТЬ, но как оказывается всё окЭ)
17. zipik 08.10.12 23:22 Сейчас в теме
мне кажется надо чистить по любому
18. doom-black 09.10.12 10:17 Сейчас в теме
Была проблема следующего рода: На связке 1С УПП, сервера 1С x64 и PostgreSQL (все это под управлением CentOS)при удалении временных таблиц - платформа 1С падала, вслед за ней падал и весь сервер 1С.
19. Buster 09.10.12 10:31 Сейчас в теме
ИМХО, имеет смысл удалять ВТ только в том случае, если используется менеджер временных таблиц, т.к. на время существования менеджера ВТ будут существовать, а следовательно, не нужные ВТ будут также висеть в памяти, а их следовало бы удалить. Вот как-то так)
20. Slon1c 09.10.12 11:24 Сейчас в теме
Удалять всегда, особенно кто еще работает на 8.1, да и на 8.2 не мешает. Очень часто происходит дефрагментация памяти , что приводик к ее учеткам. Пока менеджер 1С (сборщик мусора :)) плохо справляется со своей работой :)
21. AlexS2 153 11.01.13 10:34 Сейчас в теме
Вопрос об удалении ВТ, кстати, не праздный. Получили однажды на скуле ошибку, когда база tempdb заполнила собой весь раздел на диске! Отсюда вопрос: это проблема некорректно работающей конфигурации/платформы (не удаляются ВТ) или выделения объема под tempdb, т.е. проблема DBA? Для справки: объем диска (целиком отдан под tempdb) был 270Гб...
23. FIERYLIONS 223 11.01.13 14:30 Сейчас в теме
(21) AlexS2, при больших вт всегда 1С пишет в тем данные... но к большому сожалению не всегда их удаляет... обычно нужно перезагружать комп или полностью останавливать сервер и запускать заново.
24. AlexS2 153 11.01.13 17:29 Сейчас в теме
(23) fierylions, спасибо за совет, я это знаю. Вопрос в другом был - это баг программистов(платформы) или DBA..?
25. ojiojiowka 13.09.14 12:46 Сейчас в теме
1) Тут все пишут про временные таблицы. Действительно, это могло вызвать проблему, если допустим сеанс пользователя оборвался (экстренно упал процесс rphost или какие-то другие причины), следовательно платформа не смогла удалить эти временные таблицы и они остались висеть в tempdb. Те, кто пишут про оперативную память, видимо не понимают, что временные таблицы в случае связки с ms sql всегда пишутся в tempdb и лишь потом в случае необходимости помещаются в оперативную память.
По поводу очистки временных таблиц в случае использования менеджера - в 8.1 это обязательно нужно делать, т.к. таблицы хранятся до закрытия последнего соединения; в 8.2 это желательно, но необязательно, т.к. разработчики платформы сделали автоочистку таблиц (но в некоторых экстренных случая, как я описал выше она может не сработать).
2) Кроме временных таблиц причиной может служить неоптимальные запросы (особенно если используются ограничения RLS). В случае, когда запрос достаточно тяжелый его составные части могут создавать отдельные таблицы в кеше, которые будут помещены также в tempdb (можно искать в плане запроса ключевое слово spool).

Чаще всего на практике присутствует комбинация из этих двух факторов. Следовательно, во всем виноваты "программисты" 1С (если не хватает 270Гб для tempdb не поставить кавычки никак не могу) или в редких случаях некорректное поведение платформы 1С. DBA тут не причем, но расхлебывать придется ему (периодически сжимать tempdb или перезапускать сервер).
26. гаврюша 3 23.09.16 11:07 Сейчас в теме
Подскажите, пожалуйста: у нас очень сильно выросла база "1С: УПП". Пробовали сжимать на sql, после расчета с/с опять сильно увеличивается. Сейчас опять увеличилась, при просмотре на sql выдается, что 44% свободного места. Почему может так расти база. Что можно посмотреть, чтобы уменьшить размер?
28. kild 92 01.02.18 22:15 Сейчас в теме
(26) Создать новую тему с вопросом, а не писать в комментариях четырехлетней давности)
Anaboooom; Serg O.; rudnitskij; SagittariusA; zannv; user811769; pm74; +7 Ответить
29. Serg O. 296 12.01.22 11:28 Сейчас в теме
(28) временные таблицы - создаются как #tt1, #tt2 ... на самом SQL Server
и хранятся в системной таблице (файле) TempDB.
Даже если таблица удаляется, файл не уменьшается в объёме!

как долго хранятся данные таблиц не понятно, наверное от настроек SQL-сервера зависит...

но то, что файл TempDB растёт постоянно (сам не уменьшается! ) - это факт
помогает только полная перезагрузка SQL server или сервера целиком
или надо специально создавать "регламентное" задание на самом SQL - для сжатия TempDB
(и его log файла тоже )

если TempDB специально не переносили на большой диск, то он на системном диске С сервера
(не большом обычно) и легко может занять весь диск С - а это полный капец!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот