8.х Зависание Планировщика на Sql

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем criptid, 9 окт 2019.

  1. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Всем добрый. Имеется сервер i5 - 6 ядер, 16гб ОЗУ, ssd, поднят Sql и 1c сервер все на одном физическом сервере, настройки сделаны оптимальные. Крутится база Торговли 10.3. Проблема следующая при открытии самописной обработки в форме которой элементами заполняется Планировщик начинается зависание секунд 12. Раньше нариканий не было. Что было сделано - Полное тестирование базы, сжатие логов, переустановка 1с сервера, пересоздание базы ничего не помогло. Начал анализировать код в процедуре ПриСозданииНаСервере идёт заполнение элементов Планировщика, запрос к физической таблице документов и результатом Выборки являестся порядка 2500 записей, по циклу идёт заполнение 2500 элементов Планировщика именно на этом месте начинаются тормоза. Пришел к выводу что работу планировщика нужно оптимизивать. При файловом режиме доступа к базе ВСЕ отлично работает никакого зависания. Сообственно сам вопрос - Какие причины что на Sql тормозит а в файловом режиме нет и возможно ли решить временно такую проблему без переноса базы в файловый режим?
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Какие операции самые "тяжелые"?
  3. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Создание по циклу элементов Планировщика
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    А в самом создании элемента планировщика какие операции?
  5. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Код:
        Если Не Результат.Пустой() Тогда
            Выборка = Результат.Выбрать();
            Пока Выборка.Следующий() Цикл
                НовыйЭлемент = Планировщик.Элементы.Добавить(Выборка.ДатаНачала, Выборка.ДатаОкончания);
                НовыйЭлемент.Текст = Выборка.НомерТелефона;
                НовыйЭлемент.Подсказка = Строка(Выборка.Автомобиль) + " " + Строка(Выборка.Работа) + " " + Выборка.НомерТелефона + Выборка.Комментарий;
       
                Шрифт = Новый Шрифт(, 10, , , , );
                НовыйЭлемент.Шрифт = Шрифт;
                НовыйЭлемент.ЦветФона = WebЦвета.Желтый;
               
                СоответствиеЗначений = Новый Соответствие;
                СоответствиеЗначений.Вставить("Боксы", Выборка.Бокс);                       
                НовыйЭлемент.ЗначенияИзмерений = Новый ФиксированноеСоответствие(СоответствиеЗначений);           
                НовыйЭлемент.Значение = Выборка.ПредЗаказ;
            КонецЦикла;
        КонецЕсли;
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    я не знаю, на чем именно 1с "тормозит" при создании элемента планировщика, а вы не предоставляете замеры производительности, предполагаю, что много данных гуляют между сервером и клиентом, чего нет при файловом варианте.

    Проверялось на самом сервере или с клиентской машины?
    Проверялось однократно или многократно и каждый раз "тормозит"?
  7. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Проверялось на самом Сервере, тормозит постоянно
    --- Объединение сообщений, 9 окт 2019 ---
    Перезапуск служб никаких изменений не дает
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Затраченное время из замера производительности по каждой операции можете показать?
  9. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    нет отладочного сервера, или можно как то отладить?
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Варианта 2:
    1. Включить отладку на боевом сервере, потом выключить. Придется останавливать сервис 1с.
    2. Поднять еще один тестовый сервис 1С рядом с боевым.

    Создаете копию рабочей БД, подключаете к тестовому сервису 1С.

    Подключать рабочую БД к тестовому сервису 1С одновременно с подключением к рабочему - категорически нельзя.
    Последнее редактирование: 9 окт 2019
  11. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Нет возможности выгнать пользователей, вечером предоставлю замер производительности
  12. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Снял замеры

    Вложения:

  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Предположения подтвердились: много данных гуляет с клиента на сервер и обратно, т.к. происходит не явный вызов сервера этим Строка(Выборка.Автомобиль) + " " + Строка(Выборка.Работа).
    Шрифт = Новый Шрифт(, 10, , , , ); - вынести за цикл.
  14. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    как правильно это сделать?
  15. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Не преобразовывать ссылку к строке. Запросом сразу получать строковые значения.
  16. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Вообщем подправил вот так
    Код:
        Если Не Результат.Пустой() Тогда
            Шрифт = Новый Шрифт(, 10, , , , );
            Выборка = Результат.Выбрать();
            Пока Выборка.Следующий() Цикл
                НовыйЭлемент = Планировщик.Элементы.Добавить(Выборка.ДатаНачала, Выборка.ДатаОкончания);
                НовыйЭлемент.Текст = Выборка.НомерТелефона;
                НовыйЭлемент.Подсказка = Выборка.Подсказка;
                НовыйЭлемент.Шрифт = Шрифт;
                НовыйЭлемент.ЦветФона = WebЦвета.Желтый;  
                СоответствиеЗначений = Новый Соответствие;
                СоответствиеЗначений.Вставить("Боксы", Выборка.Бокс);                      
                НовыйЭлемент.ЗначенияИзмерений = Новый ФиксированноеСоответствие(СоответствиеЗначений);          
                НовыйЭлемент.Значение = Выборка.ПредЗаказ;
            КонецЦикла;
        КонецЕсли;
    Все равно подвисает, у меня еще выполняется одна процедура
    Код:
    &НаСервере
    Процедура ОкраситьВремяОбеда(Начало, Конец)
      
        тзИнтервалов = Новый ТаблицаЗначений;
        тзИнтервалов.Колонки.Добавить("НачалоДня", Новый ОписаниеТипов("Дата"));
      
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |   НАЧАЛОПЕРИОДА(&НачДата, День) КАК НачалоДня
        |УПОРЯДОЧИТЬ ПО
        |   НачалоДня
        |ИТОГИ ПО
        |   НачалоДня ПЕРИОДАМИ(День, &НачДата, &КонДата)";
        Запрос.УстановитьПараметр("НачДата", Начало);
        Запрос.УстановитьПараметр("КонДата", Конец);
        Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачалоДня", "ВСЕ");
        Пока Выборка.Следующий() Цикл
            НоваяСтрока = тзИнтервалов.Добавить();
            НоваяСтрока.НачалоДня = Выборка.НачалоДня;
        КонецЦикла;
        Планировщик.ИнтервалыФона.Очистить();  
        Для Каждого СтрокаДень Из тзИнтервалов Цикл
            НачалоОбеда = НачалоДня(СтрокаДень.НачалоДня) + 13 * 60 * 60;
            КонецОбеда = КонецДня(СтрокаДень.НачалоДня) - 10 * 60 * 60 + 1;
            ИнтервалФона = Планировщик.ИнтервалыФона.Добавить(НачалоОбеда, КонецОбеда);
            ИнтервалФона.Цвет = Новый Цвет(225, 255, 225);
          
            Если ДеньНедели(СтрокаДень.НачалоДня) = 6 Тогда
                НачалоОбеда = НачалоДня(СтрокаДень.НачалоДня) + 8 * 60 * 60;
                КонецОбеда = (НачалоДня(СтрокаДень.НачалоДня) + 8 * 60 * 60) + 60 * 60 * 2;
                ИнтервалФона = Планировщик.ИнтервалыФона.Добавить(НачалоОбеда, КонецОбеда);
                ИнтервалФона.Цвет = Новый Цвет(225, 255, 225);
            КонецЕсли;
        КонецЦикла;      
      
    КонецПроцедуры
    После того как ее убираю загрузка длится порядка 2 секунд, но запуск самой обработки около 8 секунд
    Последнее редактирование: 9 окт 2019
  17. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Замер производительности чего говорит?
  18. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26

    Вложения:

  19. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Тут и оптимизировать нечего.
  20. TopicStarter Overlay
    criptid
    Offline

    criptid Опытный в 1С

    Регистрация:
    14 июл 2017
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    а зависание присутствует, сделаю условие в запросе по периоду на документы, чтобы получал не все записи а только те которые хочет увидеть пользователь, посмотрю как будет с зависанием.