Имя: Пароль:
1C
 
Как правильно удалить записи регистра сведений через MS SQL?
0 kumena
 
10.08.17
10:44
слишком много записей в регистре, нужно удалить частично, через 1с очень долго получается.

Посмотрел через команду

    МассивИменМетаданных = Новый Массив();
    МассивИменМетаданных.Добавить(Метаданные.РегистрыСведений.ГрафикиРаботыПоВидамВремени);
    СтруктБД = ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных);

получается 2 таблицы - регистрация изменений и основная. Непонятно почему их две, и зачем нужна таблица регистрации изменений, соответственно, не понятно какие изменения можно удалить.

и как правильно написать запрос на T-SQL ?
1 Cyberhawk
 
10.08.17
10:45
"Непонятно почему их две, и зачем нужна таблица регистрации изменений" // ИТС уже почитал?
2 Cyberhawk
 
10.08.17
10:46
Если удалять долго, то можно сохранить то, что удалять не надо, очистить весь РС и потом в него загрузить то, что сохранил до этого
3 kumena
 
10.08.17
10:53
> ИТС уже почитал?

нет, можешь ссылку дашь куда там смотреть?

> Если удалять долго, то можно сохранить то, что удалять не надо, очистить весь РС и потом в него загрузить то, что сохранил до этого

удаление и запись - это все процесс записи, они долго проходят потому что регистр раздулся. все сразу из 1с не удалить, никакой озу не хватит.
а если частично, то можно просто не удалять то что нужно оставить.
4 Волшебник
 
модератор
10.08.17
10:55
Пересоздать регистр в Конфигураторе, загрузить остатки.
5 kumena
 
10.08.17
10:57
> Пересоздать регистр в Конфигураторе, загрузить остатки.

какие остатки для регистра сведений?
6 Волшебник
 
модератор
10.08.17
10:58
(5) Оставшиеся записи
7 kumena
 
10.08.17
11:02
(6) это тоже наверное не устроит, да и как потом обновляться с новым идентификатором регистра?
8 Волшебник
 
модератор
10.08.17
11:03
(7) Идентификатор оставить старый
9 Йохохо
 
10.08.17
11:03
(7) накатить из конфы поставщика
11 kumena
 
10.08.17
11:06
да, сейчас понял.
может это и быстрее будет, выгрузить 10 миллионов записей в xml, а потом загрузить, но я думаю что слишком много шансов что она вообще не осилит.
12 Волшебник
 
модератор
10.08.17
11:07
(0) "и зачем нужна таблица регистрации изменений"
для планов обмена
13 mehfk
 
10.08.17
11:07
(0)
Выгрузить что нужно оставить в xml или еще куда.
Сделать TRUNCATE TABLE.
Загрузить.
PROFIT!
14 Numerus Mikhail
 
10.08.17
11:08
Изменение данных напрямую через SQL является нарушением лицензионного соглашения!
15 kumena
 
10.08.17
11:10
> Выгрузить что нужно оставить в xml или еще куда.

ты себе представляешь xml файл на 10 миллионов записей?
16 kumena
 
10.08.17
11:10
> Изменение данных напрямую через SQL является нарушением лицензионного соглашения!

спасибо, я в курсе
17 X Leshiy
 
10.08.17
11:10
(15) 10 миллионов оставить надо, сколько тогда всех записей?!
18 kumena
 
10.08.17
11:11
+15 а главное какой клиент его прожевать сможет и за какое время?
19 kumena
 
10.08.17
11:11
30 с лишним
20 X Leshiy
 
10.08.17
11:11
(17) Нихуясеберегистр, извините.
21 X Leshiy
 
10.08.17
11:12
(19) Ну выгрузи 30 и снеси регистр.
22 mehfk
 
10.08.17
11:16
(15) У меня хорошее воображение.
23 Волшебник
 
модератор
10.08.17
11:17
(15) выгружай на SSD-диск
24 Волшебник
 
модератор
10.08.17
11:18
(23)+ или RAM-диск
25 mehfk
 
10.08.17
11:19
Не нравится выгружать - удаляй. DELETE FROM ... WHERE
26 piter3
 
10.08.17
11:19
А это разовая операция?
27 kumena
 
10.08.17
11:21
ну скажем так, двух разовая, сначала надо в тестовой базе убедиться что все хорошо!
28 kumena
 
10.08.17
11:23
я так и подозревал что вторая таблица для планов обмена. осталось только скрипт написать, сейчас пока более срочные есть задачи, а потом им займусь, но если кто напишет, то будет еще лучше.
29 Йохохо
 
