CftClub.ru
Клуб специалистов ЦФТ-Банк

OOXML как сожрать всю память в процессе.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеПн Ноя 02, 2015 09:04   OOXML как сожрать всю память в процессе. Ответить с цитатой
Полезность: 1
Вот такой нехитрый код для вывода отчёта
нехило отъедает памяти...
т.к. каждая ячейка по сути пишется в таблицу в памяти...

Код:

pragma include ([RUNTIME]::[MACRO_LIB]);
pragma macro(xl, '[OOXML]::[API_XL]');
xlsx          blob;               -- результат печати (BLOB с содержимым xlsx-файла)

begin   
   &xl.init_xls;                                                     --Инициализируем OOXML

   for i in 1..60000
   loop
      for j in 1..100   
      loop   
         &xl.cell( i, j, '111111111111111111111111111111111111111111111 ');
      end loop;
      debug_pipe('i='||i,0);
   end loop;      
   
   xlsx := ::[SHABLON_DOC].[LIB_OOXML].xl_finish
            ( p_show      == true         -- Открывать (отображать) сформированный файл на машине пользователя
            , p_description == 'фигня'    -- Описание отчета
            );   
end;


На тестовой вылетает уже на строке 13000.
ORA-06500: PL/SQL: Ошибка памяти ORA-04030: выход за пределы памяти процесса при попытке выделить 16328 байт (koh-kghu sessi,pmuccst: adt/record) ORA-06512: на "IBS.Z$OOXML_XL", line 1379 ORA-06512: на "IBS.Z$OOXML_API_XL", line 239 ORA-06512:

На рабочей тормозит на 1 минуту и выдаёт ещё 3000 строк и снова тормозит и так видимо пока всё не съест.

т.е. вывод - не выводите так большие отчёты ?
KhrushchevAV
Участник со стажем


Вступление в Клуб: 17.10.2014
СообщениеПн Ноя 02, 2015 10:09    Ответить с цитатой
Полезность: Нет оценки
Хороший пример.
Тоже получил:
Код:
ORA-06500: PL/SQL: Ошибка памяти
ORA-04030: выход за пределы памяти процесса при попытке выделить 16328 байт (koh-kghu sessi,pmuccst: adt/record)

Но, на строке 52439.
Страшное дело этот OOXML...
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПн Ноя 02, 2015 10:21   Re: OOXML как сожрать всю память в процессе. Ответить с цитатой
Полезность: Нет оценки
Цитата:

Код:

   for i in 1..60000
   loop
      for j in 1..100   
      loop   
         &xl.cell( i, j, '111111111111111111111111111111111111111111111 ');
      end loop;
      debug_pipe('i='||i,0);
   end loop;       
 



100 колонок 60000 строк, отчет даже и небольшой, бывали и побольше
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеПн Ноя 02, 2015 10:39   Re: OOXML как сожрать всю память в процессе. Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
т.е. вывод - не выводите так большие отчёты ?

вывод - сообщите о проблеме в ЦФТ, но желательно получить ошибку на дистрибутивном отчете.
KhrushchevAV
Участник со стажем


Вступление в Клуб: 17.10.2014
СообщениеПн Ноя 02, 2015 13:59    Ответить с цитатой
Полезность: Нет оценки
Цитата:
сообщите о проблеме в ЦФТ, но желательно получить ошибку на дистрибутивном отчете.


Вы правы, Александр. С точки зрения теории менеджмента - это, наверное, правильный путь.

С точки зрения технаря практика...
Ну вот уработаешься ты. Найдешь отчет. Оформишь заявку. Что ответят через энное время? (Проставьте вероятность).
- посоветуют добавить памяти
- исправят один этот отчет
- исправят библиотеку (хи-хи)

А ведь для правильного решения уже все в этом обсуждении есть. Кусок кода стабильно приводящий к ошибке.
Заведите его в джиру (или куда вы там заводите) "со слов клиента".
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеПн Ноя 02, 2015 14:12    Ответить с цитатой
Полезность: Нет оценки
KhrushchevAV пишет:
Вы правы, Александр. С точки зрения теории менеджмента - это, наверное, правильный путь.

С точки зрения технаря практика...
Ну вот уработаешься ты. Найдешь отчет. Оформишь заявку. Что ответят через энное время? (Проставьте вероятность).
- посоветуют добавить памяти
- исправят один этот отчет
- исправят библиотеку (хи-хи)

А ведь для правильного решения уже все в этом обсуждении есть. Кусок кода стабильно приводящий к ошибке.
Заведите его в джиру (или куда вы там заводите) "со слов клиента".


Это да, но я такой же технарь, как и Вы, и, к сожалению (или к счастью), не уполномочен заводить заявки, уж тем более от имени клиентов.
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеВт Ноя 03, 2015 02:58   Re: OOXML как сожрать всю память в процессе. Ответить с цитатой
Полезность: Нет оценки
Amper пишет:
Alkov пишет:
т.е. вывод - не выводите так большие отчёты ?

вывод - сообщите о проблеме в ЦФТ, но желательно получить ошибку на дистрибутивном отчете.


Вот именно что искать придётся в дистрибутивном отчёте.
Если прислать локал - давай до свидания.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеВт Ноя 03, 2015 06:41   Re: OOXML как сожрать всю память в процессе. Ответить с цитатой
Полезность: Нет оценки
Если рассматривать именно повторяемые куски, то в OOXML (не в пакете, а в формате) предусмотрена часть для общих кусков. Может быть, и в пакете она предусмотрена?
ulge
Участник со стажем


Вступление в Клуб: 02.11.2015
СообщениеСр Ноя 11, 2015 13:50    Ответить с цитатой
Полезность: Нет оценки
Мы на днях в банке выводили своим отчетом в OOXML оборотно-сальдовую ведомость по всем счетам банка - проверяющие заказали в виде файла Excel. Получилось 840 тыс. счетов и 13 колонок (самая широкая колонка - наименование счета). Файл сформировался за 15 минут, включая время вычисления остатков и оборотов. Во время формирования процесс занимал максимум 10 Гб PGA. Причем форматирование делалось построчно по образцу строки из деталей из шаблона. Так что строчки получились с границами и числа правильно выравнены. А где может понадобиться 100 колонок???
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Ноя 11, 2015 13:58    Ответить с цитатой
Полезность: Нет оценки
ulge пишет:
Мы на днях в банке выводили своим отчетом в OOXML оборотно-сальдовую ведомость по всем счетам банка - проверяющие заказали в виде файла Excel. Получилось 840 тыс. счетов и 13 колонок (самая широкая колонка - наименование счета). Файл сформировался за 15 минут, включая время вычисления остатков и оборотов. Во время формирования процесс занимал максимум 10 Гб PGA. Причем форматирование делалось построчно по образцу строки из деталей из шаблона. Так что строчки получились с границами и числа правильно выравнены. А где может понадобиться 100 колонок???


Отчет сервисера по кредитам - Расшифровка за отчетный период, в текущем варианте 105 колонок, там практически полная информация... от закладной до страховки по кредитам
Ходовая вещь
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Ноя 11, 2015 14:04    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:

Отчет сервисера по кредитам - Расшифровка за отчетный период, в текущем варианте 105 колонок, там практически полная информация... от закладной до страховки по кредитам
Ходовая вещь

я такой делал лет 5 назад, то ли 137, то ли 147 колонок в представлении (оттуда потом excel печатали) Smile
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru