Имя: Пароль:
1C
1С v8
v8: Непонятки со скоростью выполнения запросов. (совместимость, полные права)
0 simol
 
24.05.12
15:11
8.2.15.310 (64) + MS SQL 2006 (64) + Win 2008 (64)

Непонятка 1. Режим совместимости 8.1.
Запрос выполняется в привилегированном общем модуле.
под пользователем с полными правами 88 секунд, под обычным пользователем 660 секунд.

Непонятна 2. Одна и та же база. Уже другой запрос. В режиме совместимости 8.1 выполняется за 17 секунд. В режиме совместимости 8.2.13 и без режима совместимости 240 секунд. Проверялось на 4-х компьютерах. При любых манипуляциях перезагрузки серверов, очистки кешей. Очередности замера. Последовательных замеров ситуация проявляется стабильно одинаково.


Разумеется запросы не оптимальные и их оптимизацией и занимаюсь. Но почему при том же тексте запросов такие разительные расхождения?
1 shuhard
 
24.05.12
15:31
(0) это RLS - он такой
2 simol
 
24.05.12
15:32
(1)
Если это по непонятке 1, то привилегированный же модуль. RLS должно игнорироваться
3 Fragster
 
гуру
24.05.12
15:33
где-то я видел консоль запросов с замером времени проведения по подзапросам
4 shuhard
 
24.05.12
15:33
(2) что тебе мешает профайлером или тех.журналом посмотреть запрос ?
5 simol
 
24.05.12
15:35
(4) Это да. можно посмотреть. А вот почему при разной совместимости более чем на порядок тормозить начивает
6 shuhard
 
24.05.12
15:36
(5) пляжи от печки,т.е. от запроса
7 Ненавижу 1С
 
гуру
24.05.12
15:36
ни хрена он не игнорирует
точнее да, но условия проверки вставляет, ну... концептуально делает примерно так:

ГДЕ Ссылка В (<<ДоступныеПоRLS>>) ИЛИ Истина

кстати, в 8.1 такого не было, имхо
8 simol
 
24.05.12
15:37
(7)угу, с первый разобрались, жаль что они не игнорируют RLS
9 simol
 
24.05.12
15:39
(6)Так проблема не в одном запросе, а во всех. И из-за смены совместимости провал в 14 раз. Я не могу на столько ускорить любой запрос, чтобы вернуться в тоже время.
10 simol
 
24.05.12
15:46
(3)Да я ее знаю, но см (9)
11 Fragster
 
гуру
24.05.12
15:48
(10) ну, может там есть типовой косяк
12 simol
 
24.05.12
15:49
(11) Тогда он очень старый, пробовал и на 8.2.13.202 и на 8.2.15.310
13 Fragster
 
гуру
24.05.12
15:50
(12) типовой косяк в самих запросах, я имею ввиду. типа там соединение виртуальных таблиц или еще что - стало тупить. может группировка была раньше с построением индекса во временной таблице - а теперь - нет (это пальцем в небо)
14 simol
 
24.05.12
15:52
(13)Одна и таже конфа. Включил 8.1 быстро, выключил - медленно. включил - быстро и т.д.
ладно всегда долго, можно улучшать. а что по разному, да еще настолько по разному.
15 Fragster
 
гуру
24.05.12
15:55
(14) т.е. текста запроса не будет?
16 simol
 
24.05.12
15:57
(15)Я не прошу помощи в улучшении конкретного запроса, хочу понять почему один и тот же запросов в разных режимах совместимости по скорости отличается в 10 раз. еще раз обращу внимание, что такое поведение торможения наблюдается на всех запросах.
17 Fragster
 
гуру
24.05.12
16:01
(16) я же говорю - может там во всех запросах есть косяк, который не влиял на 8.1 и стал влиять на 8.2
18 hhhh
 