10.08.17
11:26
(27) потом на тестовую накатываешь бэкап и тихой сапой переносишь в очищенную рабочую
30 X Leshiy
 
10.08.17
11:26
(28) А ты точно сварщик, или маску на стройке нашел?
31 DmitrO
 
10.08.17
11:26
Ничо не надо пересоздавать и перекладывать.
Надо просто удалить лишнее.
Надо просто сделать обмены данными чтобы таблица регистрации изменений была пустая (если обмены данными используются и там вообще что-то есть).

Далее удалять так.
Перевести базу в Простую модель восстановления.
Удалять записи обычным delete с нужными условиями, но делать это порциями, чтобы не сильно прирастал ЖТ.
Потом вернуть полную модель восстановления и сбекапить базу. Все.

Память клиента тут не причем. А сервер точно справится при любом размере памяти.
32 kumena
 
10.08.17
11:32
(31)
> Надо просто удалить лишнее.
да, я тоже за этот вариант, вижу его самым беспроблемным.

Спасибо, план действий понятен!
33 DmitrO
 
10.08.17
11:34
ГрафикиРаботыПоВидамВремени вероятно в ЗУП 2.5
Посмотрел его.
Решение задачи с помощью прямого доступа к SQL может вообще не дать изюму ну или дать но небольшой, ибо и на 1С можно написать достаточно эффективно.
34 Ахмадинежад
 
10.08.17
11:55
как-то обрезал большую базу средствами МС СКЛ...
как-то не срасталось всё, плюнул, взял обработку с ИТС - и просто подождал )
35 DmitrO
 
10.08.17
12:56
(14)а кто придумал эту чепуху? и почему все об этом рассказывают на этом форуме?
36 Ёпрст
 
10.08.17
13:01
(35) обычно пишут те, кто qa в глаза не видел
37 Lama12
 
10.08.17
13:29
(35) (36) Ну раньше этот запрет точно был. Может сейчас и поменяли.
38 GANR
 
10.08.17
13:48
(8) Проще TRUNCATE TABLE. Чем удалить, потом сравнением/объединением переносить.
39 Timon1405
 
10.08.17
14:12
40 rudnitskij
 
10.08.17
14:26
А почему нельзя программно средствами 1с удалить ненужные записи? По одной в цикле, а не весь регистр сразу
41 kumena
 
10.08.17
14:34
> А почему нельзя программно средствами 1с удалить ненужные записи? По одной в цикле, а не весь регистр сразу

в первом посте написал - долго получается, в лучшем случае через месяц.

> Решение задачи с помощью прямого доступа к SQL может вообще не дать изюму ну или дать но небольшой, ибо и на 1С можно написать достаточно эффективно.

почему? обычно везде пишут о сказочной скорости удаления.

но я конечно попробую другими порциями еще.
42 Timon1405
 
10.08.17
14:36
(40) есть платформенные накладные расходы на удаление записей: например, поиск ссылок на объект, если он стоит как ведущее измерение в регистре. в том числе поэтому 1С и не рекомендует прямого доступа к СУБД.
43 H A D G E H O G s
 
10.08.17
14:38
(42) Ты путаешь.
44 Фрэнки
 
10.08.17
14:38
(41) транзакциями не пользуешься?
45 H A D G E H O G s
 
10.08.17
14:39
Автор, ты не поверишь, но и в sql тоже будет долго :-)
46 H A D G E H O G s
 
10.08.17
14:39
Если накладывать хоть какие-нибудь условия на отбор при удалении.
47 kumena
 
10.08.17
14:40
(44) это вроде в 7.7 рулило, а на восьмерке прироста не дает.
48 H A D G E H O G s
 
10.08.17
14:40
А так - можно поотключать индексивароние-ведущесть у измерений и ресурсов - и вперед, типовыми средствами.
49 kumena
 
10.08.17
14:42
(46) понятно, т.е. все меняет то, что устанавливается отбор.
50 H A D G E H O G s
 
10.08.17
14:42
Ну и job в sql на дефраг индеска и апдейт статистики по этим двум таблицам раз в 5 минут.
51 kumena
 
10.08.17
14:44
в целом все понятно! всем спасибо!
52 rudnitskij
 
10.08.17
17:58
(51) тогда закрывайте тему.
А то мы вам напишем тут))
53 Злопчинский
 
10.08.17
18:35
(36) дикари , что с них взять ... ;+)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.