3.34 Удерживается соединение СУБД
|
|
flas99 | Дата: Четверг, 18.06.2015, 22:58 | Сообщение # 1 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| ИР 3.34 При открытии консоли запроса из консоли компоновки, и исполнении запроса в котором есть временные таблицы, продолжает удерживаться соединение с СУБД, даже после закрытия всех окон ИР. Видео для портативного варианта https://cloud.mail.ru/public/LTmn/XKL2wLuNa
|
|
| |
tormozit | Дата: Четверг, 18.06.2015, 23:43 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Версию указал некорректно. На видео 3.34.1, а в описании 3.34 и потому я считал, что проблема наблюдается в подсистеме. В портативном варианте такая проблема известна.
|
|
| |
flas99 | Дата: Четверг, 18.06.2015, 23:56 | Сообщение # 3 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| В подсистеме тоже самое
|
|
| |
tormozit | Дата: Пятница, 19.06.2015, 00:25 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Именно воспроизводимость удержания соединения после закрытия формы консоли в подсистеме вызывала сомнения.
Если в открытой таким образом консоли запросов сохранить файл, закрыть приложение, заново его запустить, открыть в консоли сохраненный файл и выполнить запрос, то проблема воспроизводится? Какая версия платформы?
|
|
| |
flas99 | Дата: Пятница, 19.06.2015, 01:33 | Сообщение # 5 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| Цитата tormozit (  ) Если в открытой таким образом консоли запросов сохранить файл, закрыть приложение, заново его запустить, открыть в консоли сохраненный файл и выполнить запрос, то проблема воспроизводится? Нет. После закрытия консоли соединение закрывается.
8.3.6.1999Добавлено (19.06.2015, 01:33) --------------------------------------------- В форме консоли запросов в ПриЗакрытии не заходит в процедуру ОтключитьИсточникДанных из-за чего менеджер временных таблиц продолжает удерживать соединение с СУБД.
|
|
| |
tormozit | Дата: Пятница, 19.06.2015, 07:37 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Просьба проверить на платформе 8.3.5 Процедура ОтключитьИсточникДанных не работает с менеджером временных таблиц.
|
|
| |
flas99 | Дата: Пятница, 19.06.2015, 12:17 | Сообщение # 7 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| 8.3.5.1383 аналогично Добавлено (19.06.2015, 12:17) ---------------------------------------------
Цитата tormozit (  ) Процедура ОтключитьИсточникДанных не работает с менеджером временных таблиц Там происходит удаление временных таблиц. Пока в живом менеджере есть таблицы, то будет удерживаться соединение. При удалении последней таблицы соединение закрывается. При уничтожении менеджера тоже. Если соединение осталось жить, значит либо не удалились таблицы, либо менеджер завис в памяти.
|
|
| |
tormozit | Дата: Пятница, 19.06.2015, 13:56 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Действительно в процедуре ОтключитьИсточникДанных удаляются добавленные во время работы консоли запросов временные таблицы. Но сам объект МенеджерВременныхТаблиц непосредственно там не используется. Наличие временных таблиц в менеджере временных таблиц не влияет на уничтожение объекта МенеджерВременныхТаблиц. Кроме документации в пользу этого говорит не воспроизводимость проблемы при прямом открытии консоли запросов.
Если соединение осталось жить, значит не уничтожен объект МенеджерВременныхТаблиц. Обычно такое происходит, когда на объект остаются ссылки внутри зацикленных взаимными ссылками объектов.
|
|
| |
flas99 | Дата: Пятница, 19.06.2015, 14:09 | Сообщение # 9 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| Цитата tormozit (  ) Наличие временных таблиц в менеджере временных таблиц не влияет на уничтожение объекта МенеджерВременныхТаблиц На уничтожение не влияет. Влияет на удержание соединения с СУБД.
Цитата tormozit (  ) Если соединение осталось жить, значит не уничтожен объект МенеджерВременныхТаблиц. Обычно такое происходит, когда на объект остаются ссылки внутри зацикленных взаимными ссылками объектов. Да, есть подозрение на зацикливание. Обратил внимание, что при закрытии консоли запросов не полностью очищается память. При каждом повторном открытии память немного увеличивается.
|
|
| |
tormozit | Дата: Пятница, 19.06.2015, 14:25 | Сообщение # 10 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Действительно, на удержание соединения с СУБД влияет существование менеджера временных таблиц с хотя бы одной временной таблицей. Но сам менеджер временных таблиц автоматически удаляет все временные таблицы при своем уничтожении. А так как он ошибочно автоматически не уничтожается предположительно из-за наличия удерживающих его других объектов, то соединение удерживается. Осталось найти зацикливание ссылок, что является достаточно сложной задачей. Поэтому не обещаю скорого решения, но постараюсь решить.
|
|
| |
flas99 | Дата: Суббота, 20.06.2015, 03:12 | Сообщение # 11 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| Спасибо Добавлено (20.06.2015, 03:12) --------------------------------------------- Проблема начинается отсюда: Код ирКонсольЗапросов.Форма: ЭкземплярКомпоненты.ДобавитьСловоЛокальногоКонтекста("мОбъектЗапроса", "Свойство", Новый ОписаниеТипов(МассивТипов), ПараметрОбъектЗапроса); Там объект Запрос прячется в таблицу значений, которая прячется в таблицу значений.
В контексте обсуждаемого одним из вариантов решения мне видится следующим: В модуле обработки ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой в процедуре Уничтожить() добавить вызов процедуры ОчиститьТаблицуСловЛокальногоКонтекста. Процедуру ОчиститьТаблицуСловЛокальногоКонтекста тоже надо доработать: Перед ТаблицаЛокальногоКонтекста.Очистить(); добавить Код Для Каждого СтрокаТаблицы Из ТаблицаЛокальногоКонтекста Цикл СтрокаТаблицы.ТаблицаСтруктурТипов = Неопределено; КонецЦикла; Иначе не происходит уничтожения.
|
|
| |
tormozit | Дата: Суббота, 20.06.2015, 11:01 | Сообщение # 12 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Спасибо за способ решения. Хотя в приведенном описании не прослеживается циклической цепочки ссылок, но способ ее действительно разрывает. Она находится внутри переменной ТаблицаЛокальногоКонтекста по пути ТаблицаЛокальногоКонтекста[].ТаблицаСтруктурТипов[].СтрокаОписания.ТаблицаСтруктурТипов[].СтрокаОписания...
|
|
| |
tormozit | Дата: Суббота, 20.06.2015, 17:03 | Сообщение # 13 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| На партнерском форуме года 3 назад обещали сделать механизм для отлова циклических ссылок. Сказали, что думают над эффективным решением проблемы. Видимо пока не придумали... Основной вариант был в виде периодически запускающегося анализа всех созданных объектов, но по их заявлению на тот момент, если я правильно помню, они не придумали решения без заметного ущерба для производительности. Т.е. для удаления зацикленных по ссылками групп объектов периодически во время выполнения кода запускается анализ с удалением. И еще такой анализ должен быть доступен в отладчике в точке останова по специальной кнопке.
|
|
| |
flas99 | Дата: Воскресенье, 21.06.2015, 14:49 | Сообщение # 14 |
Сержант
Группа: Проверенные
Сообщений: 21
Репутация: 8
Статус: Оффлайн
| Это https://partners.v8.1c.ru/forum/message/818395#m_818395 ?
Заморочился этой темой. Решил прокачать скил на реальном примере с помощью ТЖ. После вкуривания ИТС, партнерки, и экспериментов пришел к следующему решению:
В данном случае необходимо настроить ТЖ следующего содержания: Код <?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <dump create="true" type="0" prntscrn="false"/> <log history="24" location="H:\TechLog\Logs\ИР"> <property name="all"/> <event> <eq property="name" value="LEAKS"/> </event> </log> <leaks collect="true"> <point call="client"/> </leaks> </config> Выполнить код: Код Обработка = ВнешниеОбработки.Создать("h:\Temp\ИР\ирПортативный.epf"); Форма = Обработка.ПолучитьФорму("Форма"); Форма.ОткрытьМодально(); Форма = Неопределено; Обработка = Неопределено; Тут смысл именно в модальном открытии ИР.
Воспроизвести подозрительный сценарий и закрыть панель ИР. На выходе получим одну запись в ТЖ с объектами залипшими после исполнения сценария. По идее файл должен получиться минимальным. Прикладываю полученные файлы ТЖ. В одном из них хорошо видны залипшие объекты (запрос, строка таблицы, таблица значений) и это уже повод для разбирательства. В другом файле после исправления их нет.
Добавлено (21.06.2015, 14:49) --------------------------------------------- Кстати, сейчас проверил объекты упомянутые в ТЖ как залипшие: ирКэш, ирОбщий, ирСервер, ирПривилегированный. Они реально залипают. Это и есть та известная проблема?
Сообщение отредактировал flas99 - Воскресенье, 21.06.2015, 14:51 |
|
| |
tormozit | Дата: Воскресенье, 21.06.2015, 17:31 | Сообщение # 15 |
Генералиссимус
Группа: Администраторы
Сообщений: 6907
Репутация: 180
Статус: Оффлайн
| Да. Я имел ввиду главным образом это обсуждение. Позже кажется было еще одно, но достаточно небольшое. Цитата залипшие: ирКэш, ирОбщий, ирСервер, ирПривилегированный Да, это известная проблема. Есть как минимум несколько сценариев залипания. Портативный вариант намного сложнее в плане количества и освобождения циклических цепочек ссылок.
|
|
| |