Имя: Пароль:
1C
 
Поработать за оптимизатора SQL
0 H A D G E H O G s
 
16.11.17
22:05
Дня доброго.
Есть дилеммка.
Надо удалить из регистра сведений набор записей. Размером 50-5000 записей.
Удалить можно 2 способами:
1) В цикле, по одной записи, по индексированному измерению.
2) 1 раз, набором, по неиндексированному измерению.

Регистр гигантский (миллионы записей).

Блокировка регистра значения критичного значения не имеет. Ну, будет заблокирован, не страшно, пишется он фоновыми и рег заданиями, если запись не удалась - запишется через 3 минуты еще раз.

Замеров сделать не могу, регистр пуст.  Конечно, можно забить синтетикой, но лениво пока.
1 H A D G E H O G s
 
16.11.17
22:05
Еще есть идея - если количество записей меньше, мммм, 100 - цикл, иначе - набор.
2 Волшебник
 
модератор
16.11.17
22:06
> регистр пуст
> Регистр гигантский (миллионы записей).

Вы уж определитесь
3 Волшебник
 
модератор
16.11.17
22:07
Озвучьте задачу с самого начала. Может там и регистр не нужен...
4 H A D G E H O G s
 
16.11.17
22:08
(2) Простите, не до конца расписал ситуацию. На данный момент проектирования системы - он пуст. Через месяц промышленной эксплуатации он будет содержать миллионы записей.
5 Волшебник
 
модератор
16.11.17
22:14
(4) Глупый регистр. Он не нужен.
6 VS-1976
 
16.11.17
22:18
Если нет индекса то отбор не установить. Даже если и ухитриться сделать delete from ... where реквизит то будет fullscan. Явно неправильно спроектировал что-то...
7 Волшебник
 
модератор
16.11.17
22:22
Зачем регистрировать миллионы записей, чтобы потом их быстро удалять? Автор — плохой архитектор систем.
8 vde69
 
модератор
16.11.17
22:24
(4) 2...3 ляма для регистра сведений - это не много даже если в измерение запихнуть строку в 1000 символов...
9 vde69
 
модератор
16.11.17
22:25
(8) + большой - это года под 100 лямов...
10 H A D G E H O G s
 
16.11.17
22:26
(8) При самом пессимистичном сценарии он будет увеличиваться на миллион в день.
11 vde69
 
модератор
16.11.17
22:27
при решении этой задачи, кроме всего прочего, нужно учитывать оптимальный размер транзакции по свободной памяти...
12 H A D G E H O G s
 
16.11.17
22:27
Очищаться - нуу, даже не знаю, все, что старше 3 лет, возможно. Пока не думал, надо советоваться с методистами.
13 VS-1976
 
16.11.17
22:27
Расскажи о регистре подробнее чтобы было понятно и что за измерения, по каким измерениям предполагаются отборы и по каким(ом) измерениям удаления и зачем удаления?
14 Tateossian
 
16.11.17
22:28
Делать справочник, он проще с точки зрения архитектуры. Там по хорошему после удаления регистра нужно делать ребилд индекса.
15 vde69
 
модератор
16.11.17
22:29
(14) бред...
16 H A D G E H O G s
 
16.11.17
22:30
(14) Справочник - бред. А вот про обновление статистики - есть мысль как то автоматом запускать job после массовых обновлений регистра.
17 vde69
 
модератор
16.11.17
22:32
я склоняюсь к стабильному по скорости и прогнозируемому варианту - удалении в цикле.

скорее всего это будет медленее чем отбором, но будет иметь ряд плюсов
1. на него не будет влиять статистика и оптимизация
2. транзакцию можно будет разбить на несколько
3. можно замутить прогресс бар

и т.д.

но конечно я тонкостей задачи не знаю...
18 H A D G E H O G s
 
16.11.17
22:34
(17) Да, тоже сейчас это осознал понял.
Чертовы стереотипы 1С :-)
19 vde69
 
модератор
16.11.17
22:34
(16) для твоей задачи не имеет смысла запускать статистику чаще 1 раз в сутки....

вот ребилдинг индекса - наверно стоит, но его на рабочем нельзя запускать, только ночью
20 H A D G E H O G s
 
16.11.17
22:35
Стереотип: "Видишь Отбор и НаборЗаписей - используй его, не думай!"
21 H A D G E H O G s
 
16.11.17
22:37
(19) Стоит. Когда у меня еще была база с синтетикой на миллионы записей, изменение 100 тыс записей рушило весь красивый план запроса до обновления статистики.
22 H A D G E H O G s
 
16.11.17
22:38
(21) Но это немного другая проблема.
23 H A D G E H O G s
 
16.11.17
22:40
Кто нибудь запускал процедуры SQL из 1С через ВнешниеИсточникиДанных, например через:

ВнешнийИсточникДанныхМенеджер.<Имя внешнего источника> (ExternalDataSourceManager.<Имя внешнего источника>)
<Имя функции> (<Function name>)
Синтаксис:

<Имя функции>()
Возвращаемое значение:

Тип: Произвольный.

Описание:

Вызывает функцию внешнего источника данных.

Доступность:

Сервер, толстый клиент, внешнее соединение.
24 vde69
 
модератор
16.11.17
22:40
я сегодня разбирался с файловыми базами 7.7, ну и перетаскивал, все что в каталогах было растаскивал по смылу...


в одно из каталоге который хранился в базе (и бекапился) нашел 600 000 документов, сканы, и т.д. Вот где я репу чесал :)

а Вы регистр большой :)
25 vde69
 
модератор
16.11.17
22:42
(23) поставь на регистр тригер со счетчиком и временной процедурой, пусть SQL сам считает сколько изменений прошло и запускает регламент
26 H A D G E H O G s
 
16.11.17
22:45
(25) Тоже вариант, только я не знаю, как его делать. Но узнаю.
27 trdm
 
16.11.17
22:45
(24) > в одно из каталоге который хранился в базе (и бекапился) нашел 600 000 документов, сканы, и т.д. Вот где я репу чесал :)

И в чем была проблема?
28 H A D G E H O G s
 
16.11.17
22:46
(27) Каталог долго открывался в проводнике.
29 VS-1976
 
16.11.17
22:47
Можно ещё попробовать обновлять записи вместо удаления и выключить активность. Посмотреть может активность в индексе
30 vde69
 
модератор
16.11.17
22:47
(27) зачем это лежало в каталоге файловой 7.7... при наличии специального сервера для документооборота
31 H A D G E H O G s
 
16.11.17
22:50
(29) Активность есть только у РС, подчиненных регистратору.
32 trdm
 
16.11.17
22:51
хз. у меня файлов в 10 раз меньше. 60 тысяч. тоже в каталоге.
33 trdm
 
16.11.17
22:53
+(32) сканы документов и картинки незачем хранить на серведе документооборота.
правда я функций сервера не знаю. однако мне нужно обрабатывать свежие файлы: паковать их и отсылать на сайт.
34 VS-1976
 
16.11.17
22:54
(31) да она по моему у всех есть по умолчанию в физических таблицах. А 1с всегда фильтрует по этому полю. Не факт для 8.1 было так, сейчас не знаю.
35 youalex
 
16.11.17
23:33
(0)
А это обязательно делать в 1С? Какая функциональная нагрузка у этой таблицы?

Неиндексированных измерений не бывает. Бывает отдельный индекс по индексированным.
36 youalex
 
16.11.17
23:39
(26) >> Тоже вариант, только я не знаю, как его делать.

Триггеры классный механизм, который можно вешать поверх, сильно напоминает подписки. Нужно только проверить, не убьет ли триггер реструктуризация. Предполагаю. что полная точно убьет.
37 H A D G E H O G s
 
16.11.17
23:40
(35) "А это обязательно делать в 1С? "

Без разницы, в чем это будет.
Разница в том, что вне 1С 2-ой некластерный индекс для данного измерения, по которому строится отбор можно сократить, не включив в него остальные измерения, но это сомнительное достижение, чтобы отказываться от "легкости 1С".

Это - коробочное решение, а ВнешниеИсточникиДанных требуют заморочек с подключением, которые ниасилят простые пользователи.
38 youalex
 
16.11.17
23:51
(37) Не очень понял мысль. Но, если вы создадите на свою таблицу произвольный индекс средствами скуля, то самому скулю будет, мягко выражаясь, безразлично какие галки протыканы в 1С. Без хинта он выберет тот индекс, который сочтет более оптимальным согласно статистике.
Разве что только (предполагаю)  кластерность будет играть  - то бишь измерения по порядку.

Интересно было бы узнать все же структуру этого регистра и его предназначение. Если абстрагироваться от 1С
39 VladZ
 
17.11.17
04:28
(4) Я бы не стал пихать такие объемы в 1с. Какая информация там должна содержаться? Нужна ли привязка к объектам 1с? Возможно, стоит задуматься о внешней БД. Например, на MS SQL развернуть свою базу. MS SQL потянет практически любые объемы.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший