Имя: Пароль:
1C
1С v8
Настройка сервера
, ,
0 miklenew
 
26.09.12
08:19
Есть запрос который выполняется 51 раз.
На рабочей (ms sql) в итоге выходит минута с копейками.
На локальной (файловая) в итоге 2 секунды.
Это нормально и смысла копаться нет?
Или стоит искать где теряться это минута?
1 Balabass
 
26.09.12
08:20
запрос покажи
2 miklenew
 
26.09.12
08:20
v 8.2 УПП. Запрос по спецификациям
3 Balabass
 
26.09.12
08:21
Типовой запрос? или сами писали?
4 miklenew
 
26.09.12
08:24
ВЫБРАТЬ
   СрезПоследних.Номенклатура,
   СрезПоследних.СпецификацияНоменклатуры
ПОМЕСТИТЬ тз
ИЗ
   &СрезПоследних КАК СрезПоследних
;

ВЫБРАТЬ
   тз.Номенклатура,
   тз.СпецификацияНоменклатуры,
   СпецификацииНоменклатурыИсходныеКомплектующие.Количество,
   СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
   СпецификацииНоменклатурыИсходныеКомплектующие.ТочкаМаршрута.Подразделение КАК Подразделение
ИЗ
   тз КАК тз
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
       ПО тз.СпецификацияНоменклатуры = СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
           И (СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &Номенклатура)
5 miklenew
 
26.09.12
08:25
СрезПоследних это последнии активные спецификации с определённым признаком. Т.е. отбираю я их один раз и сохраняю в тз. А потом 51 раз выполняется тот запрос который привёл
6 miklenew
 
26.09.12
08:27
Суть получить применяемость. Т.е. беру одну номенклатуру ищу её применяемость. У тех номенклатур ищу тоже применяемость и так до тех пор пока не наткнусь на номенклатуры которые ни в одной спецификации как комплектующие не идут
7 shuhard
 
26.09.12
08:29
(0)[Это нормально]
нет
8 miklenew
 
26.09.12
08:32
(7) Есть мысли как найти причину задержки? В сети, в сервере 1с, в sql-сервере.
9 shuhard
 
26.09.12
08:34
(8) форум почитай
10 miklenew
 
26.09.12
08:58
Попробывал на локальной машине с сервером ms sql -  22 секунды.
Т.е. похоже задержки есть и в сети и в скуле.
Есть ссылка на какую нибудь конкретную тему?
В основном большинство тем о том, как правильно сами запросы писать, а не о проблемах конфигурирования.
11 shuhard
 
26.09.12
09:00
12 miklenew
 
26.09.12
09:03
А где там про железо?
13 vmv
 
26.09.12
09:05
ВЫБРАТЬ
   СрезПоследних.Номенклатура,
   СрезПоследних.СпецификацияНоменклатуры
ПОМЕСТИТЬ тз
ИЗ
   &СрезПоследних КАК СрезПоследних
;
сначала грузим в памят монстроидальную виртуальную таблицу без всяких условий в ее параметрах, а потом делаем ВНУТРЕННЕЕ соединение с условием соединие на ссылку с этой ВТ

Вопрос, на фига фигачить всю виртуалку, любим извращения?
14 vmv
 
26.09.12
09:06
(10) задержка есть только в голове, железо тут ни причем
15 vmv
 
26.09.12
09:09
да и Идексы по соединялкам на ВТ ставить не пробовал, да и шо за манера лепить ВТ из какой-то левой Тз, которая невесть шо в себе содержит, наверняка тонны чуши, бесполезной для задачи.

аж легче стало когда видишь шо мир еще полон воятелей без аболютной веры в мощь своего разума, мдя
16 Maxus43
 
26.09.12
09:10
И (СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В (&Вся51Номенклатура))
17 Maxus43
 
26.09.12
09:10
(15) :)
18 vmv
 
26.09.12
09:11
вот шо ето за бредятина
...
ПОМЕСТИТЬ тз
ИЗ
   &СрезПоследних КАК СрезПоследних

выворот мозга?

надо так

....
ПОМЕСТИТЬ ВтСрПс
ИЗ
   &ТзСрПс КАК ТзСрПс

нафига надувать в коде!
19 Maxus43
 
26.09.12
09:15
(18) разница то где?)
20 miklenew
 
26.09.12
09:41
Изменил запрос. Теперь по той номенклатуре по которой было 30 минут, теперь 7 минут.
Ну уже что- то. Спасибо за помощь.
Мож кто ещё знает как сократить время?
ВЫБРАТЬ
   ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура,
   ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры
ПОМЕСТИТЬ тз
ИЗ
   РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
ГДЕ
   ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Комментарий ПОДОБНО "%PDM%"

ИНДЕКСИРОВАТЬ ПО
   СпецификацияНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СпецификацииНоменклатурыИсходныеКомплектующие.Количество,
   СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
   СпецификацииНоменклатурыИсходныеКомплектующие.ТочкаМаршрута.Подразделение КАК Подразделение,
   СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Спецификация
ПОМЕСТИТЬ Комплектующие
ИЗ
   Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
   СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &Номенклатура

ИНДЕКСИРОВАТЬ ПО
   Спецификация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   тз.Номенклатура,
   тз.СпецификацияНоменклатуры,
   Комплектующие.Количество,
   Комплектующие.ЕдиницаИзмерения,
   Комплектующие.Подразделение
ИЗ
   тз КАК тз
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Комплектующие КАК Комплектующие
       ПО тз.СпецификацияНоменклатуры = Комплектующие.Спецификация
21 Maxus43
 
26.09.12
09:43
надо избавляться от "Выполняю 51 раз"
22 Maxus43
 
26.09.12
09:44
РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних

Где параметры?
23 Maxus43
 
26.09.12
09:45
Короче в первой Вт ты вытаскиваеш ВСЁ, а тебе ж надо не всё, раз потом отбираеш по конкретной номенклатурине
24 miklenew
 
26.09.12
09:47
(22) Какие параметры? Мне ж нужны все активные спецификации с коментарием PDM. Заранее не известно в какой из них будет сидеть нужная мне номенклатура. Она может вообще во всех сидеть.
25 vde69
 
26.09.12
09:48
(20) ты, это, закусывай....

нафига темдб юзаешь?

временные таблицы делать можно только тогда когда они используются В НЕСКОЛЬКИХ частях....

переделай на вложеные запросы и радуйся...

для радости придется вызвать 2-3 раза запрос а потом обновить статистику и так повторить 2-3 раза, тогда оптимизатор скуля запомнит оптимальный план запроса.

а у тебя скуль не может оптимизировать, по тому как ты явно времяку создаешь....
26 Maxus43
 
26.09.12
10:00
(24) СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &Номенклатура

ну известна же номенклатура? коли известна дак зачем выбирать ВСЁ в первой вт?
27 Maxus43
 
26.09.12
10:01
ну или первую вт вынести за запрос повторяющийся, чтоб заново эта ВТ не формировалась каждый раз
28 miklenew
 
26.09.12
10:03
Спасибо, помогло.
Теперь 27 секунд. Простите мне мою наглость: а ещё чё то можно улучшить?
ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.СпецификацияНоменклатуры,
   ВложенныйЗапрос1.Количество,
   ВложенныйЗапрос1.ЕдиницаИзмерения,
   ВложенныйЗапрос1.Подразделение,
   ВложенныйЗапрос1.Спецификация
ИЗ
   (ВЫБРАТЬ
       ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
       ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры
   ИЗ
       РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
   ГДЕ
       ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Комментарий ПОДОБНО "%PDM%") КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество,
           СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
           СпецификацииНоменклатурыИсходныеКомплектующие.ТочкаМаршрута.Подразделение КАК Подразделение,
           СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Спецификация
       ИЗ
           Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
       ГДЕ
           СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &Номенклатура) КАК ВложенныйЗапрос1
       ПО ВложенныйЗапрос.СпецификацияНоменклатуры = ВложенныйЗапрос1.Спецификация
29 vde69
 
26.09.12
10:10
(28)
у тебя виртуальная таблица РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних  без условий, попробуй перенести

ГДЕ
       ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Комментарий ПОДОБНО "%PDM%"


в условие виртуальной таблицы
30 vde69
 
26.09.12
10:19
(25)+ это называется 1с дала гранату (в смысле временные и таблицы и пакетные запросы) программистам 1с :)

теперь проги их юзают в соответствии с процедурной логикой 1с, а ведь SQL это ФУНКЦИОНАЛЬНЫЙ язык в чистом виде!

До меня только сейчас дошло почему 1с ники в подавляющей массе пишут кривые запросы :)
31 miklenew
 
26.09.12
10:22
(29) Имелось ввиду так?
ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.СпецификацияНоменклатуры,
   ВложенныйЗапрос1.Количество,
   ВложенныйЗапрос1.ЕдиницаИзмерения,
   ВложенныйЗапрос1.Подразделение,
   ВложенныйЗапрос1.Спецификация
ИЗ
   (ВЫБРАТЬ
       ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
       ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры
   ИЗ
       РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество,
           СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
           СпецификацииНоменклатурыИсходныеКомплектующие.ТочкаМаршрута.Подразделение КАК Подразделение,
           СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Спецификация
       ИЗ
           Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
       ГДЕ
           СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &Номенклатура) КАК ВложенныйЗапрос1
       ПО ВложенныйЗапрос.СпецификацияНоменклатуры = ВложенныйЗапрос1.Спецификация
           И (ВложенныйЗапрос.СпецификацияНоменклатуры.Комментарий ПОДОБНО "%PDM%")
32 vde69
 
26.09.12
10:23
(31) РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних (ВОТ ТУТ ПАРАМЕТРЫ И УСЛОВИЯ ЗАДАЕМ)
33 miklenew
 
26.09.12
10:29
(32) Дольше стало - 51 секунду.
34 Kyon8
 
26.09.12
10:33
(30) Кстати, на ИТС есть статья, что вложенные запросы лучше на временные таблицы заменять, иначе будет нестабильно время выполнения (статистика устареет - на порядок может скорость упасть).
35 vde69
 
26.09.12
10:37
(33) это говорит о том что у тебя много изменений по дате в регистре.

у тебя основные тормоза идут в условии

ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Комментарий ПОДОБНО "%PDM%"

во первых сам оператор ПОДОБНО не сильно быстрый, а во вторых у тебя две точки (то есть неявный подзапрос),

я-бы на твоем месте
1. Ввел реквизит ЕстьPDM (и в обьект и в регист)
2. Разово его заполнил
3. Запрос из (31) стал-бы летать
36 vde69
 
26.09.12
10:38
(34) апдейт статистики в регламент скуля загнать - религия не позволяет?
37 Kyon8
 
26.09.12
10:44
+(34) И СУБД точно знает, сколько строк во временной таблице и может оптимальный план построить, главное индексировать по нужным полям и не пихать лишенее.

Экспериментировал недавно на 1С++, выигрыш значительный от ВТ. Там, правда, тупая SQL2000.

(36) скуль админы админят, и не факт что все проблемы решит.
38 miklenew
 
26.09.12
10:53
(35) Не хочеться изменения в структуре справочника делать.
Лан щас и так пойдёт. Потом подчистим базу и можно будет это условие вообще убирать.
Спасибо всем.
39 vmv
 
26.09.12
11:29
Вложенные проигрывают ВТ если да "главное индексировать по нужным полям и не пихать лишнее", шаманство непосредсвенно с СУБД может обратить этот факт вспять, но это от лукавого
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.