|
Производительность запроса в 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) в каком месте, простите, они одинаковые? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |