Низкая скорость записи в БД при большом объеме данных

1. user606436_kasper_85 17.03.17 09:25 Сейчас в теме
Доброе время суток.
У меня возникла проблема состоящая в следующем.

Необходимо загрузить в базу проводоки. Проводки находятся в файле XML (1000 файлов )

Принцип загрузки следующий.
Создается документ Операция и в регистр бухгалтерии записываются проводки .

Проблема в том что при увеличении количества проводок больше 250 000 происходит странная вещь. Время записи регистра увеличивается с 10 минут до часа.
При попытке разбить запись порциями наблюдается увеличение времени записи при каждой 1000 записей (тоесть 1000 проводок записывается за 1 секунду 2000 записей 2 сек 50 000 записей 50 секунд.)

Почему так происходит ?Скорость записи на диск показывает 100 активного времени использоывания и всего 2 мб записи. Хотя при тесте гилева нагрузочный тест показывает выше 140 мб\с .
При попытке загрузкить файл повторно запись происходит в течении минуты максимум. Проблема конкретно с новыми записями.

Запись в простой регистр сведений 600к записей происходит максимум минут 5.
+
По теме из базы знаний
Найденные решения
13. mickey.1cx 400 17.03.17 16:10 Сейчас в теме
(1) проверьте фрагментацию индексов регистра бухгалтерии до начала загрузки и на момент возникновения тормозов.
Скрипты можно посмотреть здесь, http://start1c.blogspot.ru/2017/03/blog-post.html
Сталкивался с ситуацией, когда загрузка большого объема данных довольно быстро приводила к излишней фрагментации.
Что в свою очередь приводила к нарастающим задержкам при записи следующих порций данных.
+
14. user606436_kasper_85 21.03.17 11:18 Сейчас в теме
В общем после нескольких дней тестов имею следующие результаты

Попробовал перенестибазу на более быстрые винты. Результат = 0

Значит дело в индексах. Делал пересчет индексов их реорганизацию через планы обслуживания . Результат =0 индексы не пересчитывались.

Помог скрипт с этой статьи Ссылка

Индексы пересчитались и все стало нормально.
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kolya_tlt 86 17.03.17 09:33 Сейчас в теме
(1) объедините запись нескольких (сотню например) документов в одну транзакцию
+
3. user606436_kasper_85 17.03.17 09:41 Сейчас в теме
(2)
Именно документов ? не проводок ?
+
13. mickey.1cx 400 17.03.17 16:10 Сейчас в теме
(1) проверьте фрагментацию индексов регистра бухгалтерии до начала загрузки и на момент возникновения тормозов.
Скрипты можно посмотреть здесь, http://start1c.blogspot.ru/2017/03/blog-post.html
Сталкивался с ситуацией, когда загрузка большого объема данных довольно быстро приводила к излишней фрагментации.
Что в свою очередь приводила к нарастающим задержкам при записи следующих порций данных.
+
4. user606436_kasper_85 17.03.17 09:48 Сейчас в теме
ВОт лог.
Тут четко видно время увеличения времени записи.

7.03.2017 12:13:03,Время начала записи регистра
17.03.2017 12:13:06,Время окончания записи регистра,Записанно 999 из 267 049
17.03.2017 12:13:08,Время начала записи регистра
17.03.2017 12:13:09,Время окончания записи регистра,Записанно 1 999 из 267 049
17.03.2017 12:13:11,Время начала записи регистра
17.03.2017 12:13:13,Время окончания записи регистра,Записанно 2 999 из 267 049
17.03.2017 12:13:15,Время начала записи регистра
17.03.2017 12:13:18,Время окончания записи регистра,Записанно 3 999 из 267 049
17.03.2017 12:13:20,Время начала записи регистра
17.03.2017 12:13:24,Время окончания записи регистра,Записанно 4 999 из 267 049
17.03.2017 12:13:25,Время начала записи регистра
17.03.2017 12:13:31,Время окончания записи регистра,Записанно 5 999 из 267 049
17.03.2017 12:13:32,Время начала записи регистра
17.03.2017 12:13:38,Время окончания записи регистра,Записанно 6 999 из 267 049
17.03.2017 12:13:40,Время начала записи регистра
17.03.2017 12:13:47,Время окончания записи регистра,Записанно 7 999 из 267 049
+
5. ditp 91 17.03.17 10:20 Сейчас в теме
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> (AccountingRegisterManager.<Имя регистра бухгалтерии>)
УстановитьИспользованиеИтогов (SetTotalsUsing)
Синтаксис:

УстановитьИспользованиеИтогов(<Признак>)
Параметры:

<Признак> (обязательный)

Тип: Булево.
Признак использования итогов. Ложь - пересчет итогов не производится.
Описание:

Устанавливает признак использования итогов. Если использование итогов отключено, то при записи набора записей регистра не будет производиться пересчет итогов, но при этом будут не доступны виртуальные таблицы расчета остатков и оборотов.
Данный режим работы регистра позволяет повысить скорость записи набора записей регистра. Он может быть полезен при массовых загрузках данных.
При установке признака использования итогов производится пересчет только тех итогов, которые зависят от движений, сделанных в момент, когда итоги были выключены.

Доступность:

Сервер, толстый клиент, внешнее соединение.
корум; +1
6. starik-2005 3036 17.03.17 10:31 Сейчас в теме
Есть такая штука, как исключительная блокировка. Она накладывается в случае, когда происходит запись 100 000 элементов за раз. Фактически блокируется весь регистр. Может быть в этом проблема?

А итоги в регистрах абдейтятся, хотя и тут 1С сумела сделать данный процесс максимально медленным ))) Так что отключение итогов с последующей записью и, затем, пересчетом будет выполняться быстрее.
alex-l19041; +1
7. user606436_kasper_85 17.03.17 11:24 Сейчас в теме
Итоги отключены использовал код
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(ЛОЖЬ);


(6)
выполняться


Я пробовал писать по 1000 проводок. пример в логе.
+
8. starik-2005 3036 17.03.17 11:41 Сейчас в теме
(7)
пробовал
Фактически при записи в БД происходит несколько операций:
1. Выделяется память для новой записи.
2. Запись записывается в базу. Тут может произойти ситуация, когда страница данных заполняется полностью и происходит расщепление страницы данных на две. Чем больше записей, тем чаще происходят операции разделения страниц.
3. Запись пишется в лог транзакций.

Плюс ко всему 1С пишет это все в транзакции (запись документа - это транзакция). Что там в этом случае делает SQL - это можно узнать через трассировку или через сбор технологического журнала. Но т.к. есть увеличение времени при записи следующих операций, то, предположу, основное время уходит на выделение дискового пространства для новых записей. Может быть резко увеличивается количество операций ввода-вывода, а не SSD-диски тут ограничены 1к таких операций в секунду, а вот SSD уже до 500к на дисках класса энтерпрайз доходит.

Для того, чтобы определить, в чем проблема, я бы собрал счетчики диска (очередь, количество чтений/записей, объем чтения/записи), страничного обмена и свободной памяти.
+
9. user606436_kasper_85 17.03.17 12:03 Сейчас в теме
(8)
Для того, чтобы определить, в чем проблема, я бы собрал счетчики диска (очередь, количество чтений/записей, объем чтения/записи), страничного обмена и свободной памяти.


Через монитор ресурсов ?

Какие именно счетчики использовать ? никогда не пользовался им.
+
10. user606436_kasper_85 17.03.17 12:34 Сейчас в теме
Выполнил скрипт на ожидание ресурсов.
Прикрепленные файлы:
+
12. starik-2005 3036 17.03.17 15:31 Сейчас в теме
(10)
Выполнил скрипт на ожидание ресурсов.
Ну вот, все дело в ёопсах!
Любые задания ожидают завершения I/O. Если SQL Server очень медленно обрабатывает данные и клиенты ожидают их, то счётчик ASYNC_IO_COMPLETION будет увеличиваться. Так же это ожидание провоцируется Backup, созданием и редактированием баз данных.

http://sqlcom.ru/waitstats-and-waittypes/async_io_completion/
+
11. user606436_kasper_85 17.03.17 12:38 Сейчас в теме
Кстати если поднять бэкап который я делал при загрузке файла с записями до 250 к грузятня вполне нормально 10 минут максимум
+
14. user606436_kasper_85 21.03.17 11:18 Сейчас в теме
В общем после нескольких дней тестов имею следующие результаты

Попробовал перенестибазу на более быстрые винты. Результат = 0

Значит дело в индексах. Делал пересчет индексов их реорганизацию через планы обслуживания . Результат =0 индексы не пересчитывались.

Помог скрипт с этой статьи Ссылка

Индексы пересчитались и все стало нормально.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот