|
Выборка из независимого регистра сведений: оптимизация | ☑ | ||
---|---|---|---|---|
0
Darhon
29.07.15
✎
20:16
|
Доброго вечера. Помогите разрешить мои сомнения и вопросы... следующая ситуация: есть независимый регистр сведений, в него пишутся события по времени, каждый день около 2000. На форме обработки есть динамический список куда запросом вытягиваются эти события ограниченные условием в запросе...например "с начала текущего дня", так как они туду добавляются, то запрос часто перевыполняется. Подскажите при количестве записей около миллиона это же будет жутко тупить? и как можно данную процедуру оптимизировать....?База файловая. 1С 8.3. Заранее спасибо
|
|||
1
ДенисЧ
29.07.15
✎
20:19
|
Можно.
Заходим на форму. Ctrl-A, Del, Ctrl-S, F7 И начинаем думать сначала |
|||
2
Casey1984
29.07.15
✎
20:19
|
Напили миллион записей и проверь.
|
|||
3
Lama12
29.07.15
✎
20:20
|
Выбрать первые, и максимум по ключу. Это должно спасти отца русской демократии.
Ну в крайнем случае не максимум, а исключить ранее быбранные. |
|||
4
Lama12
29.07.15
✎
20:20
|
(3) сорри. Про дс проглядел.
|
|||
5
Darhon
29.07.15
✎
20:21
|
(1) В какую сторону думать?) От совета не откажусь.
|
|||
6
Darhon
29.07.15
✎
20:21
|
(2) проблемно...
|
|||
7
Casey1984
29.07.15
✎
20:23
|
(6) не думаю...
|
|||
8
Darhon
29.07.15
✎
20:45
|
Может быть есть возможность осуществлять первоначальную выборку , например начиная со числа -1 день от текущей даты, и уже на основе ее данных формировать запросы?
|
|||
9
Darhon
29.07.15
✎
20:45
|
(7) 600 000 записано :))
|
|||
10
Casey1984
29.07.15
✎
20:48
|
(8) В запрос динамического списка таблицу не передать, какой толк от первоначальной выборки? Никакого.
|
|||
11
MadJhey
29.07.15
✎
20:49
|
(7) прав. в чем сложность.
А по сути: дин. список читает данные порциями. Я не знаю, что ты написал в запросе. Но обычно дин. список на уровне sql преобразуется в: select top 50 (если кто знает точный размер порции для ДС в 8.3, пусть напишит) from "НазваниеТаблицы" with (NOLock) where "Условие". Отсюда вывод: 1. упрощать запрос 2. поиграть с индексами. Нужны индексы для полей "Условие". Индексы должны быть без "разрывов". Т.е есть условия по полю1, полю2, полю3. Индексы должны быть у всех полей, а не только поле1, поле3. И в условие не должно быть "НЕ", "ПОДОБНО" и пр. |
|||
12
Casey1984
29.07.15
✎
20:50
|
(11) опередил)
|
|||
13
Casey1984
29.07.15
✎
20:50
|
(0) читай оптимизация запросов, индексы)
|
|||
14
MadJhey
29.07.15
✎
20:52
|
черт. У него файловая! А как 1с работает в этом случае? Я лично не знаю.
|
|||
15
Darhon
29.07.15
✎
21:08
|
В общем, если в список выводится более 100000 записей начинаются жесткие тупняки )) Но если в списке порядка 2-5 000 записей, то никаких замедлений нет. Запросы отрабатывают штатно.
|
|||
16
Darhon
29.07.15
✎
21:09
|
(11) запрос на уровне выбрать события ИЗ регистрСведений ГДЕ Дата события МЕЖДУ ДатаНачали И ДатаКонца...
|
|||
17
MadJhey
29.07.15
✎
21:13
|
Ок. Будем считать что в 1с не идиоты. И для запросов они тоже используют индексы.
Выведи весь запрос. |
|||
18
Darhon
29.07.15
✎
21:16
|
(17)
Запрос.Текст = "ВЫБРАТЬ | Заказы.ИДЗаказа, | Заказы.Время КАК Время, | Заказы.Телефон, | Заказы.Карта, | Заказы.Льгота, | Заказы.Ожидание |ИЗ | РегистрСведений.Заказы КАК Заказы |ГДЕ | Заказы.Время МЕЖДУ &НачСмены И &КонСмены | И Заказы.Статус <> &Снят"; |
|||
19
ДенисЧ
29.07.15
✎
21:17
|
Анафейхоа в динсписок (да и вообще в список) выводить 100500 записей? Кто их читать будет?
|
|||
20
Darhon
29.07.15
✎
21:19
|
Начальнике хочет чтобы диспетчер видел все события за день. (( Их не будет 100500 конечно же...тысяч 2 максимум) Но...за год в самом регистре наберется под лям(
|
|||
21
Darhon
29.07.15
✎
21:20
|
Ну и файловый вариант смущает )
|
|||
22
ДенисЧ
29.07.15
✎
21:22
|
(20) "если в список выводится более 100000 записей начинаются жесткие тупняки"
"если в списке порядка 2-5 000 записей, то никаких замедлений нет" Ты уж определись |
|||
23
MadJhey
29.07.15
✎
21:22
|
Время - проиндексирован?
Можешь Заказы.Статус <> &Снят поменять на Заказы.Статус = &НеСнят |
|||
24
Darhon
29.07.15
✎
21:24
|
(23) Могу. Это из-за НЕ РАВНО?
|
|||
25
MadJhey
29.07.15
✎
21:24
|
Статус тоже проиндексировать
|
|||
26
Darhon
29.07.15
✎
21:25
|
(22) Это я к предложению потестировать на миллионе записей в регистре. Так как создались они текущейдатой, то и в список вылезли сразу все ) ИРЛ такого надеюсь не будет )
|
|||
27
MadJhey
29.07.15
✎
21:27
|
SQL берет значение из таблицы и сравнивает с параметром, равно или не равно, и так по всей таблице. Если условие с равно и поле условия есть в индексе то отбор идет по индексу. Это на порядок быстрее.
|
|||
28
MadJhey
29.07.15
✎
21:29
|
Попробуй. Отпишись по результату.
|
|||
29
Darhon
29.07.15
✎
21:31
|
(27) ок. Обязательно. Пробовать буду завтра, на 3 пользователях, у них открыт один и тот-же список, так что нагрузка будет тройная. Правда я еще не придумал, как обновлять список у всех одновременно, чтобы новые данные появлялись у всех))
|
|||
30
MadJhey
29.07.15
✎
21:37
|
Еще момент, если больше ни где этот регистр сильно не задействован, попробуй поставить поля время и статус вначале списка измерений.
|
|||
31
MadJhey
29.07.15
✎
21:39
|
Первое измерение индексируется автоматически по нему не обязательно ставить "индексировать".
|
|||
32
Darhon
29.07.15
✎
21:51
|
Измерение только ИД, осьтальнок ресурсы
|
|||
33
MadJhey
29.07.15
✎
22:13
|
Тогда давай помедитируем вот над такой табличкой:
Индексы непереодического регистра сведений. Измерение1 + [Измерение2 +...] Есть хоть одно измерение регистра. Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании. ИзмерениеN + Измерение1 + [Измерение2 +...] Измерению "ИзмерениеN" задано свойство "Индексировать" или свойство "Ведущее" и при этом это не первое и не единственное измерение. Индекс, включающий все измерения. Первое поле - ИзмерениеN, затем все остальные измерения в том порядке, в котором они заданы при конфигурировании. Реквизит + Измерение1 + [Измерение2 +...] Реквизиту "Реквизит" задано свойство "Индексировать". Индекс в котором первое поле - Реквизит, затем все измерения в том порядке, в котором они заданы при конфигурировании. Ресурс + Измерение1 + [Измерение2 +...] Ресурсу "Ресурс" задано свойство "Индексировать". Индекс в котором первое поле - Ресурс, затем все измерения в том порядке, в котором они заданы при конфигурировании. |
|||
34
MadJhey
29.07.15
✎
22:15
|
У нас условие по двум ресурсам. Т.е сможем использовать только один индекс, затем частичное сканирование таблицы.
|
|||
35
MadJhey
29.07.15
✎
22:24
|
Не правильно написал. Надо: Сможем провести поиск только по первому полю из индекса (ресурс+ иземерение1+...), при условии что у данного ресурса стоит параметр "индексировать".
|
|||
36
MadJhey
29.07.15
✎
22:25
|
Затем частичное сканирование.
|
|||
37
Darhon
30.07.15
✎
06:36
|
(36) Оставил условие только по времени, время индексируется. Отрабатывает значительно быстрее, при работе 3-х пользователей одновременно никаких нареканий нет. Можно конечно более детально замерить производительность запроса, но...пока нужды нет. Тес проводился на РС с 2 500 000 записей. В дневную выборку попадало 5 000. Результат даже на файловой базе пристойный. Я так понимаю, что все вышесказанное будет справедливо и при переезде на серовер SQL?
|
|||
38
MadJhey
30.07.15
✎
09:38
|
(37) Это как и раз было для SQL.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |