|
Запрос, удаление временной таблицы
|
Я
|
|
Momus 03.03.20 - 16:46 | Поделитесь опытом сильно ли влияет на производительность явное удаление временной таблицы в запросе. Временные таблицы имею ввиду те, которые образуются после "Поместить". |
vicof 1 - 03.03.20 - 16:46 | Сильно влияет вставание в 7 утра на вымирание землероек?
|
Momus 2 - 03.03.20 - 16:49 | ( 1) т.е. если будет какой-то архисложный запрос, Запрос.Выполнить() будет одинаково по времени отрабатывать? |
vicof 3 - 03.03.20 - 16:51 | Нет, вещи спрашиваешь не особо связанные. Зависит от настроек СУБД, 1С, сервера, железа, кода, мозгов и т.д. и т.п.
|
unenu 4 - 03.03.20 - 16:51 | ( 2) если у вас есть бд в которой есть рн в которых 100-500КК записей то проведите тесты.
самое ценное знание то, которые вы добыли сами. |
Сияющий в темноте 5 - 03.03.20 - 17:03 | это влияет не на скорость а на обьем памяти и диска используемый sql-сервером.
|
Momus 6 - 03.03.20 - 17:34 | ( 5) т.е. прямой зависимости скорости выполнения запроса от объема занимаемой памяти и диска (если она в избытке) нет? +Судя по той информации, которую я нарыл в сети, явное уничтожение временных таблиц это скорее хорошие манеры, а не необходимость |
D_E_S_131 7 - 03.03.20 - 17:35 | ( 4) Да, на рабочем сервере будет в самый раз провести такой эксперимент :) |
Said_We 8 - 03.03.20 - 17:49 | ( 6) Не бывает в избытке. Сегодня в избытке, а завтра не хватает. Поэтому если та или иная временная таблица более не используется, то её надо удалять. Что бы потом не сидеть и не оптимизировать, то что можно нарисовать сразу. |
VS-1976 9 - 03.03.20 - 18:10 | ( 0) Времянка создаётся в temp_db. Удаление очищает используемое место в базе. Есть шанс что освободившееся нарезанное пространство будет использовано повторно, вместо того что бы база temp_db распухла ( выделение куска диска + нарезка структуры ). Шанс что-то выиграете от этого есть но он ничтожно мал... |
vi0 10 - 03.03.20 - 18:15 | ( 0) что значит явное удаление? |
VS-1976 11 - 03.03.20 - 18:17 | ( 10) Как то так:
ВЫБРАТЬ
"Значение" КАК Поле
ПОМЕСТИТЬ тзДанные
;
УНИЧТОЖИТЬ тзДанные
; |
pechkin 12 - 03.03.20 - 18:17 | в скорости проигрыш будет точно (в противном случае таблица удабится когда то потом), но выигрыш в освобождении пространства
|
vi0 13 - 03.03.20 - 18:17 | ( 11) ну может быть он другое имеет ввиду |
Momus 14 - 03.03.20 - 18:18 | ( 10) из того, что я прочитал, вт живёт до тех пор, пока жива переменная с результатом запроса. Под явным удалением удалением я подразумеваю использование конструкции "уничтожить" в тексте запроса |
vi0 15 - 03.03.20 - 18:19 | ( 14) не совсем - если есть менеджер временных таблиц и он жив, то вт жива и в этом случае |
VS-1976 16 - 03.03.20 - 18:19 | ( 14) То только. Есть ещё случай
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Тогда таблица будет автоматом уничтожена когда будет уничтожен МенеджерВременныхТаблиц |
Надо работать 17 - 03.03.20 - 18:20 | ( 8) а потом, во время отладки, будешь сидеть и не понимать куда делись твои ВТ.. |
vi0 18 - 03.03.20 - 18:20 | ( 15) + поэтому если МВТ жив долгое время, например когда гуляет от функции к функции, то ВТ смысл удалять есть
это как частный случай |
VS-1976 19 - 03.03.20 - 18:21 | ( 16) Но если падает клиент, а запрос осуществлялся на клиенте ( ОФ ), то таблица может существовать долго :) |
vi0 20 - 03.03.20 - 18:21 | ( 16) не так, нужно чтобы переменная была с МВТ |
vi0 21 - 03.03.20 - 18:23 | ( 17) если только для отладки то это совсем другой разговор |
Momus 22 - 03.03.20 - 18:23 | ( 12) проигрыш в скорости только в том случае, если мне таблица понадобится? Если я уверен, что эта таблица мне более не нужна, то в скорости разницы нет (если с памятью проблем нет)?
( 16) да, про менеджер знаю, поэтому сразу уточнил именно про поместить. |
vi0 23 - 03.03.20 - 18:24 | ( 20) точнее - переменная, если Запрос уже уничтожен |
pechkin 24 - 03.03.20 - 18:25 | ( 22) причем здесь понадобится или нет? если ты запускаешь действие (уничтожить ВТ) - то оно будет выполнять N секунд. вот это и будет проигрыш |
vi0 25 - 03.03.20 - 18:25 | (22) а ты спроси его "если проигрыш будет точно то как это легко проверить?"
ну раз уж "точно" то и проверить легко значит |
vi0 26 - 03.03.20 - 18:26 | ( 24) ВТ в любом случае будет уничтожаться, если у запроса не инициирован МВТ |
Momus 27 - 03.03.20 - 18:26 | |
pechkin 28 - 03.03.20 - 18:27 | ( 26) оно уничтожится, но уничтожится потом не блокируя ввод |
VS-1976 29 - 03.03.20 - 18:27 | ( 20) Ясен хрен пока объект держат он не будет уничтожаться сборщиком мусора и его деструктор не будет вызываться.
При этом этого достаточно:
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
В случае 2:
пМенеджер = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = пМенеджер;
Запрос = Неопределено;
Менеджер разумеется не грохнется, так как будет в переменной, так как у объекта есть счётчик ссылок.
Во втором случае после уничтожения объекта Запрос, произойдёт уменьшение счётчика использования МенеджерВременныхТаблиц. И когда счётчик станет равным 0, вызовется деструктор МенеджерВременныхТаблиц. |
pechkin 30 - 03.03.20 - 18:27 | то бишь асинхронно
Рекламное место пустует |
vi0 31 - 03.03.20 - 18:28 | ( 28) что такое блокировка ввода? до сих пор говорили только про скорость |
VS-1976 32 - 03.03.20 - 18:31 | ( 30) Разные базы, по этому MS SQL будет параллельно делать DML к базе temp_db. Удаление таблицы это тупо пометка в структуре что область свободна. Это не занимает много времени. По этому о каком-то торможении из-за УНИЧТОЖИТЬ говорить не приходится. Если конечно на temp_db не длинная очередь, и то тупо выполнится удаление позже что не критично. |
Momus 33 - 03.03.20 - 18:46 | ( 9), ( 32) вот примерно такого ответа я ожидал. Спасибо |
Надо работать 34 - 03.03.20 - 18:50 | ( 33) захламление кода. направьте свою энергию в более полезное для базы дело |
Said_We 35 - 03.03.20 - 21:02 | ( 17) "а потом, во время отладки, будешь сидеть и не понимать куда делись твои ВТ.." - это когда это?
В консоле видно когда и что удаляешь. |