Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Оптимизация запроса для ТП (число прочтений - 11327 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Оптимизация запроса для ТП
05. Марта 2008 :: 07:49
Печать  
Прошу ногами непинать, а помочь разобраться.
Пишу для ТП текст запроса.
в ТП мне надо видить следующее:
1.Код
2.Ссылку
3.Единицу измерения(периодическая у цены товара)
4.Валюту измерения (периодическая у цены товара)
5.Остаток
6.Резерв

Делаю такой запрос:
Код
Выбрать все
select
s.code,
s.id as [Аналог $Справочник.ТМЦ],
$ПоследнееЗначение.Цены.Единица(price.id,:ВыбДата) as [Ед $Справочник.Единицы],
$ПоследнееЗначение.Цены.Валюта(price.id,:ВыбДата) as [Вал $Справочник.Валюты],
$ПоследнееЗначение.Цены.Цена(price.id,:ВыбДата) as Цена,
Остатки.ОстатокТовараОстаток as Ост,
Резервы.РезервТовараОстаток as Рез
from $Справочник.Аналоги as a
inner join $Справочник.ТМЦ s on s.id=$a.Аналог
inner join $Справочник.Цены price on price.parentext=s.id
left join $РегистрОстатки.РезервыТоваров(,,Товар=?ВыбТовар(14,9),Товар,РезервТовара) Резервы on Резервы.Товар=$a.Аналог
left join $РегистрОстатки.ОстаткиТоваров(,,Товар=?ВыбТовар(14,9) and Фирма=$ПустойИД,Товар,ОстатокТовара) Остатки on
Остатки.Товар=$a.Аналог
where a.parentext=?ВыбТовар(14,9)
and $price.КатегорияЦены=?ВыбЦена(14,9)
 



Может кто меня поправить?
в более оптмальном направлении.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #1 - 05. Марта 2008 :: 10:17
Печать  
В запросе для ТП фишки типа  $ПоследнееЗначение. - это смертельно.  Надо чего-то другое придумывать... Возможно самым лучшим вариантом будет получение этих значений при выводе строки.

И $РегистрОстатки я бы тоже не стал использовать. Лучше полностью всё ручками сделать.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #2 - 05. Марта 2008 :: 10:39
Печать  
ADirks писал(а) 05. Марта 2008 :: 10:17:
В запросе для ТП фишки типа  $ПоследнееЗначение. - это смертельно.
почему?
  

1&&2&&3
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #3 - 05. Марта 2008 :: 10:46
Печать  
trad писал(а) 05. Марта 2008 :: 10:39:
ADirks писал(а) 05. Марта 2008 :: 10:17:
В запросе для ТП фишки типа  $ПоследнееЗначение. - это смертельно.
почему?

Дык это же подзапрос в селект-листе. Врядли это хорошо сочетается с Top N. Да и вообще ничего хорошего, даже и в нормальном SELECT'е.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #4 - 05. Марта 2008 :: 11:00
Печать  
ADirks писал(а) 05. Марта 2008 :: 10:46:
trad писал(а) 05. Марта 2008 :: 10:39:
ADirks писал(а) 05. Марта 2008 :: 10:17:
В запросе для ТП фишки типа  $ПоследнееЗначение. - это смертельно.
почему?

Дык это же подзапрос в селект-листе. Врядли это хорошо сочетается с Top N. Да и вообще ничего хорошего, даже и в нормальном SELECT'е.


ВЫход?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #5 - 05. Марта 2008 :: 11:01
Печать  
Ну я так думаю что это всетаки будет быстрее чем заполенние ТЗ при выводе строки штатными средствами?
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #6 - 05. Марта 2008 :: 11:20
Печать  
Цитата:
ВЫход?

Ну так я же говорю, в событии ПриВыводеСтроки() получать эти данные и показывать. Типа:
Код
Выбрать все
	Если оТП.Колонки.ВПродаже.Видимость = 1 Тогда
		Ячейка = ОформлениеСтроки.Ячейки.Получить("ВПродаже");
		Ячейка.ОтображатьТекст	= 1;
		Ячейка.ГоризонтальноеВыравнивание = 2;

		Если фВыбранСклад = 1 Тогда
			стрКоличество = Формат(ОбъектП.ЗапросSQL("Select dbo.ОстаткиТоваровОстатокТоварСклад('"+ДатаТА+"', '"+ИдТовар+"', '"+ИдСклад+"')",,1), "Ч0");
		Иначе
			стрКоличество = Формат(ОбъектП.ЗапросSQL("Select dbo.ОстаткиТоваровОстатокТовар('"+ДатаТА+"', '"+ИдТовар+"')",,1), "Ч0");
		КонецЕсли;

		Ячейка.Текст	= стрКоличество;
	КонецЕсли;
 

  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #7 - 05. Марта 2008 :: 11:23
Печать  
А можно по подробнее про
dbo.ОстаткиТоваровОстатокТоварСклад
это что еще такое?
Пардон.
Это случаем на хранимая процедура или что-то типа того?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #8 - 05. Марта 2008 :: 11:47
Печать  
ADirks писал(а) 05. Марта 2008 :: 10:46:
Дык это же подзапрос в селект-листе. Врядли это хорошо сочетается с Top N.
непонятно, какова (плохая) связь между подзапросом и топN
ADirks писал(а) 05. Марта 2008 :: 10:46:
Да и вообще ничего хорошего, даже и в нормальном SELECT'е.
не пугай людей - нормально все.
легкие, работающие строго по индексам, корр.подзапросы вполне имеют право на жизнь в т.ч. и в поставщике ODBC для ТП
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #9 - 05. Марта 2008 :: 12:25
Печать  
trad писал(а) 05. Марта 2008 :: 11:47:
не пугай людей - нормально все.
легкие, работающие строго по индексам, корр.подзапросы вполне имеют право на жизнь в т.ч. и в поставщике ODBC для ТП


Соглашусь с Алексеем - никогда не надо делать подзапросы в селектлисте...
Даже если они и легкие. Ибо (кроме тормозов):
1. совсем дурной стиль
2. Рано или поздно это аукнется. Ведь функционал имеет тенденцию разрастаться.

ИМХО. В единственном случае можно сделать подзапросы в селектлисте, это когда возвращаем 1 строку с данными, полученными как раз теми самвми подзапросами.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #10 - 05. Марта 2008 :: 12:35
Печать  
у меня нет слов  Смех
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #11 - 05. Марта 2008 :: 12:36
Печать  
trad писал(а) 05. Марта 2008 :: 12:35:
у меня нет слов  Смех


А как-то поразвернутее? Для особо одаренных...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #12 - 05. Марта 2008 :: 12:38
Печать  
Согласен с trad-ом, корелляционный подзапрос (в селект листе), это эффективнее чем отдельные запросы при выводе строки.
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #13 - 05. Марта 2008 :: 12:39
Печать  
trad писал(а) 05. Марта 2008 :: 11:47:
ADirks писал(а) 05. Марта 2008 :: 10:46:
Дык это же подзапрос в селект-листе. Врядли это хорошо сочетается с Top N.
непонятно, какова (плохая) связь между подзапросом и топN
ADirks писал(а) 05. Марта 2008 :: 10:46:
Да и вообще ничего хорошего, даже и в нормальном SELECT'е.
не пугай людей - нормально все.
легкие, работающие строго по индексам, корр.подзапросы вполне имеют право на жизнь в т.ч. и в поставщике ODBC для ТП

С топN таки да, связи нет конечно, это я неправильно выразился. Но ведь, насколько я понимаю, SQL сначала полностью формирует выборку, сортирует, и только потом выбирает N первых записей. Т.е. затраты те же, что и на запрос без топа. Если мы чуть-чуть утяжеляем получение значения в селект-листе, то затраты умножаются на размер полной выборки, а вовсе не на N как хотелось бы.

А насчёт подзапросов проверяли (именно на ТП) на предмет получения остатков из регистра, на ТА - полнейшее попадание в индекс. И то же самое делали джойном.  Как ни странно, получилось что добывать эти остатки быстрее при выводе строки.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #14 - 05. Марта 2008 :: 12:45
Печать  
ADirks писал(а) 05. Марта 2008 :: 12:39:
Но ведь, насколько я понимаю, SQL сначала полностью формирует выборку, сортирует, и только потом выбирает N первых записей.

Это если нет попадания в индекс (используется итератор Sort). При попадании в индекс (index seek ordered forward) обрабатывается именно N записей.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #15 - 05. Марта 2008 :: 12:47
Печать  
DmitrO писал(а) 05. Марта 2008 :: 12:38:
Согласен с trad-ом, корелляционный подзапрос (в селект листе), это эффективнее чем отдельные запросы при выводе строки.


Тоже так считали, пока не провели эксперименты с табличным полем...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #16 - 05. Марта 2008 :: 12:55
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 12:36:
trad писал(а) 05. Марта 2008 :: 12:35:
у меня нет слов  Смех


А как-то поразвернутее? Для особо одаренных...

если честно, то мне лениво
впрочем и мой вопрос "почему?" тоже к ответу не обязывает
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #17 - 05. Марта 2008 :: 13:01
Печать  
trad писал(а) 05. Марта 2008 :: 12:55:
впрочем и мой вопрос "почему?" тоже к ответу не обязывает


Во мастер говорить непонятные фразы Улыбка
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #18 - 05. Марта 2008 :: 13:13
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 13:01:
trad писал(а) 05. Марта 2008 :: 12:55:
впрочем и мой вопрос "почему?" тоже к ответу не обязывает


Во мастер говорить непонятные фразы Улыбка

нуу, не суди строго Улыбка
вообще эта фраза была произнесена касательно поста #2
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #19 - 05. Марта 2008 :: 13:33
Печать  
trad писал(а) 05. Марта 2008 :: 13:13:
вообще эта фраза была произнесена касательно поста #2


Упс... Невнимательно читал веточку...
Несколько месяцев назад проводили эксперименты с табличным полем. На предмет скорости показа справочника товаров с рассчетными колонками. В эти колонки выводились всевозможные остатки.
Размер справочника - около 3 000 позиций. Групп - около 50.
Количество документов базе на тот момент было чуть больше миллиона.
При таких условиях справочник стал весьма заметно тормозить.

Пробовались следующие варианты:
1. Left Join с запросом по таблице итогов.
2. Вызов функции в селектлисте. Функция возвращает осаток по одному товару.
3. Вызов той же функции при отрисовки строки ТП.

Третий вариант показал увеличение скорости как минимум в 2-3 раза (сейчас уже не помню точных цифр).

Плюс, в 3-ем варианте имеется четкая возможность определять необходимость вызова функции в зависимости от видимости соответствующей колонки.
Я понимаю, что ТП преобразыет текст запроса, убирая невидимые колонки, но происходит (по крайней мере в то время происходило) это не всегда. Опять же, за сроком давности, не смогу вспомнить при каких условиях.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #20 - 05. Марта 2008 :: 14:10
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 13:33:
Плюс, в 3-ем варианте имеется четкая возможность определять необходимость вызова функции в зависимости от видимости соответствующей колонки.
Я понимаю, что ТП преобразыет текст запроса, убирая невидимые колонки, но происходит (по крайней мере в то время происходило) это не всегда. Опять же, за сроком давности, не смогу вспомнить при каких условиях.

ТП с рождения умело убирать поля из запроса (и проблем с этим не было) если колонка невидима за исключением:
- поле входит в КП
- поле является ИД-полем
- явно не отрублено автоудаление поля
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #21 - 05. Марта 2008 :: 14:15
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 13:33:
Третий вариант показал увеличение скорости как минимум в 2-3 раза (сейчас уже не помню точных цифр).
а физику этого ускорения можешь объяснить.
если конечно не лень Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #22 - 05. Марта 2008 :: 14:15
Печать  
trad писал(а) 05. Марта 2008 :: 14:10:
ТП с рождения умело убирать поля из запроса (и проблем с этим не было) если колонка невидима за исключением:
- поле входит в КП
- поле является ИД-полем
- явно не отрублено автоудаление поля


В том-то и дело, что нарвались на ньюансы в убирании ненужных колонок. Леха завтра появится - попрошу вспомнить, в чем там было дело.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #23 - 05. Марта 2008 :: 14:16
Печать  
trad писал(а) 05. Марта 2008 :: 14:15:
sadovnikov писал(а) 05. Марта 2008 :: 13:33:
Третий вариант показал увеличение скорости как минимум в 2-3 раза (сейчас уже не помню точных цифр).
а физику этого ускорения можешь объяснить.
если конечно не лень Улыбка


Неа... Не силен я в теории Печаль
За что постоянно принимаю подзатыльники от ADirks-а...  Смущённый
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #24 - 05. Марта 2008 :: 14:19
Печать  
МУЖИКИ!
я тута не пытаюсь выявить кто прав!
ВЫ просто посоветуйте как луче!
я прийму усе предложения.
Опробую и дам результат.
Потому как базы распределенные и серваки тож различаються!
будем отталкивать от самого хренового!.
как токо юзьверы скажут что ураган!
я вам сразуже отпишусь!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #25 - 05. Марта 2008 :: 14:22
Печать  
я кажется понял ваши проблемы Очень довольный
скажите, друзья-товарищи, у вас КП в индекс попадает?
если нет, тогда понятно ускорение в "третьем варианте"
еще раз перечитайте пост Берездетского
« Последняя редакция: 05. Марта 2008 :: 17:17 - trad »  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #26 - 05. Марта 2008 :: 14:26
Печать  
соотношение КП к индексу - основопологающее понятие поставщика ODBC для ТП
при несоблюдении его [соотношения] применение поставщика ODBC лишено смысла
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #27 - 05. Марта 2008 :: 14:28
Печать  
trad писал(а) 05. Марта 2008 :: 14:22:
я кажется понял ваши проблемы Очень довольный
скажите друзья-товарищи у вас КП в индекс попадает?
если нет, тогда понятно ускорение в "третий варианте"
еще раз прочитаете пост Берездетского


Увы, не попадает... Ибо пользователю хочется иметь возможность сортировки справочника по любому полю. И приходится делать:
Код
Выбрать все
///******************************** ADirks 08.08.2006
Процедура УстановитьСортировкуВПоставщикеДанных(фОбновлятьСтроки)
	Сам = Сам(Контекст);
	стрСортировка = ?((фЕстьГруппы=1) И (фИерархическийСписок=1), "IsFolder, ", "");
	Если ПустаяСтрока(КолонкаСортировки) = 0 Тогда
		стрНаправление = ?(НаправлениеСортировки < 0, " Desc", " Asc");
		стрСортировка = стрСортировка +
			СтрЗаменить(ВыражениеСортировки, ",", стрНаправление+",") +
			стрНаправление + ",";
		Сам.Колонки.Получить(КолонкаСортировки).ЗнакУпорядочивания = ?(НаправлениеСортировки<0, 2, 1);
	КонецЕсли;

	Сам.ПоставщикДанных = "";
	оПоставщикДанных.УстКлючПорядка(стрСортировка+" ROW_ID");
	Сам.ПоставщикДанных = оПоставщикДанных;

	Если фОбновлятьСтроки = 1 Тогда
		Сам.ОбновитьСтроки();
	КонецЕсли;
КонецПроцедуры
///******************************** ADirks 08.08.2006

 

  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #28 - 05. Марта 2008 :: 14:32
Печать  
Я конечно глубоко извиняюсь!
но вы ребята уже конечно глубокие материи полезли.
Огромное ВАМ ВСЕМ спасибо.
буду пробовать бо токо вернулси.
Как токо будут реальные результаты
сказуже оповещу в ветке!
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #29 - 05. Марта 2008 :: 14:35
Печать  
Увы, не попадает... Ибо пользователю хочется иметь возможность сортировки справочника по любому полю. И приходится делать:

Мне ненадо сортировать
в данной выборке значений будет максиму до 5-10
зачем засорачиваться?
Row_Id  в полне хватить!
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #30 - 05. Марта 2008 :: 14:50
Печать  
OFF:
trad писал(а) 05. Марта 2008 :: 14:22:
еще раз прочитаете пост Берездетского
По-русски пишется "Берездецкий".
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #31 - 05. Марта 2008 :: 15:04
Печать  
berezdetsky писал(а) 05. Марта 2008 :: 14:50:
OFF:
trad писал(а) 05. Марта 2008 :: 14:22:
еще раз прочитаете пост Берездетского
По-русски пишется "Берездецкий".

ОФФ2:
У меня друг есть по фамилии Навроцкий. Он тоже постоянно нервничает в связи с такими вот опечатками.  Подмигивание
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #32 - 05. Марта 2008 :: 15:10
Печать  
OFF3:
JohnyDeath писал(а) 05. Марта 2008 :: 15:04:
Он тоже постоянно нервничает

Цитата:
Вот Вы поели тухлые консервы
и в головах у Вас свеча горит -
Вам это очень действует на нервы...

Смех
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #33 - 05. Марта 2008 :: 15:30
Печать  
Кстати, а есть проблемы у ТП со справочниками. Есть у нас справочник на пол-лимона с хвостиком. Очень даже заметно подтормаживание. И это только при условии, что в индекс попали.
Провел на эту тему небольшое исследование - решение есть.
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #34 - 05. Марта 2008 :: 15:37
Печать  
spock писал(а) 05. Марта 2008 :: 15:30:
Кстати, а есть проблемы у ТП со справочниками. Есть у нас справочник на пол-лимона с хвостиком. Очень даже заметно подтормаживание. И это только при условии, что в индекс попали.
Провел на эту тему небольшое исследование - решение есть.

Поделись подробностями.
У меня справочник есть примерно тысяч на 70. Тормозов не вижу.
Ты случайно не на форме списка справочника ТП делаешь?
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #35 - 05. Марта 2008 :: 15:48
Печать  
vip писал(а) 05. Марта 2008 :: 15:37:
Ты случайно не на форме списка справочника ТП делаешь?

Нет. Класс + обработка.
Я не верно выразился про тормоза. Тормоза возникают при подкачке следующей порции данных по TOP N.
Т.е. открыли форму (уже здесь есть тормоза подкачивания), жмем ArrDwn, курсор добегает до последней строки ТП, следующая строка -> получаем следующую порцию = тормоза.
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #36 - 05. Марта 2008 :: 15:51
Печать  
spock писал(а) 05. Марта 2008 :: 15:48:
vip писал(а) 05. Марта 2008 :: 15:37:
Ты случайно не на форме списка справочника ТП делаешь?

Нет. Класс + обработка.
Я не верно выразился про тормоза. Тормоза возникают при подкачке следующей порции данных по TOP N.
Т.е. открыли форму (уже здесь есть тормоза подкачивания), жмем ArrDwn, курсор добегает до последней строки ТП, следующая строка -> получаем следующую порцию = тормоза.

А вот такое поведение как раз и свидетельствует о непопадании в индекс.
В свое время тов. Arta мне хорошо и наглядно это объяснил.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #37 - 05. Марта 2008 :: 15:56
Печать  
vip писал(а) 05. Марта 2008 :: 15:51:
А вот такое поведение как раз и свидетельствует о непопадании в индекс.

окай, будем на конкретных цифрах и данных проводить анализ.
Сейчас подготовлюсь...
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #38 - 05. Марта 2008 :: 16:02
Печать  
spock писал(а) 05. Марта 2008 :: 15:56:
vip писал(а) 05. Марта 2008 :: 15:51:
А вот такое поведение как раз и свидетельствует о непопадании в индекс.

окай, будем на конкретных цифрах и данных проводить анализ.
Сейчас подготовлюсь...

Только надо привлечь гуру.
Я соображаю не быстро Улыбка
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #39 - 05. Марта 2008 :: 16:32
Печать  
Допустим, что нам нужен грид для справочника (сейчас у меня под рукой небольшой: Номенклатура-SC12 = 32979).
Идем по короткому и простому пути:
  • вывод с учетом иерархии;
  • элементы первого уровня (parentid = '     0   ');
  • сортировка по наименованию;
  • группы сверху;
  • за границы первой порции не выходим (т.е. не двигаем курсор в гриде, а тупо смотрим);


Первая итерация: выводим наименования и row_id (как ключ для ТП) элементов.
Код
Выбрать все
select top 20
	descr as Наименование,
	row_id as row_id
from sc12 (nolock)
where
	parentid = '     0   '
order by
	parentid,
	isfolder,
	descr,
	row_id
 


Реакция мгновенная: попали в индекс PDESCR, получили 20 строк из 60 (на этом уровне всего 60 эл-ов). Все просто замечательно - пользователи довольны.

Вторая итерация: выводим наименования, isfolder (пользователи говорят, что не понятно кто из элементов списка есть группа, а кто элемент - будем рисовать пиктограммки) и row_id (как ключ для ТП) элементов.
Код
Выбрать все
select top 20
	descr as Наименование,
	isfolder as Пиктограммка,
	row_id as row_id
from sc12 (nolock)
where
	parentid = '     0   '
order by
	parentid,
	isfolder,
	descr,
	row_id
 


Результаты как в предыдущем - все окай.

Третья итерация: выводим наименования, isfolder, код (видите ли хотят видеть код/артикул) и row_id элементов.
Код
Выбрать все
select top 20
	descr as Наименование,
	isfolder as Пиктограммка,
	code as Код,
	row_id as row_id
from sc12 (nolock)
where
	parentid = '     0   '
order by
	parentid,
	isfolder,
	descr,
	row_id
 


А тут уже начинается хужесть, но только самая-самая малость. А с добавление новых полей эта хужесть становится только хужее (наверняка нужно будет выводить ismark, чтобы пиктограммы были полноценными и некоторые поля таблицы: ед. изм. и прочее).
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #40 - 05. Марта 2008 :: 16:35
Печать  
План выполнения для 1-2
  

explan1.PNG ( 2 KB | Загрузки )
explan1.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #41 - 05. Марта 2008 :: 16:37
Печать  
План для 3:
  

explan3.PNG ( 3 KB | Загрузки )
explan3.PNG
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #42 - 05. Марта 2008 :: 16:39
Печать  
berezdetsky писал(а) 05. Марта 2008 :: 14:50:
OFF:
trad писал(а) 05. Марта 2008 :: 14:22:
еще раз прочитаете пост Берездетского
По-русски пишется "Берездецкий".

извини, Иван
  

1&&2&&3
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #43 - 05. Марта 2008 :: 16:39
Печать  
Более подробная статистика планаов выполнения в данном случае не актуально, потому как база вообще никакая. Реальные планы будут только завтра (если будет возможность постить на форуме).
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #44 - 05. Марта 2008 :: 16:45
Печать  
Но в чем проблема можно пояснить еще сейчас. Проблема в букмарках. Что и логично - они должны быть, т.к. в индексах есть только часть информации для селект-листа, а за полями code, ismark и прочими spxxx серверу нужно лезть на самый низкий уровень дерева.
В моем случае на первом уровне справочника было 180 тыс с копейками элементов + сервак многоголовый - скуль строит планы выполнения забавные до безобразия Улыбка , но жутко логичные. Индексные хинты только усугубляют положение.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #45 - 05. Марта 2008 :: 16:57
Печать  
Кстати, оказывается индексы на таблицах SCxxx очень даже продуманы и полезны. Ребята оттуда заслуживают уважения.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #46 - 05. Марта 2008 :: 17:04
Печать  
spock писал(а) 05. Марта 2008 :: 16:32:
А тут уже начинается хужесть, но только самая-самая малость.
и это неизбежно, т.к. необходим букмарк-лукап, что показано твоими планами, а это дополнителные чтения с диска.
spock писал(а) 05. Марта 2008 :: 16:32:
А с добавление новых полей эта хужесть становится только хужее (наверняка нужно будет выводить ismark, чтобы пиктограммы были полноценными и некоторые поля таблицы: ед. изм. и прочее).
а вот хуже не будет, т.к. с большой долей вероятности* букмарк все равно будет такой же что для одного поля не входящего в индекс, что для нескольких, т.к. эти поля с большой долей вероятности расплагаются на одной странице.

* эта вероятность не распрастроняется на таблицы, совокупный объем полей (кроме blob-полей) одной записи которых, не укладываются в 8К, а также на blob-поля.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #47 - 05. Марта 2008 :: 17:08
Печать  
пока я писал ответ ты уже сам пояснил наблюдения
  

1&&2&&3
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #48 - 05. Марта 2008 :: 17:12
Печать  
trad писал(а) 05. Марта 2008 :: 17:04:
эта вероятность не распрастроняется на таблицы, совокупный объем полей одной записи которых, не укладываются в 8К, а также на blob-поля.

Да, это важно.
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #49 - 05. Марта 2008 :: 18:01
Печать  
короче народ!
есть база на 100 тыщ элеметов.
есть периодика под эти эти позиции.
если будет интересно
могу выложить для экспериментов.
что скажете?
477687116
+есть журнал документов
база 11 гб.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #50 - 06. Марта 2008 :: 05:14
Печать  
trad писал(а) 05. Марта 2008 :: 14:22:
я кажется понял ваши проблемы Очень довольный
скажите, друзья-товарищи, у вас КП в индекс попадает?
если нет, тогда понятно ускорение в "третьем варианте"
еще раз перечитайте пост Берездетского

Отчасти наши проблемы и в этом. Но не во всех случаях.  Щас полез смотреть как там чего конкретно, и нашёл явный ляп  Печаль  КП был "IsFolder, Наименование Asc, ROW_ID" вместо "ParentID, IsFolder, Наименование Asc, ROW_ID" - это в случае иерархического режима.  Но вот при отключенной иерархии КП "Наименование Asc, ROW_ID".  Ту самую форму списка мы вертели во всех вариантах, и эффект в любом из них был неудовлетворительным.  Блин, надо будет ещё раз проверить...

Про сокрытие колонок, и модификацию запроса.  Была такая проблема, когда восстанавливались настройки ТП, и в частности видимость колонок.  Получали, что колонок визуально нет, а в запросе они оставались. Выяснилось, что если видимость колонок выключать до назначения поставщика данных, то поставщик эти скрытые колонки в запросе оставит.  Что в общем то и неудивительно, но было бы неплохо такое поведение изменить.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #51 - 06. Марта 2008 :: 09:18
Печать  
Запрос таки побороли!
работает прекрасно!
но
ТП выводить строки, в нужном каоличестве как и положено,
вот токо в них пусто.
     РадугаМД = СоздатьОбъект("MetaDataWork");
     реквАналог = "SP" + РадугаМД.ИДРеквизитаСправочника("Аналоги", "Аналог");
     Текст="
     |select
     |  ТМЦ.code as Код,
     |  $Аналоги.Аналог as [Аналог $Справочник.ТМЦ],
     |  $ПоследнееЗначение.Цены.Единица(Цены.id,:ВыбДата) as [Ед $Справочник.Единицы],
     |  $ПоследнееЗначение.Цены.Валюта(Цены.id,:ВыбДата) as [Вал $Справочник.Валюты],
     |  $ПоследнееЗначение.Цены.Цена(Цены.id,:ВыбДата) as Цена
     |,
     |  (select sum(Резервы.РезервТовараОстаток)
     |   from $РегистрОстатки.РезервыТоваров(,,
     |          Товар="+реквАналог+",
     |          Товар, РезервТовара
     |        ) Резервы
     |  ) as Резерв,
     |  (select sum(Остатки.ОстатокТовараОстаток)
     |   from $РегистрОстатки.ОстаткиТоваров(,,
     |          Товар="+реквАналог+" and Фирма=?ВыбФирма(14,9),
     |          Товар, ОстатокТовара
     |        ) Остатки
     |  ) as Остаток,
     |  Аналоги.code as КодАналога,
     |  Аналоги.row_id as row_id
     |from $Справочник.Аналоги as Аналоги (nolock)
     |inner join $Справочник.ТМЦ as ТМЦ on ТМЦ.id = $Аналоги.Аналог
     |inner join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
     |where Аналоги.parentext=?ТекТовар(14,9)
     |";
     КП="КодАналога, row_id";
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #52 - 07. Марта 2008 :: 16:59
Печать  
Так так.
И где продолжение?
Вношу поправки.
Я покачто даун в ТП.
Но!
Благодаря наставлениям некоторых лиц....
мы знаем кто они.
получил соответствующие настовления по ТП.
Незнаю может в доке это опясано, но попробую еще равз для новичков(типа мене).
1.Создаем объект ТП.
2.Инициализируем ПоставщикаДанных(Текст запроса и т.п.).
3.А только потом определяем настройки ТП(колонки ТП, и ОБЯЗАТЕЛЬНО ПОЛЯ ПОСТАВЩИКА ДАННЫХ!)

Почемук 3. пункт?
Незнаю.
Когда с первый раз создал ТП то Поле Поставщика не объявлял и все работало.
НО! еще раз уточню низнаю почему но после создания второго ТП на той же форме 2-е ТП ничего в полях не выводило, хотя строки были!
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #53 - 07. Марта 2008 :: 17:59
Печать  
Четвертая итерация: делаем измерения по времени и прочее.
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT TOP 30
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	parentid = '     0   '
ORDER BY
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50)) --Посчитаем
 


