Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

КА 2.2 + SQL 2012, при расчете себестоимости растет tempdb до предела.

КА 2.2 + SQL 2012, при расчете себестоимости растет tempdb до предела.
Я
   Deimlol
 
28.12.17 - 11:37
Платформа 8.3.10.2667
Партионный учет 2.2
При закрытие месяца, а именно расчете себестоимости в некоторых периодах, расчет партий доп расходов вызывает рост tempdb до предела (до 1.2 Тб).

Нашел кусок который вызывает рост:
Функция ПолучитьДанныеДляДопРасходов(ПараметрыРасчета)
...
    Запрос.Текст = ""
        // подготовка временных таблиц

        + ТекстПартииПоЗаказам()// вт ПартииПоЗаказам

        + ТекстРазделениеЗапросов()    + ТекстРегистраторыПрочих()// вт РегистраторыПрочих

        + ТекстРазделениеЗапросов()    + ТекстПериодыПартийПрочих()// вт ПериодыПартийПрочих

        + ТекстРазделениеЗапросов()
        // выборка данных

        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстОстаткиПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстПриходыПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисОстаткиСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПриходыСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисКорректировкиПоступлений()
        + ТекстОбъединениеЗапросов() + ТекстБазисПередачиТоваровСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПеремещенияСебестоимость()
+ ТекстОбъединениеЗапросов() + ТекстБазисПрошлыеПриходыТоваровСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисЗаказы()
        + ТекстОбъединениеЗапросов() + ТекстБазисУслуги()
        + ТекстСортировка;
        
    Запрос.УстановитьПараметр("РасчетныеПартииПоЗаказам", РасчетныеПартииПоЗаказам);
    
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
----------------------

Далее разбивал запрос на части и выполнял поотдельности, все части составного запроса отработали без проблем, а соединенный запрос вызывает рост tempdb и падение фонового задания. Единственное отличие в кусках запросов я не использовал "+ ТекстСортировка" но думаю это не имеет значения. Как думаете куда дальше копать?
 
 
   rs_trade
 
1 - 28.12.17 - 11:39
(0) кто то отбирает много строк и пихает их в темпдб
   WebberNSK
 
2 - 28.12.17 - 11:40
(0) писать на партнерский форум, пусть разбирают и фиксят
   Deimlol
 
3 - 28.12.17 - 11:50
(1) Иначе быть не может. Но как раздельное выполнение запросов  отрабатывает, а когда есть "ОБЪЕДИНИТЬ ВСЕ" между ними, запрос умирает?
(2) Нет доступа. Поддержка ограничилась стандартным ответом - "Поставьте последнюю платформу и конфу и попробуйте еще раз".
   rs_trade
 
4 - 28.12.17 - 11:53
(3) обычно на кросс-джойнах умирает база. по сколько там записей в запросах?
   Deimlol
 
5 - 28.12.17 - 12:02
(4) Не больше 5к в двух запросах, остальные <200 строк, часть пустые.

