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.
(1) проверьте фрагментацию индексов регистра бухгалтерии до начала загрузки и на момент возникновения тормозов.
Скрипты можно посмотреть здесь, http://start1c.blogspot.ru/2017/03/blog-post.html Сталкивался с ситуацией, когда загрузка большого объема данных довольно быстро приводила к излишней фрагментации.
Что в свою очередь приводила к нарастающим задержкам при записи следующих порций данных.
(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
Тип: Булево.
Признак использования итогов. Ложь - пересчет итогов не производится.
Описание:
Устанавливает признак использования итогов. Если использование итогов отключено, то при записи набора записей регистра не будет производиться пересчет итогов, но при этом будут не доступны виртуальные таблицы расчета остатков и оборотов.
Данный режим работы регистра позволяет повысить скорость записи набора записей регистра. Он может быть полезен при массовых загрузках данных.
При установке признака использования итогов производится пересчет только тех итогов, которые зависят от движений, сделанных в момент, когда итоги были выключены.
Есть такая штука, как исключительная блокировка. Она накладывается в случае, когда происходит запись 100 000 элементов за раз. Фактически блокируется весь регистр. Может быть в этом проблема?
А итоги в регистрах абдейтятся, хотя и тут 1С сумела сделать данный процесс максимально медленным ))) Так что отключение итогов с последующей записью и, затем, пересчетом будет выполняться быстрее.
Фактически при записи в БД происходит несколько операций:
1. Выделяется память для новой записи.
2. Запись записывается в базу. Тут может произойти ситуация, когда страница данных заполняется полностью и происходит расщепление страницы данных на две. Чем больше записей, тем чаще происходят операции разделения страниц.
3. Запись пишется в лог транзакций.
Плюс ко всему 1С пишет это все в транзакции (запись документа - это транзакция). Что там в этом случае делает SQL - это можно узнать через трассировку или через сбор технологического журнала. Но т.к. есть увеличение времени при записи следующих операций, то, предположу, основное время уходит на выделение дискового пространства для новых записей. Может быть резко увеличивается количество операций ввода-вывода, а не SSD-диски тут ограничены 1к таких операций в секунду, а вот SSD уже до 500к на дисках класса энтерпрайз доходит.
Для того, чтобы определить, в чем проблема, я бы собрал счетчики диска (очередь, количество чтений/записей, объем чтения/записи), страничного обмена и свободной памяти.
Для того, чтобы определить, в чем проблема, я бы собрал счетчики диска (очередь, количество чтений/записей, объем чтения/записи), страничного обмена и свободной памяти.
Через монитор ресурсов ?
Какие именно счетчики использовать ? никогда не пользовался им.
Любые задания ожидают завершения I/O. Если SQL Server очень медленно обрабатывает данные и клиенты ожидают их, то счётчик ASYNC_IO_COMPLETION будет увеличиваться. Так же это ожидание провоцируется Backup, созданием и редактированием баз данных.