Сейчас результаты измерений на таблице, где всего элементов 451411, на первом уровне 185733 элементов, размер строки 1497 байт. Все дальнейшие измерения проходят на этой же таблице.(если не указано другое)

1. SQL Server Execution Times: 50 ms
1. Execution time: 46 ms

2. SQL Server Execution Times: 48 ms
2. Execution time: 46 ms

3. SQL Server Execution Times: 57 ms
3. Execution time: 63 ms

Попали в индекс все хорошо. Время замечателтьное.
« Последняя редакция: 10. Марта 2008 :: 11:17 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #54 - 07. Марта 2008 :: 18:21
Печать  
Пятая итерация: делаем измерения по времени и прочее.
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT TOP 30
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id,
	code as Код, -- Добавил Код
	ismark as ПометкаУдаления, - Добавил пометку
	SP107 as ИНН - Добавил ИНН
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	parentid = '     0   '
ORDER BY
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 291 ms
1. Execution time: 296 ms

2. SQL Server Execution Times: 289 ms
2. Execution time: 280 ms

3. SQL Server Execution Times: 282 ms
3. Execution time: 283 ms
« Последняя редакция: 10. Марта 2008 :: 11:17 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #55 - 07. Марта 2008 :: 18:28
Печать  
Шестая итерация: делаем небольшой финт
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	row_id IN (SELECT TOP 30 row_id FROM sc133 (NOLOCK) WHERE parentid = '     0   ' ORDER BY parentid, isfolder, descr, row_id)
ORDER BY  -- ЭТО ДЛЯ ПОРЯДКА
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 154 ms
1. Execution time: 156 ms

2. SQL Server Execution Times: 130 ms
2. Execution time: 123 ms

3. SQL Server Execution Times: 136 ms
3. Execution time: 143 ms
« Последняя редакция: 10. Марта 2008 :: 11:18 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #56 - 07. Марта 2008 :: 18:33
Печать  
Седьмая итерация: финт и полей больше

Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id,
	code as Код, -- Добавил Код
	ismark as ПометкаУдаления, -- Добавил пометку
	SP107 as ИНН -- Добавил ИНН
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	row_id IN (SELECT TOP 30 row_id FROM sc133 (NOLOCK) WHERE parentid = '     0   ' ORDER BY parentid, isfolder, descr, row_id)
ORDER BY  -- ЭТО ДЛЯ ПОРЯДКА
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 153 ms  
1. Execution time: 140 ms

2. SQL Server Execution Times: 161 ms  
2. Execution time: 156 ms

3. SQL Server Execution Times: 128 ms  
3. Execution time: 126 ms
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #57 - 07. Марта 2008 :: 18:38
Печать  
План выполнения для итерации 4:
  

explan4.PNG ( 2 KB | Загрузки )
explan4.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #58 - 07. Марта 2008 :: 18:40
Печать  
План выполнения для итерации 5:
  

explan5.PNG ( 3 KB | Загрузки )
explan5.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #59 - 07. Марта 2008 :: 18:42
Печать  
План выполнения для итерации 6:
  

explan6.PNG ( 5 KB | Загрузки )
explan6.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #60 - 07. Марта 2008 :: 18:44
Печать  
План выполнения для итерации 7:
  

explan7.PNG ( 5 KB | Загрузки )
explan7.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #61 - 07. Марта 2008 :: 18:55
Печать  
Седьмая и шестая итерации дают, на имеющихся даных, один и тот же план выполнения (и кстати очень логичный), который не зависит (я так думаю, но могу ошибаться Улыбка ) от полей в селект-листе.
« Последняя редакция: 10. Марта 2008 :: 11:18 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #62 - 07. Марта 2008 :: 18:57
Печать  
Однако, четвертая и пятая итерации (с виду, попадающие в индекс) дают разные планы выполнения - букнарки, которые по времени показывают свое зло.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #63 - 07. Марта 2008 :: 19:00
Печать  
Где-то так... (пардон, что задержался, но, исключительно, не было времени).
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #64 - 07. Марта 2008 :: 21:50
Печать  
ADirks писал(а) 06. Марта 2008 :: 05:14:
Про сокрытие колонок, и модификацию запроса.  Была такая проблема, когда восстанавливались настройки ТП, и в частности видимость колонок.  Получали, что колонок визуально нет, а в запросе они оставались. Выяснилось, что если видимость колонок выключать до назначения поставщика данных, то поставщик эти скрытые колонки в запросе оставит.  Что в общем то и неудивительно, но было бы неплохо такое поведение изменить.

И охота вам, Леша, в одиночку муд"хаться.
Вы как те давние пользователи юникс систем, собрали информацию о разных ляпах и используете ее как конкурентное преимущество Очень довольный
Нет чтобы куда-то задокументировать, в багзиллу там, например.
Я так не поступаю, я когда чего-нибудь в ИТ нахожу - я тебе первым делом телегу пишу.
Типа, так и так, приглашаю муд"хаться вместе. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #65 - 10. Марта 2008 :: 05:35
Печать  
Цитата:
И охота вам, Леша, в одиночку муд"хаться.
Вы как те давние пользователи юникс систем, собрали информацию о разных ляпах и используете ее как конкурентное преимущество Очень довольный
Нет чтобы куда-то задокументировать, в багзиллу там, например.
Я так не поступаю, я когда чего-нибудь в ИТ нахожу - я тебе первым делом телегу пишу.
Типа, так и так, приглашаю муд"хаться вместе. Улыбка

Это просто такой "благоприобретенный" стереотип мышления. Типа, никто тебе не поможет кроме тебя же самого. Т.е. иногда вот так вот мудохаешься, мудохаешься, но даже и в голову не приходит кого-то попросить о помощи, или хотя бы поделиться горем поделиться.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #66 - 10. Марта 2008 :: 06:17
Печать  
spock писал(а) 07. Марта 2008 :: 18:33:
Седьмая итерация: финт и полей больше
этот финт, имхо, благопристойнее выглядит так:
Код
Выбрать все
SELECT top 30
	t1.isfolder as Пиктограммка,
	t1.descr as Наименование,
	t1.row_id as row_id,
	t2.code as Код, -- Добавил Код
	t2.ismark as ПометкаУдаления, -- Добавил пометку
	t2.SP107 as ИНН -- Добавил ИНН
