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

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

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

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

Самый долгий запрос выполнялся не больше 5 секунд. Объединенный висит минут 15 забивая tempdb.
6 rs_trade
 
28.12.17
12:16
весь запрос в консоль запросов из состава ИР, там кнопочкой разбить по пакетам и смотреть какое место именно тупит выполняя пакеты последовательно
7 rs_trade
 
28.12.17
12:17
и на ms sql 2012 накатить sp2, если его нет. там улучшили работу с врем. таблицами.
8 Deimlol
 
28.12.17
12:23
(7) Sp2 стоит. (6) Сложно, так как некоторые временные таблицы собираются раньше, из других этапов расчета. Да и пакет простой, три первых запроса - формирование времнных таблиц, остальные - это одна выборка с "ОБЪЕДИНИТЬ ВСЕ".
9 Deimlol
 
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: )
10 rs_trade
 
28.12.17
12:49
(8) кинь текст с ОБЪЕДИНИТЬ
11 Deimlol
 
28.12.17
13:00
(10) Не получается, слишком большой.
12 rs_trade
 
28.12.17
13:03
можно отловить прямой запрос и посмотреть расчетный план запроса. будет видно где много строк.
13 Deimlol
 
28.12.17
13:19
(12) Тоже думал, но как его потом разобрать и привязать к конкретному куску запроса 1С?
14 rs_trade
 
28.12.17
13:26
(13) там будет таблица конкретная фигурировать. через структуру хранения найти регистры и проанализировать запрос еще раз по этим таблицам
15 Deimlol
 
28.12.17
13:28
(14) А разве план запроса формируется не после окончания выполнения запроса?
16 Deimlol
 
28.12.17
13:33
(14) Там много соединений с временными таблицами.
17 rs_trade
 
28.12.17
13:37
есть расчетный план. запрос не исполняется. ну так будет видно соединение тяжелое.
18 Deimlol
 
28.12.17
13:54
(0) Закоментил кусок:

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

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