8.х Нагрузка запроса на сервер

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

  1. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте.
    Создавая запрос, задумался о нагрузке его на сервер.

    Суть в следующем:
    Существует 2 таблицы:
    1. Таблица разложенных труб
    2. Таблица сваренных труб.

    В первой таблице 3 реквизита: Номер трубы, начальные координаты (ПКОт), конечные координаты (ПКДо).

    Во второй таблице 3 реквизита: Номер трубы1, координаты сваренного стыка (ПК), номер трубы2


    В выборке нужно получить трубы, вида Труба - ПК - Труба, которые состыкованы, но еще не сварены.

    Пока что нашел только один способ сделать запрос:
    Код:
    "ВЫБРАТЬ
         |    ТрубаРаскладка.ТрубаНом,
         |    ТрубаРаскладка.ПКОт,
         |    ТрубаРаскладка.ПКДо
         |ПОМЕСТИТЬ ВТ_ТрубаРаскладка
         |ИЗ
         |    РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка
         |;
         |
         |////////////////////////////////////////////////////////////////////////////////
         |ВЫБРАТЬ
         |    ВТ_ТрубаРаскладка.ТрубаНом,
         |    ВТ_ТрубаРаскладка.ПКОт,
         |    ВТ_ТрубаРаскладка.ПКДо,
         |    ТрубаРаскладка.ТрубаНом КАК ТрубаНом1,
         |    ТрубаРаскладка.ПКОт КАК ПКОт1,
         |    ТрубаРаскладка.ПКДо КАК ПКДо1
         |ПОМЕСТИТЬ ВТ_СтыковкаТрубы
         |ИЗ
         |    ВТ_ТрубаРаскладка КАК ВТ_ТрубаРаскладка
         |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка
         |        ПО ВТ_ТрубаРаскладка.ПКДо = ТрубаРаскладка.ПКОт
         |;
         |
         |////////////////////////////////////////////////////////////////////////////////
         |ВЫБРАТЬ
         |    ВТ_СтыковкаТрубы.ТрубаНом,
         |    ВТ_СтыковкаТрубы.ПКДо,
         |    ВТ_СтыковкаТрубы.ТрубаНом1,
         |    Сварка.ТрубаНом1 КАК ТрубаНом11,
         |    Сварка.ТрубаНом2,
         |    Сварка.ПК КАК ПК
         |ИЗ
         |    ВТ_СтыковкаТрубы КАК ВТ_СтыковкаТрубы
         |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Сварка КАК Сварка
         |        ПО ВТ_СтыковкаТрубы.ПКДо = Сварка.ПК
         |ГДЕ
         |    Сварка.ПК ЕСТЬ NULL
         |
         |УПОРЯДОЧИТЬ ПО ПК";
    В обеих таблицах в итоге максимальное количество строк будет по 375000 шт.
    На сколько сильно будет тормозить запрос? Есть варианты разгрузить сервер?
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Смотря какой сервер сколько у него оперативки и сколько там места на файл подкачи выделено и если база скульная то хоро было бы если temp db на отдельном диске был бы.
    Ради теста т.к оличество записей большое можно поробовать проиндексировать еще ВТ.
  3. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    ВТ - Виртуальная таблица?
    А как ее в запросе проиндексировать?
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да.
    ИНДЕКСИРОВАТь ПО

    Наберите в инетет - полно статей
    GreenSH нравится это.
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    первая временная таблица - явно лишняя.
    да и вообще одним запросом все можно сделать. Зачем временные таблицы создавать?
  6. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Например...
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ВЫБРАТЬ
    | ВТ_ТрубаРаскладка.ТрубаНом,
    | ВТ_ТрубаРаскладка.ПКОт,
    | ВТ_ТрубаРаскладка.ПКДо,
    | ТрубаРаскладка.ТрубаНом КАК ТрубаНом1,
    | ТрубаРаскладка.ПКОт КАК ПКОт1,
    | ТрубаРаскладка.ПКДо КАК ПКДо1,
    | Сварка.ТрубаНом1 КАК ТрубаНом11,
    | Сварка.ТрубаНом2,
    | Сварка.ПК КАК ПК
    |ИЗ
    | РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка КАК ВТ_ТрубаРаскладка
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка
    | ПО ВТ_ТрубаРаскладка.ПКДо = ТрубаРаскладка.ПКОт
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Сварка КАК Сварка
    | ПО ВТ_ТрубаРаскладка.ПКДо = Сварка.ПК
    |ГДЕ
    | Сварка.ПК ЕСТЬ NULL
    |
    |УПОРЯДОЧИТЬ ПО ПК
    GreenSH нравится это.
  8. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Красиво. Только убрать надо перед "КАК ВТ_ТрубаРаскладка" - "КАК ТрубаРаскладка"... а то ругается
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    По индексам конкретно - временную таблицу
    ВТ_ТрубаРаскладка по полю ПКДо, регистр сведений Сварка - по ПК

    Если либо ПКОт либо ПКДо в регистре сведений ТрубаРаскладка уже отиндексированы (например, стоят первым измерением), то первая временная таблица не нужна, во втором запросе делать сразу внутреннее соединение регистра самого с собой. Если при этом еще и ПК в регистре Сварка с индексом, то можно все одним запросом.

    Без индексов - для грубой оценки - второй запрос без индексации обработает максимально 375000*375000 записей (ага, 150 миллиардов). Если сделать все одним запросом и не будет ни одного подходящего индекса - умножить еще раз на 375000
  10. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Лучше через временные и индексировать.
    Плюс этого - это то что написал выше Николай, плюс то что в ВТ есть уже определнное количесво записей и скуль знает сколько.
    По этому когда он будет строить план запроса - он будет делать это более оптимально т.к знает с каким количество записей ему придется работать

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