Группа: Местный
Сообщений: 170
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 0
Добрый день!
Столкнулся с такой проблемой как "Превышен максимальный размер файла 1сv8.1cd", размер файла на данный момент 39 201 968 КВ, проблема возникла в процессе удаления документов. Конфигурация не типовая, удаляется больше 8 миллионов документов, удаляю их обработкой с таким кодом
// Удаляем справочники Для ид=0 По СписокСпр.Количество()-1 Цикл Если СписокСпр.Получить(ид).Пометка = Истина Тогда Спр = Справочники[СписокСпр.Получить(ид).Значение.Имя].Выбрать(); Пока Спр.Следующий() Цикл Объект = Спр.ПолучитьОбъект(); Объект.Удалить(); Сообщить(Спр); КонецЦикла; КонецЕсли; КонецЦикла; //Удаляем документы Для ид=0 По СписокДок.Количество()-1 Цикл Если СписокДок.Получить(ид).Пометка = Истина Тогда Док = Документы[СписокДок.Получить(ид).Значение.Имя].Выбрать(); Пока Док.Следующий() Цикл Объект = Док.ПолучитьОбъект(); Дата = Док.Дата; Если Дата>НачалоДня(ДатаС) тогда Если Дата<КонецДня(ДатаПо) тогда Сообщить(Док); Объект.Удалить(); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; //Удаляем регистр сведений Для ид=0 По СписокРег.Количество()-1 Цикл Если СписокРег.Получить(ид).Пометка = Истина Тогда Рег = РегистрыСведений[СписокРег.Получить(ид).Значение.Имя].СоздатьНаборЗаписей(); Рег.Записать(); КонецЕсли; КонецЦикла;
Поставил базу на чек еще вчера утром но он еще идет, не смотря на то что железо не слабое Intel® Xeon® CPU E5420 @ 2.50GHz 16GB of RAM.
Помогите советом, может я что-то не так делаю, или есть другой вариант быстрой очистки базы?
Попробуйте через конфигуратор уплотнить базу, может уменьшиться размер. На диске необходимо наличие свободного места. Возможно придется сделать за несколько этапов. Почистить, например, справочники, упаковать базу. Потом регистры, документы (возможно не все сразу, а по частям). Может не надо удалять сразу все, а частями по интервалу дат с последующей упаковкой...
Мне кажется что так делать нехорошо - выборка может нарушиться в процессе удаления. Имхо, лучше было бы сначала запросом получить ссылки, а потом уже обрабатывать его результат.
А что замер производительности показывает?
Объект = Док.ПолучитьОбъект();
Насколько я помню, это длительная операция. Лучше сначала проверить условия даты а потом уже получать объект.
Вот есть у меня такой кусок кода.
ТекстЗапроса = ""; Запрос = Новый Запрос; Запрос.Параметры.Вставить("ДатаНач", НачалоПериода); Запрос.Параметры.Вставить("ДатаКон", КонецПериода); Для каждого Строка Из ВидыДокументов Цикл Если Строка.Пометка Тогда ТекстЗапроса = ТекстЗапроса + " |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ Ссылка ИЗ Документ." + Строка.ВидДокумента + " ГДЕ Дата > &ДатаНач И Дата < &ДатаКон"; КонецЕсли; КонецЦикла; Найдено = Найти(ТекстЗапроса, "Ссылка"); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ " + Сред(ТекстЗапроса, Найдено); Запрос.Текст = ТекстЗапроса; ТабличнаяЧастьСсылки.Загрузить(Запрос.Выполнить().Выгрузить());
ВидыДокументов = ТабличнаяЧасть с реквизитами: Пометка (булево), ВидДокумента(Строка) Заполняется так:
Процедура ПриОткрытии() ВидыДокументов.Очистить(); Для каждого Док Из Метаданные.Документы Цикл НоваяСтрока = ВидыДокументов.Добавить(); НоваяСтрока.ВидДокумента = Док.Имя; КонецЦикла; КонецПроцедуры
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0
1. Если база растет при удалении объектов, то, скорее всего, включено версионирование объектов или какое-то логирование их судьбы. 2. Отключите на время чистки(только потом включить не забудьте) подписки на события, которые могут срабатывать. 3. Уберите нафиг "Сообщить()" или перестаньте жаловаться на "тормоза". 4. Удалите вначале документы. Нафига нарываться на ситуацию с туевой кучей битых ссылок?
Группа: Местный
Сообщений: 170
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 0
Цитата(Zaval @ 20.12.12, 14:52)
1. Если база растет при удалении объектов, то, скорее всего, включено версионирование объектов или какое-то логирование их судьбы. 2. Отключите на время чистки(только потом включить не забудьте) подписки на события, которые могут срабатывать. 3. Уберите нафиг "Сообщить()" или перестаньте жаловаться на "тормоза". 4. Удалите вначале документы. Нафига нарываться на ситуацию с туевой кучей битых ссылок?
1. "Версионирование объектов или какое-то логирование их судьбы." Такого нет. 2. Подписок тоже нет. 3. Тормозов процессе нет, все удаляется очень быстро. 4. Я сначала и удаляю документы.
Документы каждого вида нужно удалять за период? Если бы полностью, можно было бы попробовать удалять их на уровне объектов конфигурации, а потом снова сделать объединение с заранее сохраненной конфигурацией.
Я когда-то давно-давно так семерочные базы "свертывал"
Группа: Местный
Сообщений: 170
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 0
Цитата(Zaval @ 20.12.12, 16:38)
В приведенном фрагменте кода вначале чистятся какие-то справочники.
А в ПланахОбмена ничего не регистрируется?
На форме выбираю документы сначала
// Вставить содержимое обработчика. Для Каждого Объект из Метаданные.Справочники Цикл СписокСпр.Добавить(Объект, Объект.Представление(),Ложь); КонецЦикла; Для Каждого Объект из Метаданные.Документы Цикл СписокДок.Добавить(Объект, Объект.Представление(),Ложь); КонецЦикла; Для Каждого Объект из Метаданные.РегистрыСведений Цикл СписокРег.Добавить(Объект, Объект.Представление(),Ложь); КонецЦикла;
В планах обмена идет регистрация объектов при получении данных и отправки подчиненному узлу, не думаю что это как-то может повлиять на рост базы.
Группа: Местный
Сообщений: 170
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 0
Цитата(Altair777 @ 20.12.12, 16:36)
Документы каждого вида нужно удалять за период? Если бы полностью, можно было бы попробовать удалять их на уровне объектов конфигурации, а потом снова сделать объединение с заранее сохраненной конфигурацией.
Я когда-то давно-давно так семерочные базы "свертывал"
Документы все нужно удалить, думаю не правильно будет удалить объекты конфигурации а потом восстановить их.
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0
Цитата(Meest @ 20.12.12, 17:06)
На форме выбираю документы сначала
Перечитайте оба выложенных Вами фрагмента кода. Обратите внимание на взаимное расположение "Справочники" и "Документы". ЗЫ. Код выполняется сверху вниз.
Цитата(Meest @ 20.12.12, 17:06)
В планах обмена идет регистрация объектов при получении данных и отправки подчиненному узлу, не думаю что это как-то может повлиять на рост базы.
Там регистрируются измененные объекты(в момент изменения!) для передачи этих изменений в другие узлы, причем, запись не одна, а по одной на каждый узел, в который должны быть переданы изменения.
Группа: Местный
Сообщений: 170
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 0
Цитата(Zaval @ 20.12.12, 18:04)
Перечитайте оба выложенных Вами фрагмента кода. Обратите внимание на взаимное расположение "Справочники" и "Документы". ЗЫ. Код выполняется сверху вниз.
Перед открытие получаем список метаданных справочников, документов, регистров. На форме кроме списка наименования есть реквизит типа булева.
Я понимаю что с фрагмента кода видно что сначала берет справочник и по каждому "ид" проверяет, но так как признака истина нет справочники пропускаются.
Цитата(Zaval @ 20.12.12, 18:04)
Там регистрируются измененные объекты(в момент изменения!) для передачи этих изменений в другие узлы, причем, запись не одна, а по одной на каждый узел, в который должны быть переданы изменения.
База должна быть чистой от документов, справочники и регистры нужны
Сделать свой план обмена - распределенный, в составе указать справочники и регистры сведений (я так понимаю нужны) с учетом ссылок на подчиненные документы. Создать начальный образ. Отключить главный узел.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!