Отлаживал так:
    //Отладка

    Запрос.УстановитьПараметр("РасчетныеПартииПоЗаказам", РасчетныеПартииПоЗаказам);
    Запрос.Текст = ""
        // подготовка временных таблиц

        + ТекстПартииПоЗаказам()// вт ПартииПоЗаказам

        + ТекстРазделениеЗапросов()    + ТекстРегистраторыПрочих()// вт РегистраторыПрочих

        + ТекстРазделениеЗапросов()    + ТекстПериодыПартийПрочих()// вт ПериодыПартийПрочих

    Запрос.Выполнить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстОстаткиПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстПриходыПартийПрочих();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
        
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисОстаткиСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПриходыСебестоимость();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисКорректировкиПоступлений();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисПередачиТоваровСебестоимость();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисПеремещенияСебестоимость();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисПрошлыеПриходыТоваровСебестоимость();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    Запрос.Текст = ""
        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисЗаказы()
        + ТекстОбъединениеЗапросов() + ТекстБазисУслуги();
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();
    
    УниверсальныеМеханизмыПартийИСебестоимости.УничтожитьВременныеТаблицы(ПараметрыРасчета,
        "ПартииПоЗаказам, РегистраторыПрочих, ПериодыПартийПрочих");
    //Отладка

    
    Запрос.Текст = ""
        // подготовка временных таблиц

        + ТекстПартииПоЗаказам()// вт ПартииПоЗаказам

        + ТекстРазделениеЗапросов()    + ТекстРегистраторыПрочих()// вт РегистраторыПрочих

        + ТекстРазделениеЗапросов()    + ТекстПериодыПартийПрочих()// вт ПериодыПартийПрочих

        + ТекстРазделениеЗапросов()
        // выборка данных

        + ТекстОписаниеДанныхДляПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстОстаткиПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстПриходыПартийПрочих()
        + ТекстОбъединениеЗапросов() + ТекстБазисОстаткиСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПриходыСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисКорректировкиПоступлений()
        + ТекстОбъединениеЗапросов() + ТекстБазисПередачиТоваровСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПеремещенияСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисПрошлыеПриходыТоваровСебестоимость()
        + ТекстОбъединениеЗапросов() + ТекстБазисЗаказы()
        + ТекстОбъединениеЗапросов() + ТекстБазисУслуги()
        + ТекстСортировка;
        
    Запрос.УстановитьПараметр("РасчетныеПартииПоЗаказам", РасчетныеПартииПоЗаказам);
    
    ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();

Самый долгий запрос выполнялся не больше 5 секунд. Объединенный висит минут 15 забивая tempdb.
   rs_trade
 
6 - 28.12.17 - 12:16
весь запрос в консоль запросов из состава ИР, там кнопочкой разбить по пакетам и смотреть какое место именно тупит выполняя пакеты последовательно
   rs_trade
 
7 - 28.12.17 - 12:17
и на ms sql 2012 накатить sp2, если его нет. там улучшили работу с врем. таблицами.
   Deimlol
 
8 - 28.12.17 - 12:23
(7) Sp2 стоит. (6) Сложно, так как некоторые временные таблицы собираются раньше, из других этапов расчета. Да и пакет простой, три первых запроса - формирование времнных таблиц, остальные - это одна выборка с "ОБЪЕДИНИТЬ ВСЕ".
   Deimlol
 
9 - 28.12.17 - 12:25
(7) Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)
    Oct 20 2015 15:36:27
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )
   rs_trade
 
10 - 28.12.17 - 12:49
(8) кинь текст с ОБЪЕДИНИТЬ
 
 Рекламное место пустует
   Deimlol
 
11 - 28.12.17 - 13:00
(10) Не получается, слишком большой.
   rs_trade
 
12 - 28.12.17 - 13:03
можно отловить прямой запрос и посмотреть расчетный план запроса. будет видно где много строк.
   Deimlol
 
13 - 28.12.17 - 13:19
(12) Тоже думал, но как его потом разобрать и привязать к конкретному куску запроса 1С?
   rs_trade
 
14 - 28.12.17 - 13:26
(13) там будет таблица конкретная фигурировать. через структуру хранения найти регистры и проанализировать запрос еще раз по этим таблицам
   Deimlol
 
15 - 28.12.17 - 13:28
(14) А разве план запроса формируется не после окончания выполнения запроса?
   Deimlol
 
16 - 28.12.17 - 13:33
(14) Там много соединений с временными таблицами.
   rs_trade
 
17 - 28.12.17 - 13:37
есть расчетный план. запрос не исполняется. ну так будет видно соединение тяжелое.
   Deimlol
 
18 - 28.12.17 - 13:54
(0) Закоментил кусок:

+ ТекстОбъединениеЗапросов() + ТекстБазисПрошлыеПриходыТоваровСебестоимость()

прокатило!
Причем результат этого запроса, отдельно, пустой. А текст запроса почему то не могу сюда вставить, есть какой то нюанс?
   Deimlol
 
19 - 28.12.17 - 13:57
(0) Еще забыл, платформу до 8.3.11.2899 накатил. Что из этого помогло пока не понятно.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует