Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 07:38

Длительное формирование простого самописного отчета 1С 8.2

Автор Lefont, 11 мар 2013, 20:52

0 Пользователей и 1 гость просматривают эту тему.

Lefont

Имеем: 1.) "Сервер": Pentium 4 3Ghz (478 сокет), 768Mb ОЗУ, старенький жесткий диск на 20 Гб. На "сервере" стоит debian 6.0.6, с самбой.
             2.) Сеть 100 Мб/с. 
             3.) Самописную конфигурацию, и соответственно самописные отчеты. Файловый вариант. Размер базы всего ни чего 70 Мб.

При формировании по сети простенького отчета, необходимо времени примерно с полминуты. При переносе БД на рабочий компьютер, и формировании на нем, не более 1-1.5 сек. С помощью встроенных средств замера производительности, было выяснено, что наибольшее время отнимает запрос (код ниже), все остальные действия занимают ничтожно малое время (хорошо если в совокупности набежит 1 с.). Как я понял, это происходит из-за того, что при выполнении этого запроса несколько раз, он каждый раз обращается к HDD по сети, что сильно замедляет работу.

Вопрос, что может помочь в данном случае лучше:
1.) Переписывание/переделывание конфигурации под клиент-серверный вариант, с последующей заменой "сервера" на более мощный. Если правильно понимаю, это позволит убрать проблему постоянного обращения запроса по сети к HDD, и все запросы будут выполнятся на нормальном железе, что так же увеличит быстродействие.
2.) Переписывать все отчеты/запросы, таким образом, что бы они одним обращением к HDD получили все необходимые данные, и уже "внутри себя" формировали нужные данные для подсчета (очень плохо себе это представляю, т.к. мало работал с компоновкой данных в запросе).
3.) Или же что то не так в коде? При необходимости предоставлю целиком весь код отчета.

Код запроса:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ИсторииБолезни.НомерИБ,
               | ИсторииБолезни.НомерИБОтделения,
               | ИсторииБолезни.СрокЛечения
               |ИЗ
               | РегистрСведений.ИсторииБолезни КАК ИсторииБолезни
               |ГДЕ
               | ИсторииБолезни.ДатаВыписки >= &Дата1
               | И ИсторииБолезни.ДатаВыписки < &Дата2
               | И ИсторииБолезни.Исход <> &Исход
               | И ИсторииБолезни.НаходитсяВОтделени = &НаходитсяВОтделени
               | И ИсторииБолезни.Контингент = &Контингент";
   
Запрос.УстановитьПараметр("Дата1", Отчет.Дата1);
Запрос.УстановитьПараметр("Дата2", Отчет.Дата2);
Запрос.УстановитьПараметр("Исход", Перечисления.Исход.ПустаяСсылка());
Запрос.УстановитьПараметр("НаходитсяВОтделени", НаходитсяВОтделени);
Запрос.УстановитьПараметр("Контингент", Контингент);

РезЗапроса = Запрос.Выполнить();


SlazZy

Честно говоря хотя запрос и можно немного оптимизировать, но в целом ничего критичного в нем нет. Покажите структуру измерений регистра, это важно.

Lefont

Разобрался в чем дело, регистр не был проиндексирован:bleh:

SlazZy

Цитата: Lefont от 06 апр 2013, 14:19
Разобрался в чем дело, регистр не был проиндексирован:bleh:
примерно про это я и хотел сказать когда спрашивал про структуру регистра :)

anonimous

Цитата: SlazZy от 06 апр 2013, 18:43примерно про это я и хотел сказать когда спрашивал про структуру регистра
капитан очевидность как всегда все знал, однако не сказал, великий учитель наверное, и причем здесь структура регистра и индексация в запросе


SlazZy

Цитата: anonimous от 06 апр 2013, 21:12апитан очевидность как всегда все знал, однако не сказал, великий учитель наверное, и причем здесь структура регистра и индексация в
ну, учитывая то, что вы это спрашиваете - для вас ни при чем:) весь смысл вашего поста это троллинг, посему мне лень отвечать как связана структура регистра и индексация...
За инфой гуглите "кластерный индекс".

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск