Имя: Пароль:
1C
1С v8
Запрос к номенклатурнику 60000+
,
0 Мистикан
 
15.08.18
10:39
i5/RAID 10 Sata 6g/b. Терминальный сервак,ms sql 2017,сервер приложений(через именнованные каналы). все на одном рейде.
В MS SQL 2017 (ничего не настраивал кроме восстановления и реорганизации индексов)

в 1с запрос типа "Выбрать н.Ссылка Из Справочник.Номенклатура" выполняется 6 секунд.
в SQL SELECT _IDRRef FROM ERP.dbo._Reference287 выполняется 0.3 секунды

что может быть не так?
2 scanduta
 
15.08.18
10:40
как замерял?
3 Cyberhawk
 
15.08.18
10:41
Пади это не запрос выполняется столько, а вывод результата на экран горе-замерятеля )
4 FIXXXL
 
15.08.18
10:44
(0) выполни НаСервере и померь
5 Мистикан
 
15.08.18
10:45
разумеется не через консоль запросов.. замер производительности, и раземеется на сервере
6 Мистикан
 
15.08.18
10:45
консоль выводит вообще минуту )))
7 Вафель
 
15.08.18
10:46
(5) в тз выгружаешь небось?
8 Вафель
 
15.08.18
10:46
(6) консоль делает 60к+ запросов на получение наименования
9 Мистикан
 
15.08.18
10:48
Запрос = Новый Запрос("ВЫБРАТЬ Н.ССЫЛКА ИЗ СПРАВОЧНИК.НОМЕНКЛАТУРА КАК Н");
Запрос.Выполнить();
6.1-6.3 секунды
10 los_hooliganos
 
15.08.18
10:49
(9) Добавь Н.Представление
11 nicxxx
 
15.08.18
10:49
помести результат во временную таблицу, чтобы на клиента ничего не передавалось
12 Cyberhawk
 
15.08.18
10:49
Загрузку железа помониторь
13 los_hooliganos
 
15.08.18
10:50
(11) Так он и так на Сервере
14 Вафель
 
15.08.18
10:50
(10) как это может ускорить?
15 Вафель
 
15.08.18
10:50
может запрос скл не все данные возвращает, а неявно делает топ 1000?
16 los_hooliganos
 
15.08.18
10:51
Плюс еще запрос более 5000, значит платформа будет ложить полную блокировку на таблицу и ожидает освобождения и полного захвата.
17 PR
 
15.08.18
10:52
(0) Права полные?
18 Мистикан
 
15.08.18
10:53
(12) сервак тестовый, только я и больше никого (15) в результате запроса все 60263 позиции
19 los_hooliganos
 
15.08.18
10:53
(14) 60к+ запросов не должно быть, если запросить Представление вместо ссылки
20 Вафель
 
15.08.18
10:53
(16) какую блокировку? 8.3 же в режиме версионирования без блокировки чтения
21 Мистикан
 
15.08.18
10:53
(17) Локальный админ
22 Nyarlathotep
 
15.08.18
10:53
(0) Запрос 1С <> запрос SQL. Запрос 1С - это команда серверу 1С найти в SQL и вернуть некоторые данные. Сервер получает данные от SQL, из них собирает нужную тебе информацию и возвращает как результат запроса(если упрощенно). Отсюда разница в скорости. Если нужна реально высокая скорость работы - прямые запросы единственный вариант.
23 Вафель
 
15.08.18
10:53
(18) как проверяешь что все? они динамически подгружаеются по мере прокручивания
25 PR
 
15.08.18
10:54
(21) Какой админ нахрен, в 1С говорю права полные?
26 PR
 
15.08.18
10:55
+(25) И сервер 1С на том же серваке, что и скуль?
И что с загрузкой памяти и проца?
27 Мистикан
 
15.08.18
10:55
(25) да
28 los_hooliganos
 
15.08.18
10:55
Топик стартер должен запустить профайлер и тогда увидит истину.
29 Мистикан
 
15.08.18
10:56
(26) проц <20%, а вот память 7.4/7.9
30 scanduta
 
15.08.18
10:56
(28)+1
31 PR
 
15.08.18
10:57
(29) Неважно, важно, сколько в процентах памяти занято, не +90%, надеюсь?
32 Junior1s
 
15.08.18
10:57
на (27) ответь плз, это важно
33 rphosts
 
15.08.18
10:57
(28) ТС скорее всего не сможет запустить оттого и задает такие вопросы.
34 Junior1s
 
15.08.18
10:58
на (26)
35 PR
 
15.08.18
10:58
(29) >>И сервер 1С на том же серваке, что и скуль?
Ответ-то будет?
36 Мистикан
 
15.08.18
10:58
все на одном серваке, и даже на одном RAID
37 rphosts
 
15.08.18
10:58
(0) а если запустить под чела с парвами на все данные (что-б никаких нафиг РЛС!)
38 rphosts
 
