|
КА 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 накатил. Что из этого помогло пока не понятно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |