8.х Запросы съедают память

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем [GIGA]DEDUSHKA, 12 апр 2010.

  1. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Использую запрос в обработке, который очень долго работает. Запрос состоит из вложенных подзапросов, а также временных таблиц. Думает порадка 5 минут. Временные таблицы очищаю: Запрос.МенеджерВременныхТаблиц.Закрыть(); С самим запросом ничего не делаю. Выгружаю его в ТЗ Результат = Запрос.Выполнить().Выгрузить(); При этом с ТЗ тоже ничего не делаю. Раньше всегда думал, что при выходе из процедуры все переменные освобождаются, но как показала практика - это не так, по окончании выполнения база tempdb заняла практически все свободное пространство на диске (~25Гб). И если попытаться выполнить снова обработку, то выдаст сообщение о нехватке места. Как можно освобождать память явно для переменных типов Запрос и ТЗ?
  2. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Сейчас пробую с ТЗ делать следующее:
    Результат.Очистить();
    Результат.Колонки.Очистить();
    Надеюсь что поможет...
  3. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    P.S. По поводу думания порядка 5 мин - это на сервере: 8 ядер 2.66ГГц, 16Гб оперативы
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Приложите в виде текстового файла тест запроса.
    Скорее всего - где-то слишком большая выборка или соединение
  5. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Выборка действительно очень большая и у вас со стандартной конфигурацией не прокатит.
    Попробую объяснить суть этого запроса. У нас есть временная таблица ВрТаб, которая содержит значения свойств номенклатуры из другой базы (при этом свойства могут быть разных типов, поэтому используется несколько колонок). К этой временной таблице приклеиваю номенклатуру, чтобы отбирать только по тем номенклатурам, которые есть в текущей базе (в исходной базе номенклатурный справочник несколько больше текущей).
    СвойстваНоменклатурыВTCS - отдельный справочник, который определяет, какие свойства нужно сопоставлять (для того, чтобы отбирать только интересуемые нас свойства). В этом справочнике также хранится информация о том, какого типа данных свойство, и идентификатор свойства в другой базе.
    Запрос дольше стал думать после того, как я добавил условие на свойства типа справочник "Значения свойств объектов":
    Код:
    ЗначенияСвойствОбъектов.Значение.Ссылка = ЗСО.Ссылка
    |										И ЗначенияСвойствОбъектов.Свойство.Ссылка = ЗСО.Владелец.Ссылка
    |									ИЛИ ЗначенияСвойствОбъектов.Значение.Ссылка ЕСТЬ NULL 
    
    Дело в том, что могут быть несколько элеменов справочника "Значения свойств объектов" с одинаковым наименованием. Я вставил эту проверку на всякий случай. Сейчас вот думаю от нее отказаться...


    Основная цель запроса: отобрать разницу в свойствах номенклатуры разных баз. И в дальнейшем уже работать с этой разницей

    Вложения:

  6. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Постарайтесь исключить вложенный запрос и выполнить соединение.
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Убрать все вложенные запросы во временные таблицы. то даст стабильность показаний.
    В частности, ВЫБРАТЬ ВрТаб.NMK_ID КАК NMK_ID, -> убрать в ВТ однозначно.
    2. Что вы хотели от запроса, который использует ПОДОБНО? :) Это самая медленная операция из возможных
    3. Количество соединений - очень большое, не очень понятна структура данных, но соединений идут, как я понимаю, и по текстовым полям? Это тоже медленно.
  8. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    В общем запрос подправил, теперь стало съедать ~200Мб в процессе выполнения обработки. Если учесть что на сервере доступно ~40Гб, должно хватить на 200 запусков))). Почему память не освобождается - непонятно.

    Хотя странно, второй раз запустил - уже не убавилось

Поделиться этой страницей