Имя: Пароль:
1C
1С v8
Запрос, удаление временной таблицы
0 Momus
 
03.03.20
16:46
Поделитесь опытом сильно ли влияет на производительность явное удаление временной таблицы в запросе. Временные таблицы имею ввиду те, которые образуются после "Поместить".
1 vicof
 
03.03.20
16:46
Сильно влияет вставание в 7 утра на вымирание землероек?
2 Momus
 
03.03.20
16:49
(1) т.е. если будет какой-то архисложный запрос, Запрос.Выполнить() будет одинаково по времени отрабатывать?
3 vicof
 
03.03.20
16:51
Нет, вещи спрашиваешь не особо связанные. Зависит от настроек СУБД, 1С, сервера, железа, кода, мозгов и т.д. и т.п.
4 unenu
 
03.03.20
16:51
(2) если у вас есть бд в которой есть рн в которых 100-500КК записей то проведите тесты.
самое ценное знание то, которые вы добыли сами.
5 Сияющий в темноте
 
03.03.20
17:03
это влияет не на скорость а на обьем памяти и диска используемый sql-сервером.
6 Momus
 
03.03.20
17:34
(5) т.е. прямой зависимости скорости выполнения запроса от объема занимаемой памяти и диска (если она в избытке) нет? +Судя по той информации, которую я нарыл в сети, явное уничтожение временных таблиц это скорее хорошие манеры, а не необходимость
7 D_E_S_131
 
03.03.20
17:35
(4) Да, на рабочем сервере будет в самый раз провести такой эксперимент :)
8 Said_We
 
03.03.20
17:49
(6) Не бывает в избытке. Сегодня в избытке, а завтра не хватает. Поэтому если та или иная временная таблица более не используется, то её надо удалять. Что бы потом не сидеть и не оптимизировать, то что можно нарисовать сразу.
9 VS-1976
 
03.03.20
18:10
(0) Времянка создаётся в temp_db. Удаление очищает используемое место в базе. Есть шанс что освободившееся нарезанное пространство будет использовано повторно, вместо того что бы база temp_db распухла ( выделение куска диска + нарезка структуры ). Шанс что-то выиграете от этого есть но он ничтожно мал...
10 vi0
 
03.03.20
18:15
(0) что значит явное удаление?
11 VS-1976
 
03.03.20
18:17
(10) Как то так:

ВЫБРАТЬ
    "Значение" КАК Поле

ПОМЕСТИТЬ тзДанные

;

УНИЧТОЖИТЬ тзДанные
;
12 pechkin
 
03.03.20
18:17
в скорости проигрыш будет точно (в противном случае таблица удабится когда то потом), но выигрыш в освобождении пространства
13 vi0
 
03.03.20
18:17
(11) ну может быть он другое имеет ввиду
14 Momus
 
03.03.20
18:18
(10) из того, что я прочитал, вт живёт до тех пор, пока жива переменная с результатом запроса. Под явным удалением удалением я подразумеваю использование конструкции "уничтожить" в тексте запроса
15 vi0
 
03.03.20
18:19
(14) не совсем - если есть менеджер временных таблиц и он жив, то вт жива и в этом случае
16 VS-1976
 
03.03.20
18:19
(14) То только. Есть ещё случай

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Тогда таблица будет автоматом уничтожена когда будет уничтожен МенеджерВременныхТаблиц
17 Надо работать
 
03.03.20
18:20
(8) а потом, во время отладки, будешь сидеть и не понимать куда делись твои ВТ..
18 vi0
 
03.03.20
18:20
(15) + поэтому если МВТ жив долгое время, например когда гуляет от функции к функции, то ВТ смысл удалять есть
это как частный случай
19 VS-1976
 
03.03.20
18:21
(16) Но если падает клиент, а запрос осуществлялся на клиенте ( ОФ ), то таблица может существовать долго :)
20 vi0
 
03.03.20
18:21
(16) не так, нужно чтобы переменная была с МВТ
21 vi0
 
03.03.20
18:23
(17) если только для отладки то это совсем другой разговор
22 Momus
 
03.03.20
18:23
(12) проигрыш в скорости только в том случае, если мне таблица понадобится? Если я уверен, что эта таблица мне более не нужна, то в скорости разницы нет (если с памятью проблем нет)?
(16) да, про менеджер знаю, поэтому сразу уточнил именно про поместить.
23 vi0
 
03.03.20
18:24
(20) точнее - переменная, если Запрос уже уничтожен
24 pechkin
 
03.03.20
18:25
(22) причем здесь понадобится или нет?
если ты запускаешь действие (уничтожить ВТ) - то оно будет выполнять N секунд. вот это и будет проигрыш
25 vi0
 
03.03.20
18:25
(22) а ты спроси его "если проигрыш будет точно то как это легко проверить?"
ну раз уж "точно" то и проверить легко значит
26 vi0
 
03.03.20
18:26
(24) ВТ в любом случае будет уничтожаться, если у запроса не инициирован МВТ
27 Momus
 
03.03.20
18:26
(24) вот так понятней
28 pechkin
 
03.03.20
18:27
(26) оно уничтожится, но уничтожится потом не блокируя ввод
29 VS-1976
 
03.03.20
18:27
(20) Ясен хрен пока объект держат он не будет уничтожаться сборщиком мусора и его деструктор не будет вызываться.
При этом этого достаточно:

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

В случае 2:

пМенеджер = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = пМенеджер;
Запрос = Неопределено;

Менеджер разумеется не грохнется, так как будет в переменной, так как у объекта есть счётчик ссылок.
Во втором случае после уничтожения объекта Запрос, произойдёт уменьшение счётчика использования МенеджерВременныхТаблиц. И когда счётчик станет равным 0, вызовется деструктор МенеджерВременныхТаблиц.
30 pechkin
 
03.03.20
18:27
то бишь асинхронно
31 vi0
 
03.03.20
18:28
(28) что такое блокировка ввода? до сих пор говорили только про скорость
32 VS-1976
 
03.03.20
18:31
(30) Разные базы, по этому MS SQL будет параллельно делать DML к базе temp_db. Удаление таблицы это тупо пометка в структуре что область свободна. Это не занимает много времени. По этому о каком-то торможении из-за УНИЧТОЖИТЬ говорить не приходится. Если конечно на temp_db не длинная очередь, и то тупо выполнится удаление позже что не критично.
33 Momus
 
03.03.20
18:46
(9), (32) вот примерно такого ответа я ожидал. Спасибо
34 Надо работать
 
03.03.20
18:50
(33) захламление кода. направьте свою энергию в более полезное для базы дело
35 Said_We
 
03.03.20
21:02
(17) "а потом, во время отладки, будешь сидеть и не понимать куда делись твои ВТ.." - это когда это?
В консоле видно когда и что удаляешь.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.