Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Удаление записей регистра в sql

Удаление записей регистра в sql
Я
   080808Ник
 
23.01.21 - 22:01
Собственно есть самописная конфигурация. в ней два регистра в одном есть два поля ссылка и дата. в этом регистре 8 000 000 записей, а есть второй регистр в нем есть ссылка из первого регистра, но нет даты. В этом регистре 200 000 000 строчек. Мне нужно удалить из регистра два часть записей за определенный период. средствами 1с запустил обработку, удалилось пара миллионов за сутки. Решил попробовать через SQL. как в запросе delete указать отбор?
Я так пониаю мне нужно что то типа delete from t1 where key in (select key from t2 where date < '2020-1-1') Написал, ругается на синтаксис
   080808Ник
 
1 - 23.01.21 - 22:15
SELECT
      
  FROM [Test].[dbo].[_InfoRg1960]

  where [_Fld1961]  IN (SELECT [_Fld1948]
      ,[_Fld1951]
      
  FROM [Test].[dbo].[_InfoRg1947]
  where [_Fld1948]<'4015-08-01')
Выдает  Сообщение 116, уровень 16, состояние 1, строка 10
В списке выбора можно указать только одно выражение, если вложенный запрос не предварен EXISTS.
   080808Ник
 
2 - 23.01.21 - 22:16
упс. чет не вставилось SELECT [_Fld1961] вначале
   080808Ник
 
3 - 23.01.21 - 22:20
мистяне что, все на митинги ушли?)
   H A D G E H O G s
 
4 - 23.01.21 - 22:20
Добавить в Регистр, который удаляешь Булево, как первое измерение.
В 1С заполни его и удаляй

delete top 100000
from Test].[dbo].[_InfoRg1947] 
where _Fld1948=0x01
   H A D G E H O G s
 
5 - 23.01.21 - 22:21
Удаляй через top 100000, хотя бы оценишь скорость.
   H A D G E H O G s
 
6 - 23.01.21 - 22:24
Сколько записей в рамках одной ссылки?
   H A D G E H O G s
 
7 - 23.01.21 - 22:24
Как много записей нужно удалить?
   H A D G E H O G s
 
8 - 23.01.21 - 22:27
Ошибка у тебя в подзапросе, здесь

SELECT [_Fld1948]
      ,[_Fld1951]

а надо

SELECT [_Fld1948]
или
SELECT [_Fld1951]
   080808Ник
 
9 - 23.01.21 - 22:28
(6) та в том и беда, может быть вообще ни одной ссылки, а может быть и несколько тысяч. из первого регистра нужно у удалить где то миллионов 6, а из в торого где то 150 миллионов.
   080808Ник
 
10 - 23.01.21 - 22:28
(8) о! точно, вот это я тупанул
Спасибо огромное!
   080808Ник
 
11 - 23.01.21 - 22:29
я тут нагуглил Как правильно удалить записи регистра сведений через MS SQL?
"   H A D G E H O G s
48 - 10.08.17 - 14:40
А так - можно поотключать индексивароние-ведущесть у измерений и ресурсов - и вперед, типовыми средствами." - только ведущие снять или основной отбор тоже?
   080808Ник
 
12 - 23.01.21 - 22:30
В 1с я сделал процедуру, выгребаю там тысяч 100 записей раскидываю их на 100 таблиц по тысячи и в фоновых заданиях удаляю. быстрее чем последовательно но все равно медленно
   H A D G E H O G s
 
13 - 23.01.21 - 22:45
Я бы отключил именно для данной операции проверку страниц, епстественно, сделав копию БД предварительно, а после удаления сделал бы check этих 2-х таблиц.
Ну или хотя бы включил режим torn-page
   080808Ник
 
14 - 24.01.21 - 00:01
(13) Спасибо огромное! Разница в удалении на порядки. 171 000 записей в sql цдалилась за 12 секунд, в 1с на это уходило минут 15-25
   Злопчинский
 
15 - 24.01.21 - 00:58
да... я думал что в 8-ке не надо как в 77 извращаться... а вишь, как оно, по прежнему все непочеловечески
   080808Ник
 
16 - 24.01.21 - 01:01
(15) не ну в 8ке извращений можно намного больше придумать и фоновыми заданиями и через скуль. кстати можно сделать внешний источник прикрутить его к своей же базе и через него удалять))))
   080808Ник
 
17 - 24.01.21 - 01:07
хотя согласе, в регистры сведений в отбор могли на очистку вставить в списке
   H A D G E H O G s
 
18 - 24.01.21 - 01:19
(17) я точно не помню, а разве нельзя для НабораЗаписей указать Отбор ВСписке.

?

Это вроде решает всю проблему.
   080808Ник
 
19 - 24.01.21 - 01:39
(18) если бы можно было(
   DEVIce
 
20 - 24.01.21 - 07:53
(18) Отборы только на равенство.
   hhhh
 
21 - 24.01.21 - 08:20
(19) всё-таки, наверно, удаление через 1с не до конца отработано. Скорее всего тормоза где-то в процедурах ПриЗаписи и ПередЗаписью регистра, и в подписках там еще, регистрация для обмена и так далее. Надо это всё вырубить. И удалять при ОбменДанными.Загрузка = Истина.

потом с транзакциями надо поработать. Задать допустим 5-10 тыс операций в одной транзакции.
   Конструктор1С
 
22 - 24.01.21 - 08:36
(0) покажи как средствами 1с удаляешь
   H A D G E H O G s
 
23 - 24.01.21 - 10:53
(21) проблема 1с в (20)
   080808Ник
 
24 - 24.01.21 - 13:40
(21) нет, проблема в том что для удаление тебе нужно накладывать отбор на набор записей на равенство, соответственно, по сути мне нужно сделать (6 миллионов раз на 2) запросов в базу данных на чтение и на запись. Через скуль сразу делаю  на удаление и все. По итогу за 2 часа удалил все 150 миллионов записей.
   080808Ник
 
25 - 24.01.21 - 13:42
(22) Для Каждого Ключ из Ключи Цикл
    Набор.Отбор.Ключ.Установить(Ключ);
    Набор.Записать();
НаборОсновной.Отбор.Ключ.Установить(Ключ);
    НаборНаборОсновной.Записать();
   Конструктор1С
 
26 - 25.01.21 - 11:45
(25) это дело легко можно было бы распараллелить с помощью фоновых заданий
   VladZ
 
27 - 25.01.21 - 11:56
(0) "8 000 000 записей" - зачем столько данных в регистре?
   080808Ник
 
28 - 25.01.21 - 12:27
(26) распараллелил. все равно долго см (12)
(27) то есть 200 миллионов тебя не смутили)
   sapphire
 
29 - 25.01.21 - 12:52
(0) SELECT INTO во времянку из целевой таблицы 
TRUNCATE целевой таблицы
INSERT из времянки в целевую
   aka MIK
 
30 - 25.01.21 - 12:57
(29) это смотря сколько записей остается. Для свертки базы на 1 число текущего месяца - да, только так
 
 Рекламное место пустует
   VladZ
 
31 - 25.01.21 - 15:21
(28) Я дальше и не читал. :)
   sapphire
 
32 - 25.01.21 - 15:40
(30) Годится, если записей меньше половины
   080808Ник
 
33 - 25.01.21 - 16:10
(29) интересный вариант. надо попробовать на тестовой и сравнить скорость
   sapphire
 
34 - 25.01.21 - 17:39
(33) Да, да, пренепременно попробуй. Много интересного узнаешь.
Собсно, почитай про вариант 2 реструктуризации ИБ на платформе 8.3....
   080808Ник
 
35 - 25.01.21 - 18:24
(34) "вариант 2 реструктуризации ИБ на платформе 8.3" - это что такое?
   Ёпрст
 
36 - 25.01.21 - 20:45
(35) https://wonderland.v8.1c.ru/blog/optimizatsiya-restrukturizatsii-bazy-dannykh/

неплохой метод. Единственное, в протоколах скуля должен быть включен tcp/ip, если будет еще и другой канал, типа шаред мемори, то не полетит
   sitex
 
37 - 25.01.21 - 20:51
(36) даже если указано lpс в настройках?
   Ёпрст
 
38 - 25.01.21 - 20:53
(36) да. У нас скуль с сервером 1с на одном компе, приходилось вырубать все протоколы, чтоб оптимизированный механизм реструктуризации заработал. Нужно было, когда режим совместимости убрали, долгая реструктуризация регистра бухгалтерии была.
   Ёпрст
 
39 - 25.01.21 - 20:55
минус v2 - невозможно отказаться от изменений, как при обычном обновлении. Т.е если запустил, то сиди и жди :)
   080808Ник
 
40 - 26.01.21 - 23:53
(36) Реализовано в версии 8.3.11.2867. буржуи вы столичные. в нашем селе клиенты на 8.3.10 сидят)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.