24.05.12
16:02
(16) ну, только на твоих запросах, как оказалось. Поэтому и просят запрос для примера. Что у вас там за чудные запросы? Самописка?
19 Fragster
 
гуру
24.05.12
16:04
ну и применяемые шаблоны RLS :)
20 simol
 
24.05.12
16:05
(17)(18)Сейчас выберу запрос, но проблема шире
21 simol
 
24.05.12
16:05
(19)Тестилось под Полными правами
22 Fragster
 
гуру
24.05.12
16:05
(21) -> (7)
23 simol
 
24.05.12
16:09
(22)В (7) то про первую проблему, а после (8) разбирается вторая проблема. котоаря уже под полными правами
24 simol
 
24.05.12
16:55
На данный момент ситуация следующая. Без режима совместимости 8.1 выполнение запросов с большой вложенностью деградирует.
Да, запросы кривые, но на лицо глюк платформы, жаль нет ИТС отписать разработчикам.
25 Fragster
 
гуру
24.05.12
16:57
(24) проверь вот такую вещь (ну, подобную :) )

ВЫБРАТЬ
   ПоступлениеТоваровТовары.Номенклатура.Наименование
ИЗ
   Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары

СГРУППИРОВАТЬ ПО
   ПоступлениеТоваровТовары.Номенклатура.Наименовани

в 8.1 - отсортировано получается, а в 8.2?
26 simol
 
24.05.12
16:58
Вот замер в совместимости 8.1 http://screencast.com/t/vMkA6xdJIv25
Вот без него http://screencast.com/t/Wo5FNqvM

запрос в строке 827 как был 5 сек так и остался, а запрос в строке 1776 в 100 раз дольше делался
27 Fragster
 
гуру
24.05.12
16:59
(26) так давай запрос из строки 1776 :)
28 simol
 
24.05.12
17:05
29 Fragster
 
гуру
24.05.12
17:06
(28) эт что?
30 Fragster
 
гуру
24.05.12
17:06
выложи на pastebin
31 simol
 
24.05.12
17:08
32 Fragster
 
гуру
24.05.12
17:11
(31) непонятно, почему в 8.1 не тупило :) замени все вложенные запросы на временные таблицы, особенно места с виртуальными таблицами типа                    РегистрНакопления.ЗаданияНаВыпуск.Остатки(, ) КАК ЗаданияНаВыпускОстатки
                           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._ВременныеНормыПроизводства.СрезПоследних КАК _ВременныеНормыПроизводстваСрезПоследних
                           ПО ЗаданияНаВыпускОстатки.ЗаданиеНаПроизводство.Подразделение = _ВременныеНормыПроизводстваСрезПоследних.Подразделение
                                   И ЗаданияНаВыпускОстатки.Номенклатура = _ВременныеНормыПроизводстваСрезПоследних.Номенклатура
                                   И ЗаданияНаВыпускОстатки.ХарактеристикаНоменклатуры = _ВременныеНормыПроизводстваСрезПоследних.ХарактеристикаНоменклатуры
                           ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
                           ПО ЗаданияНаВыпускОстатки.Спецификация.Код = СпецификацииНоменклатуры.Код
                                   И (ПОДСТРОКА(СпецификацииНоменклатуры.КодВерсии, 2, 4) = ПОДСТРОКА(ЗаданияНаВыпускОстатки.Спецификация.КодВерсии, 2, 4))
                                   И (ПОДСТРОКА(СпецификацииНоменклатуры.КодВерсии, 1, 1) <> "9")
                                   И ((НЕ СпецификацииНоменклатуры.ПометкаУдаления))


Лучше получение данных из виртуальных таблиц пихнуть отдельно во временные, а потом их уже слеплять
33 Fragster
 
гуру
24.05.12
17:12
ну и сначала отбирать по первой таблице, а потом к ней уже лепить
34 Fragster
 
гуру
24.05.12
17:12
судя по всему - тяжелое наследие 8.0
35 simol
 
24.05.12
17:14
(34)спасибо конечно, но вопрос не в помощи оптимизации запроса, а понять почему деградация при отмене совместимости
36 Fragster
 
гуру
24.05.12
17:14
(35) поменяли способ получения виртуальных таблиц из физических, например
37 Fragster
 
гуру
24.05.12
17:15
(36) от чего оптимизатор заплющило
38 Schwonder
 
24.05.12
17:15
(36) Потому что 1С!
39 simol
 
24.05.12
17:16
Хреново, что в обоих случаях сделали хуже, а не лучше
40 Fragster
 
гуру
24.05.12
17:18
(39) может оно стало работать быстрее, просто скуль вложенные запросы совсем не любит и в данном случае его стало срубоать на тэйбл скан

сравни скорость получения среза последних в 8.1 и 8.2
41 simol
 
24.05.12
17:18
(25)Кстати нормально выполнился
42 Fragster
 
гуру
24.05.12
17:19
(41) нормально - в смысле результат отсортирован (опбрати внимание - у меня получаются наименования)?
43 simol
 
24.05.12
17:20
(42)Там же нет сортировки почему должно быть отсортировано?
44 Fragster
 
гуру
24.05.12
17:22
(43) а это я туплю :) оно только на файловой так
45 simol
 
24.05.12
17:58
Я нашел геморой, который медленно работает.
один запрос соединяется с регистром сведений Значения свойств объектов и там одно из условий соединения (ЗначенияСвойствОбъектов.Объект ССЫЛКА Документ.ЗаказПоставщику)
которое в контексте к тому же бессмысленное

кто-то может объяснить почему в совместимости 8.1 и без нее такая проверка работает по разному?
46 simol
 
24.05.12
18:00
да, а уменьшение вложенности с помощью временных таблиц ситуацию не изменило
47 Fragster
 
гуру
24.05.12
18:02
(45) видимо в 8.1 это поле входит в индекс, а в 8.2 - нет
48 Fragster
 
гуру
24.05.12
18:02
(47) я имею ввиду _tref в скуле
49 simol
 
24.05.12
18:05
Но с режима совместимости 8.1 в режим совместимости 8.2.13 переключается без реструктуризации. даже динамически может. а уже тормозит
50 Fragster
 
гуру
24.05.12
18:05
а покажи запрос с уменьшенной вложенностью?
51 Fragster
 
гуру
24.05.12
18:10
вообще - если скорость запроса не устраивает, то нужно разбить его на маленькие части и курить индексы. данные о них можно получить через ПолучитьСтруктуруХраненияБазыДанных()
52 simol
 
24.05.12
18:11
(50)Вложенность не минимальна. Но скорость уже устраивает и нужно переходить к следующему запросу.
53 simol
 
24.05.12
18:14
(51)Это я умею. неожиданно, что разное поведение 1с
54 artbear
 
24.05.12
18:37
(45) А может быть все-таки не Объект Ссылка ... виновато,
а именно разименование Объект.Реквизит ?
например, вот у человека была проблема с RLS http://www.miko.ru/blogs/metalblog/129/ из-за составного типа.
55 simol
 
24.05.12
18:40
(54)У тестового пользователя только полные права, других ролей нет, в роли Полные права RSL не настроены
56 Fragster
 
гуру
24.05.12
18:40
(54) да нет, корень всех зол в том, что оптимизатор растаращило, а в 8.1 способ получения вирт. таблиц был другой, видимо, проще и оптимизатор по совокупности переваривал. надо просто сравнить запросы в скуле ипланы выполнения через профайлер скульный
57 simol
 
24.05.12
19:24
Я разобрался с непоняткой 1

Высказывание (7) имеет место быть, только если в привилегированном режиме в тексте выполняемого запроса есть слово РАЗРЕШЕННЫЕ.

Если РАЗРЕШЕННЫЕ нет, то RSL игнорируются