FROM sc133 t1 (NOLOCK) -- Справочник.Клиенты
left join sc133 t2 (NOLOCK) on t2.row_id = t1.row_id
WHERE t1.parentid = '     0   '
ORDER BY  -- ЭТО ДЛЯ ПОРЯДКА
	t1.parentid,
	t1.isfolder,
	t1.descr,
	t1.row_id 


ps
А вообще, признаю, очень поучительно.
Нужно заставить себя не забывать избавляться от букмарков по-возможности.
  

1&&2&&3
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #67 - 11. Марта 2008 :: 09:06
Печать  
trad писал(а) 10. Марта 2008 :: 06:17:
этот финт, имхо, благопристойнее выглядит так:

1. SQL Server Execution Times: 300 ms
1. Execution time: 313 ms

2. SQL Server Execution Times: 300 ms
2. Execution time: 296 ms

3. SQL Server Execution Times: 309 ms
3. Execution time: 313 ms

Твой вариант на этих данных.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #68 - 11. Марта 2008 :: 10:36
Печать  
spock писал(а) 11. Марта 2008 :: 09:06:
Твой вариант на этих данных.

хмм...  Озадачен
у меня оба варианта показывают одинаковое время (в пределах некоторой погрешности)
  

1&&2&&3
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #69 - 11. Марта 2008 :: 11:04
Печать  
trad писал(а) 11. Марта 2008 :: 10:36:
хмм...  Озадачен
у меня оба варианта показывают одинаковое время (в пределах некоторой погрешности)

