Имя: Пароль:
1C
 
MS SQL и 1С. Объясните, где я не прав?
,
0 H A D G E H O G s
 
11.01.19
00:52
Дня доброго.
Внедрение, внедрение, документ медленно записывает регистр сведений, который ему подчинен и имеет срез итогов. Затык вот тут

INSERT INTO #tt24 WITH(TABLOCK) (_Period, _RecorderTRef, _RecorderRRef, _Fld8417RRef, _Fld8418RRef, _Fld8419RRef, _Fld8420, _Fld8421RRef, _Fld8422RRef, _Fld281) SELECT
T1._Period,
T1._RecorderTRef,
T1._RecorderRRef,
T1._Fld8417RRef,
T1._Fld8418RRef,
T1._Fld8419RRef,
T1._Fld8420,
T1._Fld8421RRef,
T1._Fld8422RRef,
T1._Fld281
FROM dbo._InfoRgSL8427 T1
INNER JOIN dbo._InfoRg8416 T2
ON T2._Fld8417RRef = T1._Fld8417RRef AND T2._Fld8418RRef = T1._Fld8418RRef AND T2._Fld8419RRef = T1._Fld8419RRef AND T2._Fld281 = T1._Fld281
WHERE (((T1._Fld281 = P1)) AND (T2._Fld281 = @P2)) AND (T2._RecorderTRef = 0x0000008D AND T2._RecorderRRef = @P3)


Сначало долго тупил и не верил своим глазам - tablescan по _InfoRgSL8427, а потом присмотрелся и увидел, что единственный индекс по _InfoRgSL8427  - некластерный.
Ну я понимаю, чтобы быстрее вставки были, но как так то, тут и так как раз запись в регистр идет.

Это глюк или хитрый план?
Платформа 8.3.12
1 Fram
 
11.01.19
01:45
(0) обе таблицы огромные?
2 Fram
 
11.01.19
01:46
попробуй сначала отбор по одной, а потом соединение, если это вощможно на стороне 1С
3 Курцвейл
 
11.01.19
06:33
Это явный глюк. Хитрые планы в природе встречаются гораздо реже.
4 АНДР
 
11.01.19
06:37
Это вставка во временную таблицу, а не запись в регистр.

Скан таблицы ты сам заказал, не указав в УСЛОВИЯХ СОЕДИНЕНИЯ ограничение на КЛЮЧЕВОЕ для таблицы среза первых (последних) поле period. Условие на регистратор применяется уже к итогам     объединения.
5 мокасинчик
 
11.01.19
06:49
(4) если для таблицы среза не указывать период, то берутся текущие итоги
(0) выкладывай план в sqlplan
6 АНДР
 
11.01.19
07:47
(5) В 1С - да. Из ограничения приведенного запроса этого не следует.
7 rphosts
 
11.01.19
09:09
(0)ну дык срез-же... там случайно не ресурсы тебе нечисловые нужны?
8 Конструктор1С
 
11.01.19
09:15
Хех... Один из параметров запроса оказался зареганным на форуме)
9 ptiz
 
11.01.19
09:25
(0) Т.е. индексы не соответствуют описанию тут?
https://its.1c.ru/db/metod8dev#content:1590:hdoc@2db36f1b
10 H A D G E H O G s
 
11.01.19
09:47
Ну, ничего нового.

Если внимательно прочитать заголовок, то можно увидеть

"документ медленно записывает регистр сведений, который ему подчинен и имеет срез итогов. "
11 H A D G E H O G s
 
11.01.19
09:49
В процессе записи регистра, есть этап записи во временную таблицу, это делает платформа. 600 kReads на ровном месте.
12 bolobol
 
11.01.19
10:19
(11) Вы уже сообщили куда следует?
13 Вафель
 
11.01.19
10:27
как вариант сделать свою таблицу итогов
14 H A D G E H O G s
 
11.01.19
10:29
(12) (13) Я уже прочитал где следует

http://downloads.v8.1c.ru/content//Platform/8_3_13_1644/1cv8upd_8_3_13_1644.htm#199f74c8-0668-11e8-a3f7-0050569f678a

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

Отключен контроль уникальности индексов.

Оптимизированы запросы получения данных из таблиц срезов.

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

Источник: http://downloads.v8.1c.ru/content//Platform/8_3_13_1644/1cv8upd_8_3_13_1644.htm#0055064e-0a7f-11e8-a3f7-0050569f678a
15 H A D G E H O G s
 
11.01.19
10:30
Ну как так то, почему это появилось в 8.3.13, на которую мы не перейдем еще долго.
16 H A D G E H O G s
 
11.01.19
10:33
Но у меня есть хитрый план.
17 bolobol
 
11.01.19
11:07
(16) Как правильно было замечено в (3): "Это явный глюк. Хитрые планы в природе встречаются гораздо реже."
18 Fragster
 
гуру
11.01.19
11:21
это из-за суррогатного поля первичного ключа или что-то типа того?
19 H A D G E H O G s
 
11.01.19
11:29
(18) нет. Это из за того, что нет кластерного индекса. И некластерный индекс может поискать только внутри себя и даже RIDLookup не сделать.
20 H A D G E H O G s
 
11.01.19
11:31
А запросу нужны вот эти парни
T1._Period,
T1._RecorderTRef,
T1._RecorderRRef,

которых нет в некласетрном индексе
21 rsv
 
11.01.19
11:31
(0) попробуйте ради интереса в студии inner hash join
22 Dmitry1c
 
11.01.19
11:33
Будни экспертов по платформе.
23 Вафель
 
11.01.19
11:36
индекс можно ручками добавить, если так нужно
24 H A D G E H O G s
 
11.01.19
11:37
(23) Ох уж эти хитрые планы.
25 Вафель
 
11.01.19
11:39
(24) да пожизненно так делали
26 rphosts
 
11.01.19
17:58
(16) это нарушение лиц. соглашения
27 Fram
 
11.01.19
18:17
(26) вот ведь проблема
28 rphosts
 
11.01.19
18:19
(27) это факт, а проблема или нет - решает каждый сам для себя...
29 Конструктор1С
 
12.01.19
04:49
Как-то беспечно 1Сники пока что относятся к нарушению лицензионного соглашения. А ведь с точки зрения ЛС, что платформу крякнуть, что индекс средствами СУБД ляпнуть, это всё едино нарушение ЛС, со всеми вытекающими.
30 h_miha
 
12.01.19
05:22
я писал об этой ошибке год назад на форуме разработчиков 1с https://partners.v8.1c.ru/forum/, на что мне был дан ответ что это зарегистрированная ошибка. суть в том что таблицы, в которых хранится срез актуальных итогов ( т.е. при установленном флаге "Хранить итоги срез последних" практически единственная представляет из себя кучу (т.е. не имеет кластеризованного индекса, данные не упорядочены) помимо этого настройка регистра сведений : признак индексировать у измерения также не переносится в эту таблицу.  вариантов несколько:  1) отключить флаг "Хранить итоги срез последних"  2) в запросе указать дату (возможно отличную от текущей хотя бы на секунду) - будет использован подзапрос к основной таблице 3) самостоятельно навешать кластеризованный индекс = )
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший