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

1С:Предприятие ::

Метки: 

КА 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 человек.
Рекламное место пустует