хз, но вариант с джойном я для себя рассматривал практически сразу (только не левый, а inner). В итоге пришел к подзапросу.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #70 - 11. Марта 2008 :: 11:57
Печать  
spock, что у тебя за сервер такой.. на 30-ти записях получить время в 100-300 мс не реально (очень много!)
..чета не ладно у тебя, я не стебаюсь, я серьезно.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #71 - 11. Марта 2008 :: 12:04
Печать  
DmitrO писал(а) 11. Марта 2008 :: 11:57:
spock, что у тебя за сервер такой.. на 30-ти записях получить время в 100-300 мс не реально (очень много!)
..чета не ладно у тебя, я не стебаюсь, я серьезно.



spock писал(а) 07. Марта 2008 :: 17:59:
Сейчас результаты измерений на таблице, где всего элементов 451411, на первом уровне 185733 элементов, размер строки 1497 байт. Все дальнейшие измерения проходят на этой же таблице.(если не указано другое)


Про аппаратную часть: 2*AMD Opteron 280 2.41 GHz, 4 GB, Win2003 sp1
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #72 - 11. Марта 2008 :: 12:34
Печать  
spock, все равно много, я ползаю по таблице 1047385 записей длина записи ~200 байт, страница ТП 50 строк, те же букмарклукапы: время 0-16 мс. Задержки подчитывания не ощущаю..
Боевой сервер правда.. все равно подумай.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #73 - 11. Марта 2008 :: 12:56
Печать  
Цитата:
Про аппаратную часть: 2*AMD Opteron 280 2.41 GHz, 4 GB, Win2003 sp1

Ну это-то, понятно (AWE надеюсь воткнуто), ты бы лучше про дисковую подсистему че нить написал.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #74 - 11. Марта 2008 :: 14:43
Печать  
DmitrO писал(а) 11. Марта 2008 :: 12:34:
spock, все равно много, я ползаю по таблице 1047385 записей длина записи ~200 байт, страница ТП 50 строк, те же букмарклукапы: время 0-16 мс. Задержки подчитывания не ощущаю..
Боевой сервер правда.. все равно подумай.

Давай подробности измерений чтоли.

И вот это у тебя было?
Код
Выбрать все
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE 

  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #75 - 12. Марта 2008 :: 05:30
Печать  
Цитата:
Давай подробности измерений чтоли.

Смотрел в профайлере на показатель Duration.

Цитата:
И вот это у тебя было?

Код
Выбрать все
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE  


Этого конечно не было, я смотрел на реально работающее ТП.
1)Зачем это? Имхо в боевых условиях кеш страниц будет и должен работать, поэтому очищать его не нужно, понимаю что ты хотел получить именно физические чтения. Кеш процедур тоже очищать не нужно, ведь в боевых условиях работа должна идти именно используя кеш планов выполнения, тебе ведь нужно получение данных из базы проверить, а не время компилляции.
2)Судя по твоему запросу, выполнение этих команд в замер не входит.

Смотри в профайлере на реально работающее ТП.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #76 - 12. Марта 2008 :: 06:00
Печать  
Про диск-то напиши, не стесняйся, мне самому интересно.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #77 - 12. Марта 2008 :: 07:15
Печать  
DmitrO писал(а) 12. Марта 2008 :: 06:00:
Про диск-то напиши, не стесняйся, мне самому интересно.

В сервере 5 винтов 70-ок. Все объединены в рейд-5. Потом все это добро разбито на два раздела: система + базы.
Но дисковая система дается нам как должное "и точка", если будут комментарии и советы, то они не принимаются Улыбка .
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #78 - 12. Марта 2008 :: 07:18
Печать  
DmitrO писал(а) 12. Марта 2008 :: 05:30:
1)Зачем это? Имхо в боевых условиях кеш страниц будет и должен работать, поэтому очищать его не нужно, понимаю что ты хотел получить именно физические чтения. Кеш процедур тоже очищать не нужно, ведь в боевых условиях работа должна идти именно используя кеш планов выполнения, тебе ведь нужно получение данных из базы проверить, а не время компилляции.

На кеш надеятся не нужно, сейчас он есть, а через некоторое время кончился.
Потому интересна именно физика.

И если на то пошло, то с кешем время тоже очень даже замечательное.
  
Наверх
ICQ  
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Оптимизация запроса для ТП
Ответ #79 - 12. Марта 2008 :: 07:24
Печать  
spock писал(а) 12. Марта 2008 :: 07:15:
Но дисковая система дается нам как должное "и точка", если будут комментарии и советы, то они не принимаются Улыбка .


Это что - такой толпой Розбаха не запинаете на нужную дисковую систему? Не верю! ©
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #80 - 12. Марта 2008 :: 07:30
Печать  
sadovnikov писал(а) 12. Марта 2008 :: 07:24:
Это что - такой толпой Розбаха не запинаете на нужную дисковую систему? Не верю! ©

вопрос не по окладу.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #81 - 13. Марта 2008 :: 12:35
Печать  
А еще, размер кеша рейд-контроллера, и размер страйпа на досуге спроси.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #82 - 13. Марта 2008 :: 15:29
Печать  
DmitrO писал(а) 13. Марта 2008 :: 12:35:
А еще, размер кеша рейд-контроллера, и размер страйпа на досуге спроси.

А чего спрашивать-то, если у меня под рукой консоль настройки (read only).

Контроллер на 192 МБ.
Размер страйпа: 64 КБ (система), 32 КБ (базы).
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать