Оптимизация запроса 8.2. (СКД) Ошибка "Недостаточно памяти" #633297


#0 by Pereliviya
День добрый! Помогите оптимизировать запрос. При формировании отчета вылетает "Недостаточно памяти". Если ставить Отбор по определенной номенклатуре, то работает. На чем рабочая база не скажу. Но тестовая, на которой мне дали тестировать отчет - файловая. Платформа 8.2. Конфигурация Комплексная Автоматизация 1.1.14.1. Заказчик хочет все и сразу, как говорится. В одном отчете объединить несколько данных: и остатки в разрезе филиалов и расходы по филиалам, и резерв, и товар в пути с разбивкой по датам (колонкам), И Общий расход с разбивкой по датам (колонкам) и т.д. Объем данных конечно большой, но может дело в моем запросе.... Отчет написан на СКД. Вот мое творение: Ах да, при открытии отчета заполняются параметры. Все обязательные. Меня интересует это из-за большого объема информации ошибка или из-за некорректного запроса? Спасибо! Жду ваших идей.
#0 by Pereliviya
День добрый! Помогите оптимизировать запрос. При формировании отчета вылетает "Недостаточно памяти". Если ставить Отбор по определенной номенклатуре, то работает. На чем рабочая база не скажу. Но тестовая, на которой мне дали тестировать отчет - файловая. Платформа 8.2. Конфигурация Комплексная Автоматизация 1.1.14.1. Заказчик хочет все и сразу, как говорится. В одном отчете объединить несколько данных: и остатки в разрезе филиалов и расходы по филиалам, и резерв, и товар в пути с разбивкой по датам (колонкам), И Общий расход с разбивкой по датам (колонкам) и т.д. Объем данных конечно большой, но может дело в моем запросе.... Отчет написан на СКД. Вот мое творение: Ах да, при открытии отчета заполняются параметры. Все обязательные. Меня интересует это из-за большого объема информации ошибка или из-за некорректного запроса? Спасибо! Жду ваших идей.
#1 by mikecool
неправильно проверять творение на другом типу Субд и где фотка?
#2 by mikecool
"Недостаточно памяти" просто может быть оттого, что ограничили память на процесс на скуле, да и раб. процесс у 1С имеет всего 2 гига для работы
#3 by aleks-id
>>раб. процесс у 1С имеет всего 2 гига для работы я думал все на х64 давно перешли...
#4 by mikecool
а в 64 версии рабочие процессы сервера 1с не продолжают юзать по 2 гиг?
#5 by Нуф-Нуф
давай запрос
#6 by Maxus43
откуда дровишки?
#7 by Pereliviya
Пожалуйста, запрос: ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ    (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура ВЫБРАТЬ    (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура, ВЫБРАТЬ    И (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура ВЫБРАТЬ    И (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура ВЫБРАТЬ    И (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ ВЫБРАТЬ
#8 by mikecool
+4 Основным преимуществом 64-разрядного сервера "1С:Предприятия 8.1" является возможность использования практически неограниченного адресного пространства, выделяемого рабочему процессу. уже не так ))
#9 by Живой Ископаемый
2 Надо было сказать: Я тот "Рип Ван Винкль"
#10 by saaken
убери полное соединение
#11 by Pereliviya
в моем случае нужно полное соединение, НО, если поставить левое, все та же проблема. Хотя..... ща попробую внутреннее поставить...
#12 by Aprobator
не надо сгруппировать и сумма при работе с виртуальными таблицами.
#13 by mikecool
:)
#14 by Aprobator
вот это в мемориз - однозначно. Во первых какая еще сумма у регистра сведений? Во вторых условие в праметры виртуальной таблицы.
#15 by Axel2009
из 9 запросов к ТоварыНаСкладах необходимо сделать один
#16 by Aprobator
все условия какие только можно в параметры виртуальных таблиц.
#17 by Pereliviya
учитываю все рекомендациии.... ща пробую все условия внуть вирт таблице установить и убрать группировки... сделаю. отпишусь.
#18 by Aprobator
+ 100500 сначала все по условию по периоду выбирается в ВТ. А потом уже из нее по условиям раскладывается куда надо.
#19 by Axel2009
+ в данном случае полное объединение лучше сразу было оформить через объединить все. тогда полное соединение отработает. а вот это ВЫБРАТЬ    Остатки.Номенклатура, будет NULL возвращать если нет остатков по номенклатуре. запрос отработает некорректно
#20 by Axel2009
+ тогда КАК полное соединение отработает.
#21 by ptiz
Зачем тебе группировкам по дням в ТоварВПути3, если ты её не используешь?
#22 by Pereliviya
группировку по дням использую в СКД настройках установила все условия во вирт.таблицах - не помогло. изначально так и работало через объединение, но все равно было недостаточно памяти. Переделала на соединение для проверки, но итог один.
#23 by prog01
какая полатформа? загрузки документа. по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {    Форма: Элемент    Тип: { @
#24 by ptiz
" группировку по дням использую в СКД настройках" - как именно, если ты не вытащил это поле в конечной таблице? У тебя все данные умножаются на кол-во дней.
#25 by Pereliviya
платформа 8.2.15.318
#26 by Pereliviya
вот самый первый запрос через объединение ВЫБРАТЬ    ИтогТаблицы.Номенклатура КАК Номенклатура,    ИтогТаблицы.Номенклатура.ВхождениеВМатрицу КАК ВхождениеВМатрицу,    (ВЫБРАТЬ        0,        0,        СУММА(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток),        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        NULL,        NULL,        0        0,        0,        0,        СУММА(ТоварыНаСкладахОборотыПриход.КоличествоПриход),        0,        0,        0,        0,        0,        0,        0,        0,        0,        NULL,        NULL,        0        (ТоварыНаСкладахОборотыПриход.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг                ИЛИ ТоварыНаСкладахОборотыПриход.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары)            0,        0,        0,        0,        СУММА(ТоварыНаСкладахОбороты.КоличествоРасход),        0,        0,        0,        0,        0,        0,        0,        0,        ТоварыНаСкладахОбороты.ПериодМесяц,        NULL,        0    ГДЕ        (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг                ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары                ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)            0,        0,        0,        0,        0,        СУММА(КемеровоРасход.КоличествоРасход),        0,        0,        0,        0,        0,        0,        0,        NULL,        NULL,        0    ИЗ        РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода {(&НачалоПериода)}, &КонецПериода {(&КонецПериода)}, Авто, , Склад В ИЕРАРХИИ (&ФилиалКемерово)) КАК КемеровоРасход    ГДЕ        (КемеровоРасход.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг                ИЛИ КемеровоРасход.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары                ИЛИ КемеровоРасход.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)        СГРУППИРОВАТЬ ПО        КемеровоРасход.Номенклатура        0,        0,        0,        0,        0,        0,        СУММА(РасходТомск.КоличествоРасход),        0,        0,        0,        0,        0,        0,        NULL,        NULL,        0    ИЗ        РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода {(&НачалоПериода)}, &КонецПериода {(&КонецПериода)}, Авто, Склад В ИЕРАРХИИ (&ФилиалТомск)) КАК РасходТомск    ГДЕ        (РасходТомск.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг                ИЛИ РасходТомск.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары                ИЛИ РасходТомск.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)        СГРУППИРОВАТЬ ПО        РасходТомск.Номенклатура        0,        0,        0,        0,        0,        0,        0,        СУММА(РасходНК.КоличествоРасход),        0,        0,        0,        0,        0,        NULL,        NULL,        0    ИЗ        РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода {(&НачалоПериода)}, &КонецПериода {(&КонецПериода)}, Авто, Склад В ИЕРАРХИИ (&ФилиалНК)) КАК РасходНК    ГДЕ        (РасходНК.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг                ИЛИ РасходНК.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары                ИЛИ РасходНК.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)        СГРУППИРОВАТЬ ПО        РасходНК.Номенклатура        0,        0,        0,        0,        0,        0,        0,        0,        СУММА(ОстаткиКемерово.КоличествоКонечныйОстаток),        0,        0,        0,        0,        NULL,        NULL,        0    ИЗ        0,        0,        0,        0,        0,        0,        0,        0,        0,        СУММА(ОстаткиНК.КоличествоКонечныйОстаток),        0,        0,        0,        NULL,        NULL,        0    ИЗ        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        СУММА(ОстаткиТомск.КоличествоКонечныйОстаток),        0,        0,        NULL,        NULL,        0    ИЗ        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        СУММА(ЦеныНоменклатурыСрезПоследних.Цена),        0,        NULL,        0        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        NULL,        0        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        0,        ЗаказыПоставщикамОстатки.КоличествоОстаток
#27 by Pereliviya
ВЫБРАТЬ        .... в каком месте не выбраны поля?
#28 by Pereliviya
ну подскажите что может быть????
#29 by ptiz
Тьфу на тебя так поля называть! :)
#30 by Pereliviya
уж как смогла :))
#31 by ptiz
Ты прикинь примерно, сколько строк получится в выходной таблице. Выведи отдельно ТоварВПути3 и итоговую таблицу без соединения с ТоварВПути3.
#32 by Pereliviya
ууу.... там очень много строк.... сделаю скажу цифры.
#33 by ДемонМаксвелла
дело не в запросе, даже группировка в запросе не имеет особого значения. СКД нормально обрабатывает миллионы строк, а вот вывести их в табличный документ не может, т.к. он целиком находится в оперативной памяти, и памяти клиента не хватает.
#34 by Pereliviya
товар в пути  2366 строк, остальная таблица 25790 строк
#35 by Pereliviya
какое решение?
#36 by ДемонМаксвелла
делать вывод СКД программно, контролировать количество строк, прекращать вывод не дожидаясь "Недостаточно памяти". убрать расшифровку - слегка поможет.
#37 by ДемонМаксвелла
проблема наступает при миллионах строк. 25000 - это детский лепет.
#38 by Pereliviya
согдасна. Но вот вылетает же
#39 by ДемонМаксвелла
оценивать нужно количество строк в отчете, а не в исходных таблицах. при соединении двух таблиц по 1000 записей уже технически возможно получить миллион.
#40 by Pereliviya
эта проблема появилась, когда добавилась колонка общего расхода по месяцам.
#41 by ДемонМаксвелла
сделай вывод СКД программно, количество строк в итоговом отчете посчитай в таком цикле:
#42 by ptiz
У неё идет соединение этих двух таблиц, так что записей будет больше. Но если "товар в пути  2366 строк", то не намного больше. Не должно падать. Либо кол-во строк неверно посчитано.
#43 by Kashemir
Проблема озвученная в является клиентской проблемой и наиболее вероятно возникает при получении слишком большого количества результатов - прав. Но есть и второй вариант - размер самой базовой настройки может превысить некое фиксированное значение - до выполнения запроса даже дело не дойдет. У меня был такой опыт - запрос для схемы строился на основе справочника показателей - сотня таблиц объединения показателей с ~400 параметрами - слет по памяти. Причем сам процесс 1с сам по себе отжирал при этом не более 400мб
#44 by Axel2009
ВЫБРАТЬ прикольное перемножение данных. если номенклатура поступает 2 раза, то на выходе получится 4096 строк
#45 by Aprobator
это как? Обращение вроде к виртуальной таблице регистра свертку делает. Другое дело что услове ГДЕ тут нафиг не нужно. Не может в остатках 0 быть.
#46 by Axel2009
группировка то по дням есть. значит сколько раз поступало, столько строк и будет
#47 by Aprobator
группировку вижу, но не вижу перемножения.
#48 by Axel2009
поторопился.. масштабы поменьше но все же ВЫБРАТЬ   (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг           ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары           ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура, ВЫБРАТЬ эти 2 запроса при соединении по номенклатуре что сделают?
#49 by Aprobator
поскольку свертка есть в обоих подзапросах, то умножение будет  при соединении только по номенклатуре, если будет еще добавлено и соединение по периодам, то ничего страшного не вижу.
#50 by Aprobator
хотя месяц с днем - небольщой кирдык то будет конечно.
#51 by Pereliviya
Периоды выбраны для разных целей. Поле "ПоМесяцам" разбивает Расход по месяцам за выбранный период, поле "ТоварВПути" разбивает на конкретные даты заказанных товаров, но еще  не поступивших, т.е. в пути. Вот пример отчета: Если есть другие варианты решения подобной задачи буду рада увидеть и применить в своей задачи.
#52 by Fragster
где фотка?
#53 by Fragster
падает на запросе или на "вывод отчета"?
#54 by Pereliviya
на выводе отчета
#55 by Axel2009
да без разницы для каких целей. если поступлений будет 3, а отгрузок будет 5, как их выводить в отчете?
#56 by Pereliviya
?
#57 by Fragster
а фотка где?
#58 by Fragster
на скольки %?
#59 by Pereliviya
зачем? на 0 % стоит думает и выводит "Недостаточно памяти".
#60 by Kashemir
3 год на форуме и спрашиваешь зачем ? Открой параллельно диспечер задач и следи за потреблением памяти - обрати внимания на максимальное значение перед вылетом ошибки
#61 by Pereliviya
3 года как зарегистрирована - не показатель.
#62 by Fragster
файловая?
#63 by Pereliviya
к сожалею да. Файловая. При формировании отчета сжирает всю память. Память доходит до 3,95 ГБ Физическая память всего 4086               свободно 4  - это при пике (ошибке).
#64 by Fragster
потребление памяти надо смотреть процессом, а не "физическая память". или у тебя своп выключен? а если файловая - то нужно курить запрос на предмет соединений, даже неявных (получение данных через 2 и более точек).
#65 by Fragster
удаление неиспользуемых временных таблиц, если неправильных соединений нет, просто объем такой. ну а если запрос оптимален, то тут только обработка частями или скуль помогут. кстати, реальный текст запроса может отличаться от того, что задано в конфигураторе, соответственно нужно использовать консоль отчетов, которая показывает этот реальный текст
#66 by Fragster
а просто в консоли запросов отчет выполняется?
#67 by Pereliviya
процессом доходит до 1 815 304 КБ (если я правильно поняла) в консоли отчет спокойно формируется.
#68 by Pereliviya
попробую временные таблицы удалять... спасибо за совет
#69 by Fragster
получи реальный текст запроса, а потом его в консоль запросов запихай
#70 by Aprobator
если в консоли формируется, то автозаполнение в СКД в сад и явно указываешь какие поля доступны для вывода и условий в СКД.
#71 by ЧеловекДуши
32-ух битное, а это лихо так написать запрос, что бы он отъел все пространство до самого краха :DDDD ... Все дело в фото...
#72 by ЧеловекДуши
+Лучше начать смотреть в ту сторону, что у вас неправильное представления ведения учета, коль приходится лопатить такой объем информации :)
#73 by Pereliviya
задача состояла написать такой отчет. Базу вижу впервые, т.е. я сторонний программист. А клиенту ну захотелось в одном отчете все и сразу... ну бывает...
#74 by Pereliviya
предложите компактнее вариант чтоб выглядело таким образом
#75 by Axel2009
сначала прочитать надо бы.
#76 by Pereliviya
и?
#77 by Pereliviya
выводить как в
#78 by Pereliviya
В общем, решила проверять свой запрос частями, чтоб понять на каком моменте у меня "Рушится". Оказалось вот этот запрос:    (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары            ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах) СГРУППИРОВАТЬ ПО    ТоварыНаСкладахОбороты.Номенклатура, эх....
#79 by Pereliviya
ну нехватает ему памяти :(((
#80 by Pereliviya
идея! :))))  "оптимизируем" условие: ВЫБРАТЬ    (НЕ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров) и.... печалько.... ничто не помогает справиться.
#81 by Pereliviya
в общем, опечалила клиента. Сказала что такой отчет можно формировать только если выбирать в отборе конкретную номенклатуру :)))
#82 by Aprobator
опять группировка
#83 by Fragster
ТИИ с логической цеслотностью. обращение к реальной таблице вместо виртуальной.
#84 by Pereliviya
что с ней, что без нее.. вылетает уже ненавистное окошко с сообщением "Недостаточно памяти" :(( Правда конечно уже не на 0%, а на 18% вылетает! Прогресс! :)))
#85 by Fragster
на закладке "макет" задай для полей макеты без расшифровок.
#86 by GANR
1. Нужно как угодно избавиться от такого количества полных соединений - на них уйма времени уходит. Наверняка то, что полным соединением делается можно сделать посредством "объединить все" и "выбор когда". 2. Временные таблицы, если они получаются большими и используются один раз работают в разы медленнее, чем вложенный запрос, т. к. в случае с ВТ уходит время для из записи выборки на жесткий диск. 3. Уже лучше. Вместо множества запросов к одной и той-же таблице (скажем, ТоварыНаСкладах) через объеднить все используй запрос один раз - не надо ничего объединять, надо так: ... выбор когда Склад = &ФилиалКемерово Тогда Количество иначе 0 конец КАК ОстатокКемерово, выбор когда Склад = &ФилиалНовосибирск Тогда Количество иначе 0 конец КАК ОстатокНовосибирск, ... Смысл понятен?
#87 by Fragster
.2 временные таблицы в 90% работают быстрее чем виртуальные в соединениях.
#88 by GANR
Хорошо-бы план запроса в SQL-варианте бы ещё поглядеть, если нужный софт и навык есть.
#89 by Pereliviya
смысл понятен, но! Упустите пока все выше сказанное. Анализируем запрос только .
#90 by Fragster
да, в этом все и дело, что виртуальная таблица - на самом деле это 2-4 вложенных запроса, из-за чего план строится кривой.
#91 by GANR
Глянуть-бы, во что транслируется - нет ли там UNION ALL по всем типам регистраторов для регистра "Товары на складах"? Если так - тогда понятно почему тормоза. Боюсь, что оптимальнее, в таком случае, может быть только ПРЯМОЙ SQL-запрос.
#92 by Pereliviya
так то конечно! Но, в самом начале говорила что база файловая.
#93 by GANR
А если, фильтр в по Регистратор ССЫЛКА ... убрать работает?
#94 by GANR
А может попробовать так вместо :    НЕ ТоварыНаСкладахОбороты.Регистратор В (ВЫБРАТЬ Ссылка ИЗ Документ.ПеремещениеТоваров)    ТоварыНаСкладахОбороты.ПериодМесяц
#95 by Pereliviya
Убрала вообще регистратор и из периодичности и из условия соответственно, все равно вылетает. Правда на 65% :)
#96 by Pereliviya
т.е. такой запрос стал:
#97 by Aprobator
и условие на регистратор пало смертью храбрых.
#98 by Pereliviya
да уже бы как-нибудь заработало :)))
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

Похожие вопросы 1С

В этой группе 1С