15.08.18
10:58
* под = из под
39 PR
 
15.08.18
10:58
(37) А если научиться читать?
40 rphosts
 
15.08.18
10:59
и да, замер первого запроса, замер второго запроса (с разогретым кэшем).
41 Cyberhawk
 
15.08.18
10:59
Памяти под это все дело 8 Гб отведено, видимо своп дисков
42 rphosts
 
15.08.18
10:59
(39) все твои посты? Да ну нафиг!
43 PR
 
15.08.18
11:00
Замер скорости, надеюсь, делается на сервере же, непосредственно перед созданием запроса и после выполнения, никаких переходов на клиент не происходит?
44 PR
 
15.08.18
11:00
(42) Достаточно (27) прочитать, там ответ на твой вопрос
45 Мистикан
 
15.08.18
11:02
(43) да
46 PR
 
15.08.18
11:02
Ну и вообще интереса ради сколько будет делаться "ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ ИЗ Справочник.Номенклатура"
47 PR
 
15.08.18
11:04
Если очевидные вещи не сработают, то пробуй (28)
48 Мистикан
 
15.08.18
11:07
(41) спасибо
добавил 4 гига оперативки, зашевелилось.
49 PR
 
15.08.18
11:09
(48) Так а сколько из этого жрал скуль?
Ты в курсе, что скуль нужно ограничивать, иначе он убьет все живое?
50 los_hooliganos
 
15.08.18
11:09
(40) А как разогревать кэш на 1С?
Сделать запрос дважды и делать замер выполнения второго "выполнить"?
Вообще это столько разогрев кэша, сколько разогрев оптимизатора и построителя плана запросов.
51 los_hooliganos
 
15.08.18
11:11
(20) Это я немного с другим механизмом попутал :)
52 Мистикан
 
15.08.18
11:14
(49) угу. забыл ограничить... как и сервер приложений... тестовая машина...
53 PR
 
15.08.18
11:18
(52) Сервер приложений не нужно огранчичивать, а вот скуль нужно, иначе он жрет как не в себя
54 g00d
 
15.08.18
11:23
sql возвращает таблицу, 1c возвращает ссылки. Огромная разница.
55 Вафель
 
15.08.18
11:29
(54) в чем?
56 Мандалай
 
15.08.18
11:32
Забавно наблюдать когда 1с-ники спорят про sql...
57 nicxxx
 
15.08.18
11:34
(55) в том, что надо преобразовать sql binary(16) в ссылку
58 nicxxx
 
15.08.18
11:43
(0) Автор, помести результат во временную таблицу.

Вот это у меня работает 100 мс

выбрать     ссылка
поместить вт1
из справочник.финансовыеинструменты

а это - 31 мс

select _idrref from _Reference16362
59 PR
 
15.08.18
11:53
(55) Ты что, тупой, в таблице 7 букв, а в ссылках 6, притом что ссылок много, а таблица одна
60 PR
 
15.08.18
11:53
(56) Мы не про sql, а про 1С так-то
61 PR
 
15.08.18
11:54
(57) То есть Наименование вместо Ссылка должно все сразу резко ускорить?
62 PR
 
15.08.18
11:55
(58) Чтобы у ТС все тоже стало в три раза медленнее работать?
63 vitkhv
 
15.08.18
12:11
(58)
а это сколько по времени выполниться в SSMS:
drop table  if exists #tt
go
select _idrref into ##tt from _Reference16362
64 nicxxx
 
15.08.18
12:15
SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 1 ms.

SQL Server Execution Times:
   CPU time = 47 ms,  elapsed time = 46 ms.
65 nicxxx
 
15.08.18
12:16
в справочнике 100 000 записей.
(62) с чего бы у него все стало медленней? у него и так небыстро :)
66 vitkhv
 
15.08.18
12:21
(64) 50 мс тратится на исполнение запроса,50 мс на трансляцию текста  1с-MSSQL.
А у автора ерунда.
67 vitkhv
 
15.08.18
12:23
(54) нет там никакой разницы или вы думаете если вам ADO по умолчанию массивы возвращает из бинарника, то и в 1С все также?
68 Borteg
 
15.08.18
12:27
(0) План запроса в студию
69 vitkhv
 
15.08.18
12:30
(68)вы издеваетесь? В плане запроса там будет одна операция Index Scan
70 nicxxx
 
15.08.18
12:30
(0) попробуй вместо устаревших "именнованные каналы" включить shared memory.
71 vitkhv
 
15.08.18
12:34
(70) в пору моей юности именованные каналы были на пике технологий.
И автору это не поможет.
72 vitkhv
 
15.08.18
12:36
(70) о мы с вами недавно спорили про подзапросы на инфостарте
73 Borteg
 
