Имя: Пароль:
1C
1С v8
Производительность запроса в 8.2 (с режимом совместимости 8.1 и без)
,
0 greenzmo
 
27.07.11
15:18
Добрый день! У клиента база УПП релиз 1.3.10.1.
Возник вопрос в производительности запроса в 8.2 с вкл. и выкл. режимом совместимости с 8.1. Когда режим совместимости ВКЛЮЧЕН, запрос выполняется в среднем в 400 раз быстрее, нежели когда режим ВЫКЛЮЧЕН!!!

Собственно запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
  Основания.Основание
ИЗ
  Документ.ПоступлениеТоваровУслуг.Основания КАК Основания
ГДЕ
  Основания.Ссылка = &Ссылка
  И Основания.Основание В
    (ВЫБРАТЬ
       Основания.Основание
     ИЗ
   Документ.ПоступлениеТоваровУслуг.Основания КАК Основания
     ГДЕ
   Основания.Ссылка.Проведен
   И Основания.Основание <> НЕОПРЕДЕЛЕНО
   И НЕ (Основания.Основание В (&ПустаяСсылка))
   И Основания.Ссылка <> &Ссылка)

Запрос проверяет, указано ли какое-нибудь из оснований в текущем документе ПТиУ в других документах ПТиУ.
В качестве параметра &Ссылка передается ссылка на текущий документ ПТиУ.
Реквизит "Основание" ТЧ "Основания" имеет составной тип данных.
В качестве параметра &ПустаяСсылка передается массив, состоящий из ссылки на новый НЕ типовой документ.

Почему так происходит? Вроде без режима совместимости конфа должна быстрее работать, а тут получается наоборот? :(
1 GROOVY
 
27.07.11
15:23
Режим совместимости не оказывает никакого влияния на скорость выполнения запроса. Скорее всего замер производился не корректно, или при замере влияние оказывал кэш системы.
2 hhhh
 
27.07.11
15:28
(0) чтобы убрать влияние кеша, действуйте по схеме.

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

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

потом сравниваете полученные два времени.
3 TigerPXN
 
27.07.11
15:28
(1) Кстати, а контроль доступа на уровне полей не может оказывать влияния?
4 apokrit
 
27.07.11
15:39
(1) Может ради интереса трейсы посмотришь в обоих режимах, перед тем как сказки-то рассказывать?

По сути, твое высказывание можно перефразировать так:
"Текст запроса и структура таблиц не оказывают никакого влияния на скорость выполнения запроса"....
5 ptiz
 
27.07.11
15:42
(4) Разве режим совместимости меняет текст запроса и структуру таблиц?
6 H A D G E H O G s
 
27.07.11
15:43
И Основания.Основание <> НЕОПРЕДЕЛЕНО
   И НЕ (Основания.Основание В (&ПустаяСсылка))


На всякий случай?
7 H A D G E H O G s
 
27.07.11
15:44
А, не, ошибся
8 H A D G E H O G s
 
27.07.11
15:45
Это только у меня текст запроса вызывает тупую, тяжелую злость?
9 Дикообразко
 
27.07.11
15:53
(8) это предотпускное
10 Fragster
 
гуру
27.07.11
15:59
а в таком запросе разница есть:


Выбрать
 Таблица.ДокОснование,
 Количество(Таблица.Ссылка) КАК КоличествоСсылок,
Поместить НеправильныеОснования
Из
 Таблица как Таблица
Сгруппировать по
 Таблица.ДокОснование
Имеющие
 Количество(Таблица.Ссылка) <> 1
Индексировать по
 ДокОснование
;

Выбрать
 Таблица.Ссылка,
 НеправильныеОснования.КоличествоСсылок
Из
 Таблица как Таблица
 Внутреннее соедиение НеправильныеОснования
   ПО Таблица.ДокОснование = НеправильныеОснования.ДокОснование
11 rs_trade
 
27.07.11
16:06
(8) да. у меня вызвал улыбку.
12 greenzmo
 
27.07.11
16:20
Да, запрос написан не очень красиво - но вопрос-то не в этом!
Попробую поперезагружаться и сравнить замеры
13 rs_trade
 
27.07.11
16:21
(12) не трать время. лучше запрос перепиши.
14 TigerPXN
 
27.07.11
16:23
(5) Вроде, контроль прав доступа на уровне полей появился только в 8.2. А это может сильно менять структуру запроса и снижать скорость исполнения.
15 John83
 
27.07.11
16:26
"Вроде без режима совместимости конфа должна быстрее работать"
странно, вроде говорили совсем обратное...
16 John83
 
27.07.11
16:27
+(15) упс... "обчитался" :)
17 TigerPXN
 
