8.х Ускорение загрузки отчетов

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

  1. TopicStarter Overlay
    serikadze
    Offline

    serikadze Опытный в 1С

    Регистрация:
    5 авг 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Пришла в голову такая идея, дабы разгрузить сеть и увеличить скорость загрузки отчетов решил запросы исполнять на сервере, а выведение строк отчетов на клиенте. Так вот, за имением достаточно сильного парка компьютеров, в количестве 20 штук, с процессорами класса Core 2 Duo не ниже E4400, и оперативной памяти в 2048 Mb, заметил что при загрузки отчетов происходит полная связь с сервером и передаются данные отчетов по-строчно, логично сделать вывод что в имеет место быть латентность, и при количестве строк в 100 она уже становится сильно заметной, отсюда так сказать и отступаю.

    Прошу у вас совета как мне реализовать ускорение загрузки отчетов с помощью моей идеи, или может какой то вашей.

    Лично я сделал пока текущее: создал общий модуль для выполнения запросов с пометкой СЕРВЕР, то что код будет исполняться только там. Код следующий:
    Код:
    // возврат результата выполнения запроса на сервере
    Функция ВыполнениеЗапроса(ТекстЗпр, СпсЗнч) Экспорт 
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗпр;
    Для каждого стр из СпсЗнч цикл
    Запрос.УстановитьПараметр(стр.Представление,стр.Значение);
    КонецЦикла;
    Результат = Запрос.Выполнить();
    возврат Результат;
    КонецФункции
    
    соответственно в формирующемся отчете, запрос отсылаю в этот модуль и затем получаю его результат, предварительно основную процедуру где происходит формирование отчета по строчно, я заключил в #Если Клиент тогда ... #КонецЕсли
    увеличение производительности не очень большое, если громоздкий отчет формировался за 10 минут, то с моим подходом он сформировался за 9. Посему и обращаюсь к вам. Прошу советов и помощи в увеличении производительности 1С.

    p.s. может не по теме, но если не трудно подскажите где посмотреть преимущества и недостатки терминального сервера против клиент-серверного варианта. заранее благодарю.
  2. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    SERIKADZE, разницы между клиент-серверным и терминальным вариантом нет, это вообще разные понятия в данном случае. клиент-серверный вариант - это организация хранения и доступа к БД, она может быть реализована файловым вариантом, а терминальный доступ - это способ соединения с сервером, а уж так ты открываешь 1С. то, как ты хотел разгрузить сеть, это называется кластеризацией, если я не ошибаюсь. если у вас сам сервер мощный и не оч много пользователей работает одновременно в 1С, то кластеризация вряд ли понадобится.
    по поводу уменьшения времени создания отчёта:
    я так понимаю, что конфа самописная.
    1. по поводу установки параметров. не стоит это делать в цикле. есть замечательная конструкция В(<список>). подробнее смотри в доках
    2. старайся делать текст запроса как можно эффективнее
    и на будущее, не делай выполнение запроса в цикле, это грубейшая ошибка.
  3. TopicStarter Overlay
    serikadze
    Offline

    serikadze Опытный в 1С

    Регистрация:
    5 авг 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Уважаемый wertklop, во-первых спасибо огромное за отзыв. Во-вторых хотел бы немного уточнить по поводу своей базы. Пользователей насчитывается 20. Самых активных 12 человек, работают все одновременно. База 1С, построена на основе 8.0 УПП, но грубо говоря, она (сама оригинальная УПП) практически вся не используется, т.е. написано очень много своих собственных документов и отчетов. Выход на запросы через циклы я не совершаю в принципе, потому что сам считаю также как и вы что это очень грубейшая ошибка. А по поводу конструкции В(<список>), я ее не нашел в 8.0 может она реализована где то в более новых версиях?
    А что вы думаете по поводу моего подхода к формированию отчетов? (через запросы исполняемые в общем модуле на сервере...)
  4. mialord
    Offline

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

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

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    1. по поводу списка. можно сделать так:
    Код:
    ВЫБРАТЬ
    Номенклатура.Ссылка
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка В (&Список)
    
    
    , где Список - это ваш СпсЗнч. я точно не могу сказать, есть ли данная конструкция в 8.0, но 8.1 есть точно. в любом случае, можно установить платформу 8.1 и конвертировать базу.
    , либо с использованием Временных таблиц
    2. по поводу вашего подхода к формированию отчётов.
    использование общих модулей можно использовать, если в свойствах поставить галочку "Привилегированный". но тут необходимо учитывать, насколько упадёт производительность в отношении других пользователей. момимо этого существуют ещё 2 момента по производительности, это "железо" и код процедур. с железом всё понятно, а вот по коду хочу сказать, что то, насколько вы напишите запросы и правильно организуете структуру конфы, будет во многом зависеть время выполнения процедуры. вот напримеря, ещё год назад, года я плохо знал 8 и технологию запросов, написал отчёт, который выполнялся аж 5 часов!!!! и только потом, поняв многие тонкости, понял, что мог бы написать этот же отчёт, который выполнялся бы во много раз быстрее. отсюда вывод: оптимизируйте запросы и сам код!
  6. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Так, народ, давайте расставим точку над И.
    1. При разработке базы данных всегда лежит выбор между двух зол, производительность<-->надёжность. Увеличивая производительность базы данных мы автоматически уменьшаем надёжность этой базы. 1С выбрала вариант который находится как раз по середине, всё остальное чревато.
    2. Для увеличения производительности базы данных необходимо её перепроектировать, что чаще значительно сложнее чем создать заново.
    3. Для увеличения скорости работы базы данных рекомендуется использовать процессоры ориентированные на работу с SQL, самый гуд вариант xeon, вариант дорогой, но очень производительный. На ряду с xeon-ом желательно поставить оперативку на 4 гига, можно ограничиться и 2-я, но всё же, всё что ни влезет в оперативу будет вывалено на жёсткий, а на данный момент это самый медленно работающий носитель информации (исключением являются накопители со скоростью 15000 об/мин, они специально разработаны для баз). При возможности надо подобрать жёсткий диск ориентированный на работу с базами. Теперь на всё это дело прикручиваете охлождение (на оперативку желательно тоже броньку воткнуть).
    Результат - сервак, который Вам прослужит достаточно долго и сохранит нервы сотрудникам Вашей организации.
    4. Для оптимизации запросов используйте приведение к типу полей запроса для уменьшения таблиц запроса, напимер тип всессылки, наклепает Вам столько таблиц при запросе, что вы будете долго сидеть и нервно курить ожидая завершения.
    Удачи!
  7. TopicStarter Overlay
    serikadze
    Offline

    serikadze Опытный в 1С

    Регистрация:
    5 авг 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Всем большое спасибо за отзывы... считаю тему исчерпанной.

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