15.08.18
12:54
(69) exec sp_executesql N'SELECT
T1._IDRRef
FROM dbo._Reference56 T1
WHERE (T1._Fld11306 = P1)',N'P1 numeric(10)',0
И по каждой номенклатуре exec sp_executesql N'SELECT
T1._IDRRef,
T1._Description
FROM dbo._Reference56 T1
WHERE ((T1._Fld11306 = P1)) AND (T1._IDRRef = @P2)',N'P1 numeric(10),@P2 varbinary(16)',0,0xB0D410604B958AA411E379D65894563C

Вот и вся магия, время выполнения запроса 0.01 секунда, время выполнения других запросов 15 секунд, в консоле время выполения 0.01, я ждал секунд 30 на все про все
74 Borteg
 
15.08.18
12:56
(73) притом это index seek
75 PR
 
15.08.18
13:01
(65) С того, что твои замеры показывают, что временная таблица у тебя замедлила все в три раза
76 nicxxx
 
15.08.18
13:01
(73) Поэтому я и предлагал автору поместить выборку во временную таблицу, а не гнать все на клиента.
77 PR
 
15.08.18
13:02
(76) На какого, блеать, клиента, у него все на сервере
78 nicxxx
 
15.08.18
13:02
(75) А у автора замедление было в 20 раз из-за того, что он получал всю выборку на клиента. Я же предлагал использовать временную таблицу только для проверки того, что 1С и SSMS выполняют запрос примерно одинаково.
79 PR
 
15.08.18
13:03
(78) Рукалицо
80 nicxxx
 
15.08.18
13:04
(79) вроде он сам уже разобрался, дело было в оперативке.
81 vitkhv
 
15.08.18
13:04
(78) да верно предложили, для исключения влияния клиента в виде 1С
82 vitkhv
 
15.08.18
13:05
(73)
вы различаете использование фильтра и нет?  У автора фильтра нет, у вас есть.
83 PR
 
15.08.18
13:07
(80) Дело было не в оперативке, а в неограниченности скуля
И насколько у него стало пошустрее тоже не уточнил
84 vitkhv
 
15.08.18
13:09
(73) во т для того чтобы не было по каждой номенклатуре 2 запроса  nicxxx и предложил использовать временную таблицу.
Правда некоторые консоли даже при использовании временной таблицы делают неявный запрос к ней.
85 SergeyKB
 
15.08.18
13:11
(82)
автор не привёл конфу

в (73) отбор правильный в учётом разделителя (который не очевидный, но есть во всех типовых)
86 Borteg
 
15.08.18
13:12
(85) я именно к этом и клоню, что как минимум запросы разные)
87 Borteg
 
15.08.18
13:14
(82) вы не поверите - у меня в консоли нету не одного фильтра)
88 бигтейсти
 
15.08.18
13:19
И никто не сказал автору собрать трассу и посчитать итоговый duration всех запросов. Вместо этого гадания и тупняки, особенно печенюшка доставляет.
89 Borteg
 
15.08.18
13:20
(88) были предложения)но многим и так все понятно)
90 vitkhv
 
15.08.18
13:26
(87) как нет, а это что
WHERE (T1._Fld11306 = P1)',N'P1 numeric(10)',0

фильтр по полю _Fld11306  тип число(10) в 1С.
91 бигтейсти
 
15.08.18
13:27
(89) где?
92 vitkhv
 
15.08.18
13:29
(86)
любой запрос вида: select _idrref from _refxxx
даст скан индекса и при одинаковом количестве элементов выполниться за одно и тоже время +-
93 Borteg
 
15.08.18
13:34
(92) в sql да, касательно 1с нет. Как видите запросы разные, мы же не тексты сравниваем,а результат. Как минимум 1с тащит необходимые ему данные независимо от того что написано в консоли,WHERE (T1._Fld11306 = P1)',N'P1 numeric(10)',0  является разделителем данных. И уже не скан произошел. Поэтому считать что выбрать * из в 1с и sql одно и тоже не всегда правильно, как преобразовал этот запрос 1с в sql покажет только профайлер(ну или средства тех журнала например).
94 PR
 
15.08.18
13:35
(88) Ой, Мишанька проснулся :))
95 vitkhv
 
15.08.18
13:39
(93) если разделитель то да он обязательно входит в индекс.
У меня без разделителя.
96 vitkhv
 
15.08.18
13:45
(93) и автора как я понял тоже.
97 vitkhv
 
15.08.18
13:49
(93) Хотя если у автора ERP разделитель д.б.
98 nicxxx
 
15.08.18
14:19
(97) в SSMS ему разделитель не мешает, т.к. там скорость в 20 раз выше, чем в 1С.
99 vitkhv
 
15.08.18
14:33
(98) автору не мешает.
100 vitkhv
 
15.08.18
14:36
(98) ему и количество озу не должно мешать. особенно на втором и последующем прогоне. Все в кэше будет.
101 Мистикан
 
20.08.18
10:09
(83) 0.31сек