#0
by sereban
Часто приходится писать пакетные запросы с большим количеством временных таблиц (доходит до 100). В основном для отчетов на скд. В результате получается очень большой список на закладке "Пакет запросов" конструктора. Большую часть временных таблиц (за исключением таблиц, участвующих в последнем результирующем запросе) необходимо уничтожать после выполнения последнего запроса, в котором она использовалась. Собственно вопрос: кто-нибудь пытался автоматизировать эту задачу? Необходимо в пакетном запросе прописать уничтожение ВТ после ее последнего использования. Понятно, что задача не сложная, можно разбить текст по запросам опираясь на ";" и найти имена временных таблиц по "поместить", но может есть что-нибудь готовое?
#2
by SeiOkami
, ходят слухи, что ручное уничтожение не требуется. Но никто точно сказать не может. Точнее споров много.
#4
by VladZ
"Часто приходится писать пакетные запросы с большим количеством временных таблиц (доходит до 100)." Есть подозрение, что что-то не так со структурой данных.
#5
by SeiOkami
А вообще, 1С могла бы в конструкторе сделать галочку "автоматическое удаление временной таблицы", дабы 1Ска сама это делала
#6
by H A D G E H O G s
Уничтожать имеет смысл при неоднократном использовании тех же имен ВТ в рамках одного менеджера ВТ, и никак иначе.
#9
by sereban
В какой момент система уничтожает? Временные таблицы в моем случае находятся в TempDB на SQL. TempDB расположен на рамдиске (диск в оперативке) и место на под TempDB ограничено. Вот если бы наверняка знать, что таблица будет уничтожена после ее последнего использования, а не после выполнения всего пакета, то вопросов бы не возникало
#13
by H A D G E H O G s
Вероятность 100 раз создавать многомегабайтные таблицы КРАЙНЕ МАЛА, либо ты хреновый программист.
#15
by vde69
в момент разрушения менеджера временных таблиц, для скд - это окончание вывода данных, для простого запроса - это разрушение переменной "запрос"
#16
by vde69
дилема ВТ/Вложенный не такая простая, иногда лучше юзать ВТ иногда вложеные запросы. мое мение - ВТ нужны при повторном использовании результата или принудительном индексирование результата, все остальные случаи вполне обходятся вложеными запросами.
#20
by SeiOkami
, то есть, если я грохну переменную "Запрос", то сразу грохнуться и все ВТ этого запроса?
#21
by vde69
+ на самом деле за разрушение ВТ отвечает сборщик мусора... и именно по этому всякие незакрытые транзакции, блокировки и т.д не мешают их очищать...
#23
by vde69
да у каждого свое мнение к читабельности кода, собственно я пробовал мерить производительность и понял, что разнице нет.
#24
by H A D G E H O G s
Нет. Все не так. В 8.2 когда грохается Запрос, МенеджерВТ, СКД - ВТ очищаются, но остаются жить как пустые объекты пока жив сеанс пользователя sql. (пока сервер 1С подключен к SQL). В 8.3 ВТ очищаются и удаляются.
#25
by Kamas
маленький секрет если вы грохните до выполнение то их еще не будет если после, то их уже не будет, а вовремя выполнения вы его грохнуть не сможете.
#26
by H A D G E H O G s
"или принудительном индексирование результата" Необходимость индексирования ВТ КРАЙНЕ мала и редко необходима.
#27
by SeiOkami
, а чем череваты пустые объекты ВТ? То есть можно не париться и не грохать постоянно в самих запросах ВТ?
#29
by H A D G E H O G s
Можно не парится, пока не начнешь использовать один и тот же менеджер ВТ; пока не прилетит ошибка вида "Данная временная таблица уже существует"
#30
by SeiOkami
, интересно. Просто у нас есть утверждающие, мол ВТ нужно удалять всегда после последнего обращения. Мол так намного быстрее, лучше и вообще труЪ
#31
by Escander
таки утверждаешь, что темпдб будет безразмерен если аптайм кластера серверов 8.2 долог?
#32
by SeiOkami
, а потом запросы открываешь, где половина пакетов - удаление результатов других пакетов
#33
by AlexITGround
а как же "хочу именно вот таким образом", а то ж если вложенными делать, то в итоге с оптимизацией СУБД может получиться совсем другой запрос?
#35
by vde69
это хоороший стиль, суть такого подхода - не зависить от косяков будующих релизов платформы. но тут нужно знать во всем меру, по тому как если у меня 200 таблиц и пытатся их все закрыть в том-же запросе - читабельность упадет ниже плинтуса...
#36
by H A D G E H O G s
Если у тебя 100 ВТ размером по 10 мегабайт каждая - они заставят распухнуть tempdb очень быстро, если их в пакете сразу же не удалять. Но 100 ВТ размером по 10 мегабайт - это лютый пздц.
#37
by SeiOkami
, понял. То бишь в случаях больших объёмов лучше сразу удалить, чем тянуть до последнего
#40
by ultrannge89
Предположу что наверное сам запрос не очень оптимизирован, если почитать последнюю моя тему, там я тоже вначале делал 8вт, а к концу концу уже 4...
#41
by vde69
из личного опыта, база 30 гигов, темДБ примерно 150 гигов.... После оптимизации стало примерно 30... да и скорость увеличилась...
#43
by Necessitudo
Ну я смотрел профайлер и там видно, что после каждого запроса с использование ВТ 1С-ка добавляет в конце запроса "truncate" на эту временную таблицу. То есть таблица очищается, а потом запихивается в tempdb для последующего использования.
#45
by vde69
это размер файла темп-дб после суток работы, шринк каждую ночь... а на этом серваке таких баз было 4, тестовая, распределенка и для разработки, терабайтного диска не хватало под четыре 30 гиговые базы, руководству это было обьяснить тяжеловато :)
#46
by Drac0
Пожалей оптимизатор скуля. План для вложенных запросов сильно зависят от текущей статистики, нагрузки, расположения звезд. Сейчас может построиться мега-оптимальный план, а через 5 минут наоборот. ВТ в этом плане намного стабильнее.
#47
by rsv
Ничего что движок 1С полностью заточен под ВТ ? Можно гирлянду складывать .. начинается #t1..... #t23 и так далее
#48
by rsv
Любая движковая виртуальная талица ... провести ... записать... - это временные таблицы и temp
#49
by ultrannge89
У меня у одного глаза на лоб лезут когда начинаешь разбираться в чужом вложенном запросе... Даже ради того чтобы потом легко было вкурить, можно пожертвовать 2-3 сек спорного быстродействия и писать с ВТ.
#51
by H A D G E H O G s
Я понимаю, что такое дроп и транкейт. Я не понимаю порядок мыслей в твоем предложении.
#52
by Necessitudo
Ну на создание временной таблицы тратится время. Видимо быстрее положить пустую таблицу в tempdb, чтобы потом при надобности не создавать новую, а использовать существующую.
#54
by Ник второй
Нет не так. ВТ грохнется еще до того, как ты рохнешь Запрос, а именно в момент выполнения запроса "Выполнить". Если конечно не оставляем в живых МВТ
#55
by Necessitudo
Иногда запрос настолько длинный, что для сокращения тупо проще использовать вложенный запрос.
#57
by Ник второй
Запрос нужно писать, что бы он выдавал прогнозируемый результат за прогнозируемое время, а не по количеству строк.
#58
by Necessitudo
Если потом с тебя потребуют его быстро переписать, то какая-то оптимальность становится не так уж и важной)
#59
by Sammo
Если мне не изменяет мой склероз, то был баг платформы, правда скорее всего еще в 8.1, когда временные таблицы не удалялись если в явном виде не указать уничтожить или не зачистить менеджер. Исходя из этого я всегда стараюсь за собой подчищать. Часто видел, когда некоторый прирост проивзодительности давал просто переход на временные таблицы и отказ от вложенных запросов. Причина - несмотря на то, что временные таблицы писались в темпдб план запроса становился более прогнозируемым и оптимальным.
#60
by Kamas
да а в процессе переписывания вдруг неожиданно нужно сделать левое соединение 1 вложенного с предпоследним
#62
by Ник второй
Переписать запрос с временными запросами проще. Но опять же повторюсь, что при написании запроса на в первую очередь упирать на предсказуемость результат и скорости выполнения.
#63
by Necessitudo
Лишь бы работало - а уж после жалоб пользователей можно и оптимизировать. Знаю, звучит дико - но деваться некуда, план же требуют)
#64
by Sammo
И вот здесь, имхо, у временных таблиц более предсказуемые параметры - скуль будет формировать план более предсказумео (из-за того, что запрос разбит на более простые части)
#65
by Ник второй
План посылается далеко и надолго. На самом деле рекомендаций по написанию запросов не много и можно их следовать на автомате.
#66
by Ник второй
Именно, поэтому временные таблицы в большинстве случаев являются наиболее предпочтительным вариантом.
#67
by vde69
еще ВТ имеет смысл при программном формировании текста запроса. это куда более понятно и каждую ВТ по отдельности можно открыть конструктором.
#68
by Dzenn
Упрощай и оптимизируй способы решения задач, тогда не придётся оперировать десятками временных таблиц.
#69
by Dzenn
А по сути вопроса - ВТ уничтожаются автоматически, и уничтожать их вручную требуется в очень редких случаях.
#71
by vogenut
По теме, удалять желательно после последнего использования: - Таблица может быть переиспользована далее. - Уменьшается нагрузка на tempdb в смысле объема инфы содержащейся в данный момент
#73
by TormozIT
Да, если нет уверенности, что размер временной таблицы будет не гигантским, то лучше ее удалять поскорее. В остальных случаях не вижу смысла.
#74
by sereban
Собственно вопрос стоял по автоматизации вставки в текст запроса строк: УНИЧТОЖИТЬ <ИмяВТ> в нужных местах
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- уничтожение переменных в 1С 7.7
- Уничтожение базы 1с
- Консоль запросов: пакетные запросы + просмотр временных таблиц
- Использование временных таблиц в типовой консоли запросов
- при оспользовании построителя отчёта можно использовать менеджер временных таблиц?
- как в SQL обратится к таблице сформированной в менеджере временных таблиц?
- Менеджер временных таблиц (Временная таблица уже существует) :-(
- Консоль запросов дает ошибку: не установлен менеджер временных таблиц
- Уничтожение временных таблиц
- Таблица значений, менеджер временных таблиц
- Нужна консоль запросов с замером скорости выполнения запросов вирт. таблиц
В этой группе 1С
- КА Как чистить регистр сведений Аналитика Распределения затрат?
- Как программно увеличить размер строки?
- Сгруппировать одинаковые строки СКД
- Пользовательские настройки СКД в обычных формах
- Как перевести Бухгалтерию 7.7 на Бухгалтерию 8.3?
- Как в тонком клиенте обратиться к процедуре , которая находится в модуле формы?
- Как привязать к статье затрат счет затрат (УПП)
- 1C УТ 11 - как изменить сроки выполнения задач-напоминалок?
- Пропала служба 1С Предприятия
- СКД и дополнительный макет с картинкой
- Бухгалтерия 2.0. Начисление дивидендов, код 1010
- 1C Розница 1.0 : Почему Чек ККМ может не попадать в Отчет о Розн. Продажах?
- УПП РАУЗ не закрывается 25 счет
- Передача файла через веб-сервисы
- Розница 2, Frpint и группы печати (два ФКР на Frontol)
- Подключение к сетевой папке
- Запретить множественное выделение в табличном документе
- СКД, Высчитать процент от итога по строке
- Выгрузка из 1С в Эксель, как установить формат выгружаемого поля ?
- Узнать адрес ячейки из соседней области