|
Поработать за оптимизатора 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 потянет практически любые объемы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |