Тест скорости перезаписи в нетленке
Понадобилось проверить, как быстро перезапишется база с несколькими десятками миллионов элементов товаров.
Конфигурация была под обычные формы, но мышление и память работают забавно.
Я хотел визуально наблюдать прогресс записи. И забыл, что в обычных формах сообщение сразу выдается в окно сообщений. Поэтому зачем-то написал асинхронный режим.
В итоге получился такой гибрид ежа и ужа, но работающий:
Перем Выборка, Начало, Сч, РазмерПорции, Ошибок; Процедура КнопкаВыполнитьНажатие(Кнопка) З = Новый Запрос( "Выбрать ССЫЛКА ИЗ Справочник.Товары КАК Т "); Выборка = З.Выполнить().Выбрать(); РазмерПорции = 1000; Сч = 0; Ошибок = 0; Начало = ТекущаяДата(); ОчиститьСообщения(); Сообщить("Начало: " + Начало); ПодключитьОбработчикОжидания("ЗаписатьПорцию", 0.1, истина); КонецПроцедуры Процедура ЗаписатьПорцию() Экспорт Пока Выборка.Следующий() Цикл Сч = Сч + 1; ОО = Выборка.Ссылка.ПОлучитьОбъект(); Попытка ОО.Записать(); Исключение Ошибок = Ошибок + 1; КонецПопытки; Если Сч % РазмерПорции = 0 ИЛИ Выборка.Количество() = Сч Тогда Секунд = ТекущаяДата() - Начало; Скорость = Цел (?(Секунд = 0, 0, Сч / Секунд)); Сообщить("Запись: " + ТекущаяДата() + " Записано: " + Сч + " Средняя скорость: " + Скорость + " элементов/секунду Ошибок всего: " + Ошибок); ОбработкаПрерыванияПользователя(); ПодключитьОбработчикОжидания("ЗаписатьПорцию", 0.1, истина); КонецЕсли; КонецЦикла; КонецПроцедуры
Результат выглядел так:
Итоги, в принципе, радуют — чтобы перезаписать товары, на каждый миллион товаров понадобится 1.000.000 : 150 : 3600 = 1.85 часов.
Т.е. на 20 миллионов понадобится 37 часов. Это еще приемлемо.
Среда: Нетленка ОФ, MS SQL Сервер Объем: 0.8 час.
Причем тут асинхронность и зачем тут таймер. Зачем ты одну и ту же «порцию» гоняешь?
Почему вы решили что гоняется одна и та же порция? Выборка выбирает все элементы справочника.