27.07.11
16:28
Вообще, если судить по субъективным ощущениям, то 8.2 немного тормознее, чем 8.1. Но это чисто на уровне субъективных ощущений. Вот когда 8.1 появилась, то по ощущениям она была быстрее 8.0.
18 Ellowis
 
27.07.11
16:30
Не знаю с чем связанно, но после одного из релизов платформы конструкция " где Поле в (выбрать...)" стала работать очень медленно.
Утверждение верно если результат, получаемый внутри конструкции " (выбрать...)" получается большого размера
19 Fragster
 
гуру
27.07.11
16:33
(18) это не "после одного из релизов", это так и есть. лучше внутреннее соединение юзать, если можно
20 Ellowis
 
27.07.11
16:37
(19) возможно Вы правы.
Но не всегда возможно использовать внутреннее соединение
21 Ник второй
 
27.07.11
16:44
(20) Естественно. Надо нормализовать структуру хранения данных
22 GROOVY
 
27.07.11
16:47
(4) Не надо меня перефразировать.

Текст запроса не менялся.

Как поменялись таблицы при смене режима совместимости (те которые в запросе указаны)?

Скорость выполнения не изменится из-за изменения режима совместимости.

Только что проверил на бухии.

То что в (0) запрос "слегка не оптимальный" это другой вопрос.
23 Fragster
 
гуру
27.07.11
16:48
(20) я и пишу - если можно
(21) в условиях виртуальных таблиц хоть как извратись - а внутреннего соединения не будет. если только 1с парсер не переделает, чтобы он сам на внутреннее итоговый запрос к скулю переделывал, если видит В (Выбрать)
24 Axel2009
 
27.07.11
16:51
(0) а если под полными правами и убрать РАЗРЕШЕННЫЕ у запроса, то сравнить время?
25 TigerPXN
 
27.07.11
16:56
(24) Насколько я помню, запрос с "РАЗРЕШЕННЫЕ" исполняется быстрее.
26 GoldenDawn
 
27.07.11
16:59
(25)там просто записей меньше в результате
27 Ellowis
 
27.07.11
17:47
(21) Будто после нормализации эта возможность будет всегда.
(22) Скорость может и не меняется... а интерпретируется запрос одинаково?
28 GROOVY
 
27.07.11
17:48
(27) А вопрос разве в этом был?  Для приведенного текста запроса одинаково.
29 Ellowis
 
27.07.11
17:50
(28) Ну так судя по всему при изменении совместимости меняются правила по которым работает интерпретатор. Отсюда и изменение в скорости работы
30 GROOVY
 
27.07.11
17:53
(29) Работа интерпретатора не зависит от режима совместимости. Исключение: таблицы констант.
31 greenzmo
 
27.07.11
18:10
Вообщем переписал текст запроса. Теперь разница во времени стремится к нулю :)
Всем спасибо за ответы!

P.S. Удаление ключевого слова "РАЗРЕШЕННЫЕ" ничего не изменило
32 acsent
 
27.07.11
18:14
Файловая?????
33 Fragster
 
гуру
27.07.11
18:15
(31) на (10)?
34 greenzmo
 
27.07.11
18:19
(32) да
(33) нет, сделал совсем просто:

ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
  Основания.Основание
ИЗ
  Документ.ПоступлениеТоваровУслуг.Основания КАК Основания
ГДЕ
  Основания.Ссылка.Проведен
  И Основания.Основание <> НЕОПРЕДЕЛЕНО
  И (НЕ Основания.Основание В (&ПустаяСсылка))
  И Основания.Ссылка <> &Ссылка
  И Основания.Основание В (&МассивОснований)

В параметр &МассивОснований передаю массив ссылок-оснований из текущего документа
35 apokrit
 
27.07.11
18:43
(22) Я так понимаю лень трейс самому снять, лучше на форуме пофлудить ? ;)

Мне не сложно, вот "неизмененные" тексты запросов.

Режим совместимости: Версия 8.2.13

exec sp_executesql N'SELECT DISTINCT
T1._Fld25816_TYPE,
T1._Fld25816_RTRef,
T1._Fld25816_RRRef
FROM _Document405_VT25813 T1 WITH(NOLOCK)
WHERE (T1._Document405_IDRRef = P1) AND EXISTS(SELECT
1
FROM _Document405_VT25813 T2 WITH(NOLOCK)
LEFT OUTER JOIN _Document405 T3 WITH(NOLOCK)
ON T2._Document405_IDRRef = T3._IDRRef
WHERE (T3._Posted = @P2 AND (T2._Fld25816_TYPE <> @P3) AND (NOT (((T2._Fld25816_TYPE = @P4 AND T2._Fld25816_RTRef = @P5 AND T2._Fld25816_RRRef IN (@P6))))) AND (T2._Document405_IDRRef <> P1)) AND (T1._Fld25816_TYPE = T2._Fld25816_TYPE
AND T1._Fld25816_RTRef = T2._Fld25816_RTRef AND T1._Fld25816_RRRef = T2._Fld25816_RRRef))', N'P1 varbinary(16),@P2 varbinary(1),@P3 varbinary(1),@P4 varbinary(1),@P5 varbinary(4),@P6 varbinary(16)', 0x8D3250505450303011D8EA23BEA97295,
0x01, 0x01, 0x08, 0x00000195, 0x00000000000000000000000000000000

Режим совместимости: Версия 8.1

exec sp_executesql N'SELECT DISTINCT
_Document405_VT25813_Q_000_T_001._Fld25816_TYPE AS f_1,
_Document405_VT25813_Q_000_T_001._Fld25816_RTRef AS f_2,
_Document405_VT25813_Q_000_T_001._Fld25816_RRRef AS f_3
FROM
_Document405_VT25813 _Document405_VT25813_Q_000_T_001 WITH(NOLOCK)
WHERE
_Document405_VT25813_Q_000_T_001._Document405_IDRRef = P1 AND EXISTS(
SELECT
_Document405_VT25813_Q_001_T_001._Fld25816_TYPE AS _Q_001_F_000_TYPE,
_Document405_VT25813_Q_001_T_001._Fld25816_RTRef AS _Q_001_F_000_RTRef,
_Document405_VT25813_Q_001_T_001._Fld25816_RRRef AS _Q_001_F_000_RRRef
FROM
_Document405_VT25813 _Document405_VT25813_Q_001_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document405 _Document405_raevjiwz WITH(NOLOCK)
ON _Document405_VT25813_Q_001_T_001._Document405_IDRRef = _Document405_raevjiwz._IDRRef
WHERE
_Document405_raevjiwz._Posted = @P2 AND _Document405_VT25813_Q_001_T_001._Fld25816_TYPE <> @P3 AND NOT (_Document405_VT25813_Q_001_T_001._Fld25816_TYPE = @P4 AND _Document405_VT25813_Q_001_T_001._Fld25816_RTRef = @P5 AND
_Document405_VT25813_Q_001_T_001._Fld25816_RRRef IN (@P6)) AND _Document405_VT25813_Q_001_T_001._Document405_IDRRef <> P1 AND _Document405_VT25813_Q_000_T_001._Fld25816_TYPE = _Document405_VT25813_Q_001_T_001._Fld25816_TYPE AND
_Document405_VT25813_Q_000_T_001._Fld25816_RTRef = _Document405_VT25813_Q_001_T_001._Fld25816_RTRef AND _Document405_VT25813_Q_000_T_001._Fld25816_RRRef = _Document405_VT25813_Q_001_T_001._Fld25816_RRRef)', N'P1 varbinary(16),@P2
varbinary(1),@P3 varbinary(1),@P4 varbinary(1),@P5 varbinary(4),@P6 varbinary(16)', 0x8D3250505450303011D8EA23BEA97295, 0x01, 0x01, 0x08, 0x00000195, 0x00000000000000000000000000000000

В режиме "Не использовать" (= 8.2.14) и структура таблицы изменится, правда незначительно.
36 GROOVY
 
27.07.11
19:52
(35) Как таблицы изменятся?
Почему запрос к куче таблиц делает обращение? Про связанные данные небыло речи У ТС.
Если я в регистре сделаю поле составного типа и буду от туда данные получать, то естественно при разных платформах трассировка будет хрен знает какой.
37 apokrit
 
28.07.11
09:08
(36)
>Как таблицы изменятся?
Если правда интересно можно взять самому и посмотреть.
>Про связанные данные небыло речи У ТС.
В (0) косвенно спрашивал может ли производительность зависеть от режима совместимости.
Некий большой специалист в (1) написал что ни как не может - ведь текст запроса-то одинаковый.
Я в (35) привел результаты трансляции запроса из (0) в TSQL при разных режимах совместимости.
О каких связанных данных идет речь?

Дальше уже совсем какой-то поток мысли пошел, поэтому прокомментирую только:
>...при разных платформах трассировка...
Платформа, конфигурация и запрос с которых получены трейсы в (35) не менялись. Менялся только режим совместимости (это такое свойство корня конфигурации).
38 Axel2009
 
28.07.11
09:20
(37) ну и запросы то по сути одинаковые, что с совместимостью, что без.
39 Ellowis
 
28.07.11
10:39
(30) если смотреть в (35) все таки зависит?
(38) в каком месте, простите, они одинаковые?
2 + 2 = 3.9999999999999999999999999999999...