Имя: Пароль:
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 потянет практически любые объемы.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn