Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

План запроса в sql2005

План запроса в sql2005
Я
   Мистикан
 
31.10.18 - 17:04
Из книжки Настольная книга эксперта по технологическим вопросам.
"Условия в запросе и индексы в базе должны друг другу соответствовать"
Запускаю 1c (ERP 2.4,8.3.10,SQL2005),запускаю профайлер.
Выполняю запрос:

ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
    СвободныеОстаткиОстатки.Склад КАК Склад,
    СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки(, Склад = &Склад) КАК СвободныеОстаткиОстатки

Структура измерений:
Номенклатура,Характеристика,Склад

Профайлер показывает что использует Clastered index seek.
Почему?
 
 
   Мистикан
 
1 - 31.10.18 - 17:09
   Timon1405
 
2 - 31.10.18 - 17:09
а какой оператор вы ожидаете увидеть?
   Мистикан
 
3 - 31.10.18 - 17:10
скан
   palsergeich
 
4 - 31.10.18 - 17:10
Ну дык так и должно быть
   Мистикан
 
5 - 31.10.18 - 17:10
Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкпадахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Качество |ИЗ | РегистрНакопления.ТоварыНаСкпадах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки"; В данном случае нарушено требование 2. В условии отсутствует отбор по первому нолю индекса (Склад). Такой запрос не сможет выполниться оптимально. Для его выполнения серверу СУБД придется перебирать (сканировать) все записи таблицы. Время выполнения этой операции напрямую зависит от количества записей в таблице остатков регистра и может быть очень большим (и будет увеличиваться с ростом вшичества данных).
   palsergeich
 
6 - 31.10.18 - 17:11
Обращается к таблице итогов и по дате получает оперативный
   Мистикан
 
7 - 31.10.18 - 17:11
это с книжки
   Мистикан
 
8 - 31.10.18 - 17:12
(6) я тоже это понимаю.
   palsergeich
 
9 - 31.10.18 - 17:14
   palsergeich
 
10 - 31.10.18 - 17:15
(5) Вопрос то в чем?
 
 Рекламное место пустует
   Вафель
 
11 - 31.10.18 - 17:15
может на складе ввсего пару позиций?
   Мистикан
 
12 - 31.10.18 - 17:16
(11) да немного
   palsergeich
 
13 - 31.10.18 - 17:16
[ОРРХ | ОРНР1 +] Период + Измерение1 + ... + ИзмерениеN (Кластерный) ) + Splitter а он и есть кластерный у таблицы итогов. Все как надо
   Мистикан
 
14 - 31.10.18 - 17:16
(13) тут по 3 измерению условие а не по 1
   palsergeich
 
15 - 31.10.18 - 17:17
(14) Оптимизатор решил что так будет правильно
   Ёпрст
 
16 - 31.10.18 - 17:18
(5) определись ужо, в (0) у тя фильтр по складу, в (5) - по номенклатуре..
а в реальности - хз что
   Timon1405
 
17 - 31.10.18 - 17:19
(14) если оно индексировано, то читать пункт 2 в РС в (13) до полного просветления
   Timon1405
 
18 - 31.10.18 - 17:19
* в (9)
   Мистикан
 
19 - 31.10.18 - 17:19
(16) в книге структура регистра из ут 10  отличается
Там первое измерение склад, в ERP номенклатура
   H A D G E H O G s
 
20 - 31.10.18 - 17:19
(0) seek по дате, Склад - в остаточном предикате поиска.
   palsergeich
 
21 - 31.10.18 - 17:19
Оптимизатор основываясь на статистике решает какой план будет в том или ином случае оптимальнее и передает на исполнение. Но то что это будет действительно оптимальный план - гарантий нет
   Мистикан
 
22 - 31.10.18 - 17:20
(17) оно не индексировано вообще, нет покрывающего.
   palsergeich
 
23 - 31.10.18 - 17:20
(22) Кластерный индекс - он предоставляется платфорой и будет покрывающим
   palsergeich
 
24 - 31.10.18 - 17:20
   Мистикан
 
25 - 31.10.18 - 17:21
(20) Понял спасибо.
   palsergeich
 
26 - 31.10.18 - 17:21
(25) Это так называемое частичное сканирование индекса. Совершенно нормальная ситуация
   Мистикан
 
27 - 31.10.18 - 17:22
надо кароч сделать миллиончик движений по регистру и проверить результат
   palsergeich
 
28 - 31.10.18 - 17:23
Надо не просто миллион а миллион в разных периодах
   palsergeich
 
29 - 31.10.18 - 17:23
И миллиона мало
   palsergeich
 
30 - 31.10.18 - 17:25
И номенклатуры побольше разной
   Tonik992
 
31 - 31.10.18 - 17:32
(14)
При получении остатков период всегда используется, даже если вы его не указали. 1С расщепит запрос понятный для mssql, а там будет дата для получения текущих итогов.
И + вы используете отбор по измерению.
Все под clastered index seek, как доктор прописал.
   H A D G E H O G s
 
32 - 31.10.18 - 17:33
По ощущениям, из всего форума по теме шарит только palsergeich, да Анатолий, когда валазит из своих java/ бигдата.
   DrWatson
 
33 - 31.10.18 - 17:37
(32) 1С:Эксперт вообще редкое явление.
 
 
   Tonik992
 
34 - 31.10.18 - 17:37
(33) Нуралиев вообще один
   Мистикан
 
35 - 31.10.18 - 17:42
(32) хз.. судя по собеседованиям на вакухи в незалежную такое ощущение что эксперты под каждым забором валяются
   DrWatson
 
36 - 31.10.18 - 17:42
Кстати, в современных типовых всегда есть разделитель данных. Поэтому если и не дата, то сеек должен быть хотя бы по разделителю.
   Мистикан
 
37 - 31.10.18 - 17:43
И кандидат на вакансию программист за 120к просто ОБЯЗАН знать все о оптимизации и работе СУБД ))))
   H A D G E H O G s
 
39 - 31.10.18 - 17:58
(37) А сколько получаете вы?
   gantonio
 
40 - 31.10.18 - 17:59
где вы все работаете ? В аэропортах что ли  ? у меня на работе почти млрд выручка за год на10 пользователей. Вообще никакие запросы не нужны.
   palsergeich
 
41 - 31.10.18 - 18:16
(37) В МСК на 120 дай бог что бы запросы на практике умел применять. А если еще и СКД то просто огонь.
(37) Все хотят, просто потому что это модно.
   gantonio
 
42 - 31.10.18 - 18:17
я тоже хочу ..
   palsergeich
 
43 - 31.10.18 - 18:21
(36) разделитель включается соответствующей опцией же.
На практике кроме фреша не видел что бы этим кто то пользовался
   xXeNoNx
 
44 - 31.10.18 - 18:22
(32) не скромничай, себя-то посчитай
   H A D G E H O G s
 
45 - 31.10.18 - 18:25
(44) Это априори.
   xXeNoNx
 
46 - 31.10.18 - 18:29
(0) а шо показывает rpc:completed?
   nicxxx
 
47 - 31.10.18 - 18:33
(36) Вы много видели баз, где разделитель реально используется? Не будет Seek по этой колонке, т.к. там всегда 0 (ноль) у подавляющего большинства. Как следствие - статистика по индексам, где есть область данных, в целом бесполезна, т.к. самая левая колонка всегда содержит одно значение. SQL Server строит колоночную статистику по каждой колонке и использует затем её при формировании плана запроса. Посмотрите на статистики с префиксом WA - это оно и есть.
   xXeNoNx
 
48 - 31.10.18 - 18:44
(45) отсыпь, тож хочу таких ощущений
   Мистикан
 
49 - 01.11.18 - 09:35
(40) ну знаешь я сейчас в компании работаю тут 5 лярдов и даже никакая 1с 8 не нужна ибо учетная система на 7.7 ))))
 
 Рекламное место пустует
   Мистикан
 
50 - 01.11.18 - 09:37
(39) 60... переферия ((
   Мистикан
 
51 - 01.11.18 - 09:39
(46) exec sp_executesql N'SELECT
T1.Fld63162RRef,
T1.Fld63164RRef,
T1.Fld63165Balance_
FROM (SELECT
T2._Fld63164RRef AS Fld63164RRef,
T2._Fld63162RRef AS Fld63162RRef,
CAST(SUM(T2._Fld63165) AS NUMERIC(32, 8)) AS Fld63165Balance_
FROM dbo._AccumRgT63169 T2
WHERE ((T2._Fld2124 = P1)) AND (T2._Period = @P2 AND ((T2._Fld63164RRef = @P3)) AND (T2._Fld63165 <> @P4) AND (T2._Fld63165 <> @P5))
GROUP BY T2._Fld63164RRef,
T2._Fld63162RRef
HAVING (CAST(SUM(T2._Fld63165) AS NUMERIC(32, 8))) <> 0.0) T1',N'P1 numeric(10),@P2 datetime,@P3 varbinary(16),@P4 numeric(10),@P5 numeric(10)',0,'Nov  1 5999 12:00:00:000AM',0x8C8900155D505D0A11E88516CE5760B6,0,0
   gantonio
 
52 - 01.11.18 - 09:41
(49) ну, я и говорю, что как же надо так жить что бы до планов запросов дожить.
   Cool_Profi
 
53 - 01.11.18 - 09:45
Интересно, как можно работать в 1с, не используя запросов?
   Nikoss
 
54 - 01.11.18 - 09:49
(53) не используя таких запросов как в (51), вполне себе работается, и таких 1с-ников большинство
   Мистикан
 
55 - 01.11.18 - 09:51
(54) ты вообще о чем... это тупой запрос остатков с отбором по складу в ERP 2.4, в представлении команд mssql 2005, как его выполняет субд.
   Мистикан
 
56 - 01.11.18 - 09:52
(53) ваще... я на 7.7 код пишу и блин плачу...
   Cool_Profi
 
57 - 01.11.18 - 09:53
(56) А когда я писал код в 77, платили мне...
   Мистикан
 
58 - 01.11.18 - 09:54
(57) не.. я про грусть печаль,тоску, желание убежать и спрятаться
   Cool_Profi
 
59 - 01.11.18 - 09:55
(58) Ты, главное, в оружейный не беги...
А так я писал приличные ))) скуль-запросы для 77... И всё работало шустренько
   Мистикан
 
60 - 01.11.18 - 09:56
(59) не.. нафиг.. работа временная...я уже с ними расстаться планирую ближайшее время.. лезть в дебри 1сpp ну его...
   Мистикан
 
61 - 01.11.18 - 10:00
нет все таки я не понимаю почему seek до конца... тут же вроде не идексированная выборка результатов подзапроса по таблице итогов...
   H A D G E H O G s
 
62 - 01.11.18 - 11:48
(61) У тебя пропущено измерение в фильтре - вот и seek не до конца.
   H A D G E H O G s
 
63 - 01.11.18 - 11:52
(61) Посмотри, сколько reads в профайлере на этапе выполнения запроса. Их будет много. Будет считана вся часть таблицы итогов на дату
Nov  1 5999 12:00:00:000AM


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует