Имя: Пароль:
1C
1С v8
Как записать 1000 документов за 1 сек.
0 shaman_kz
 
28.12.17
19:22
Возникла потребность проведения большого объема данных.

При проведении система не загружена. Тесты по железу сети показывают 10-15%.

Почему документы не записываются в 1 сек.
1 nordbox
 
28.12.17
19:30
о как, я а то балда думал что Записать и Провести это разные весчи )))))
2 nordbox
 
28.12.17
19:36
(0) с тобой все нормально? ))) Стаж: 13 лет 16 дней
3 rs_trade
 
28.12.17
19:53
отключить итоги на время проведения
4 mingw
 
28.12.17
20:09
Вот интересно. Слово транзакция много программистов знает?
А понимает что это?
5 ПросТак
 
28.12.17
20:18
(2) зарегился во времена 7.7 и ушел в спячку)
6 lubitelxml
 
28.12.17
20:56
(5) я регился в 2004, ушел в спячку на пару лет - удалили акк ))
7 Мимохожий Однако
 
28.12.17
21:13
(0) Ждёшь новогоднего чуда? ))
8 Лефмихалыч
 
28.12.17
21:15
(0) надо позвать 1сника, дать ему денег за то, чтобы он разобрался, объяснил происходящее и предложил варианты решения.
Ну, или - подождать. Тупо.
9 shaman_kz
 
28.12.17
21:33
Транзакции не помогут. Либо через фоновые задания разделять на потоки либо запускать дополнительные сеансы.
10 shaman_kz
 
28.12.17
21:34
Задача стоит нагрузить систему одним сеансом.
11 shaman_kz
 
28.12.17
21:35
система клиент серверная. железо и сеть не загружены.
12 shaman_kz
 
28.12.17
21:36
при оптимизации кода прирост небольшой есть, но задача не код до бесконечности оптимизировать а загрузить железо хотя бы на 50-60%
13 H A D G E H O G s
 
28.12.17
21:39
(12) Вариант Н

н - никак.

p.s. Железо у вас загружено максимально.
14 shaman_kz
 
28.12.17
21:43
(13) Все тесты показывать что не загружено. Тесты специализованые админские. Тестит спец контора.
15 shaman_kz
 
28.12.17
21:44
При регламентных работах все загружено. При проведении нет.
16 mikecool
 
28.12.17
21:45
(14) слово Ежова - последнее. точка.
17 shaman_kz
 
28.12.17
22:08
100% не последнее. Вариантов куча.
18 shaman_kz
 
28.12.17
22:10
Оптимизаторов звать не охота, дорого стоят. Может тут какой вариант высветится.
19 Fragster
 
гуру
28.12.17
22:21
разделить на неблокирующие очереди и поручить кратный прирост (примерный эффект можно оценить с помощью http://catalog.mista.ru/public/173394/ )
20 MrStomak
 
28.12.17
23:17
(10) Ты уж определись - либо одним сеансом, либо максимально загрузить железо. Как ты хочешь, чтобы 1с выполняла последовательный код проведения документов одного сеанса сразу на всех ядрах?
21 vde69
 
28.12.17
23:19
в типовых практически не возможно добится сабжа...

в самописках это вполне реально...
22 MrStomak
 
28.12.17
23:27
(21) Проведение документа за 0.001с вполне реально? Это в каких самописках такое? На голой платформе с базой из 1 документа с датой и номером и без движений - и то медленнее будет
23 Aleksey
 
28.12.17
23:31
(22) у меня модель проведения в 7.7 отрабатывает за такое время. Другое дело дальше идут накладные расходы на запись самого документа.
24 Aleksey
 
28.12.17
23:34
Кстати ТС, а с чего ты взял что железо не загружено? При условии что 1С - однопоточное приложение, ты ожидал загрузки всех ядер?
25 MrStomak
 
28.12.17
23:41
(23)
Запись документа и запись движений - это уже нормальные такие расходы. Модуль проведения тут не причем.

Затестил для примера - в пустой базе без всего с 1 документом без реквизитов, без ТЧ, без движений в файловой базе на ssd с ядром 4.5 Ггц время проведения 1000 документов (точнее 1 документа 1000 раз) - 690 мс, т.е. 0.00069.
Можно даже не мечтать в продакшене с существующей логикой проведения приблизиться к 0.001.
26 Aleksey
 
29.12.17
00:02
(25) на моем 2600к (3,4ГГц) - 790 мс
27 Tateossian
 
29.12.17
00:50
(0) Если документы независимы, можно разбить на 8-10 сеансов и провести, но, думаю, отвалится на блокировках система.

(4) При больших объемах транзакции - зло. Скорость постепенно падает в геометрической прогрессии, лог разрастается так же, в геометрической. При 100 документах в транзакции в УПП лог вырастал до 8 Гб с 2 за несколько минут.
28 Tateossian
 
29.12.17
00:55
(27) Дополню: можно попробовать параметр /Z. Если конфа не в режиме совместимости, можно сдвинуть максимально вперед минимальную границу рассчитанных итогов (если известна минимальная дата проведения документов), или, если нет при проведении запросов к остаткам/оборотам - отключить использование итогов.
29 H A D G E H O G s
 
29.12.17
01:05
(27) Я сталкивался с обратным
При фиксации транзакции по каждому чиху - SQL начинал грузить SSD на 100% и все упиралось в него (SSD). При заключении чихов в большую транзакцию - SSD жил околонулевой нагрузкой и все заметно ускорялось, упираясь в производительность процессора сервером 1С.
30 Tateossian
 
29.12.17
01:46
(29) Тут все не очень очевидно: это идет работа буфера MSSQL. Он не сразу пишет на диск, а предварительно пушит в буфер. Видимо, при завершении транзакции запись из буфера идет на диск: в первом случае активно работает диск, во втором - оперативная память. Тут надо анализировать показатели PAGEIOLATCH и BUFFER MANAGER.
31 Tateossian
 
29.12.17
01:50
(29) Есть относительно "безопасный" способ оптимизации вот именно этого вопроса: если есть RAM диск (а в 2018 такой диск грех не иметь), можно туда вынести все TEMPDB и логи (при условии, что база находится в простой или разностной модели восстановления).
32 Feanor
 
29.12.17
08:59
(31) "разностная модель восстановления" - что за зверь? О.о
33 Владимир1С
 
29.12.17
09:14
(0) Нужны подробности: Проведение уже существующих доков, или создание и проведение новых. Что это за сеанс: ручной для запуска обработки или СерверныйРоботПроведения(для устранения конкурентного доступа к регистрам оборотов-остатков-сведений).  Если это проведение существующих доков, возможно прочитать остатки на начало дня, поднять все необходимые данные в таблицу значений, в ней всё пересчитать за день, и из ТЗ просто последовательно записывать в документы подокументные порции информации.
Подробности задачи в студию, тогда можно будет предложить более конкретные способы решения. Можно?
34 rs_trade
 
29.12.17
09:18
(29) при фиксации транзакции идет запись в журнал это как минимум.


Кстати, если отключить синхронный коммит, скорость должна значительно прибавится.
35 shamashs
 
29.12.17
10:02
(0) Озвучте задачу, которая перед вами стоит, как часто у вас будут пачки по 1000 документов, чего хотите добится в итоге
36 Segate
 
29.12.17
10:03
(14)
в (13) дело говорят. если скорость именно такая, значит где-то железо загружено максимально.
Специальные "админские тесты" судя по всему не включали в себя анализ ожиданий на блокировках, анализ очереди загруженности диска, очередь к ядрам, использование нума каналов. Если все это было оценено и вы так и не выяснили, где же затык, то скорее всего в коде стоит Обработчик ожидания. Это единственный вариант.
37 vde69
 
29.12.17
10:09
(22) автор имеет в виду 1документ = 1 секунда
38 D_E_S_131
 
29.12.17
10:15
Ну записать документы в несколько потоков это еще куда ни шло, но проводить-то все равно придется последовательно.
39 spiller26
 
29.12.17
10:20
(0) Проведение документов во многом зависит:
1. от количества движений документа, возможны пересчеты, проверки и т.д.
2. транзакции
3. железо
4. объем базы

Короче много факторов
40 Вафель
 
29.12.17
10:21
(0) Скорее всего 1 ядро загружено на 100%, а тк их много, то кажется что загрузки никакой нет
41 Бубр
 
29.12.17
10:23
предновогодняя ветка.  чтобы у всех  документы  в новом году у всех  так быстро  проводились! :)
42 hhhh
 
29.12.17
10:28
(38) проводить тоже параллельно можно. Кроме БП конечно. Там 90% проведения - это регистр бухгалтерии, особо не распараллелишь.
44 D_E_S_131
 
29.12.17
10:47
(42) ТС конечно же не указал, что это за документы такие, но если это связано с "Расходом", то параллельно вряд ли получится - нужно же остаток актуальный знать.
45 Fish
 
29.12.17
10:50
(37) В топике написано, что 1000 документов за 1 секунду, т.е. на один документ 0,001 сек. :)
46 mistеr
 
29.12.17
10:53
ТС же сказал прямым текстом: жалко денег на оптимизацию кривой системы. А так он все понимает. Он пришел сюда не за советами, это просто крик души.
47 mistеr
 
29.12.17
10:55
(45) Это как посчитать. Если распараллелить на 1000 потоков, да без накладных расходов, то как раз выйдет 1 документ за секунду. :)
48 rs_trade
 
29.12.17
10:59
(47) только потоки дольше будут создаваться.

за 1 сек вообще никак не сделать.
49 мистер игрек
 
29.12.17
11:01
(0) Ты с Казахстана?
50 1Сергей
 
29.12.17
11:03
(47) 1000 видов документов, 1000 серверов и нет ничего невозможного :)
51 Flover
 
29.12.17
11:04
(0) Как глобальный вариант:

Проводить порциями сразу скажем в 12-ти базах интервалами в месяц.

Через Обмен сливать в 13-ю общую базу движения с кажой базы.
Т.е. некий аналог "Биг Дата" построить.
52 Fragster
 
гуру
29.12.17
11:33
да ладно вам, вот http://fragster.ru/perfomanceTest/result.php?guid=a151f734-e48f-11e7-8062-50e549ef447d - в один поток 1600 документов с движениями по одному регистру.
53 rs_trade
 
29.12.17
11:41
(52) версия сикела не указана. а это важно.
54 Fragster
 
гуру
29.12.17
12:24
(53) да там вообще первые 15 страниц http://fragster.ru/perfomanceTest/results.php?sort=sum1&direction=desc имеют скорость больше 1000 в секунду... повторюсь, речь про документ с одним набором записей и без всяких контролей
55 4St
 
29.12.17
13:53
Был доклад на тусовке Инфостарта в 2015 году:
https://event.infostart.ru/2015/speakers/index.php?ELEMENT_ID=378326
Вкратце - SQL в режиме In-Memory, 2000 документов в секунду.
56 Elf_80_lvl
 
29.12.17
13:58
А ведь когда то само название 1С означало, что можно сформировать любой отчет за 1 секунду. Жаль что об этой идее быстро забыли....
57 nordbox
 
29.12.17
14:11
(56) а ты вот скажи, какая нафиг половая разница между отчетом за 1 сек или за 10 сек ? )))
58 Вафель
 
29.12.17
14:18
(57) есть разница
59 H A D G E H O G s
 
29.12.17
14:19
(57) Отчет в 10 секунд забьет кэш SQL и сервера 1С тупыми данными. Отчет в 1 секунду - нет
60 Вафель
 
29.12.17
14:19
ты еще скажи что нет разницы если документ будет открываться 10с вместо 1с
61 organizm
 
29.12.17
14:29
а как можно ускорить запись огромного движения регистра  ?
62 Новиков
 
29.12.17
15:37
(0) Возьми в руки трейсер, напиши свой код на 1С по записи твоих тыщи доков. Поймай по трассе его. Потом откати базу, где нет этих тыщей доков. И просто запусти в на скуле как выполнение запроса твоего текстового. Посмотри - он отработает на 1 сек? Если да - тогда, наверное, можно - если ты научишься генерить как платформа такие портянки и как-то быстро прокидывать его на выполнение через дмо, адо или как желает музыка в твоей голове. Если нет - значит нет.

Но если ты не полконник мусье Мазохи, то надо искать какое-то другое решение, вплоть до скидывания тысячи записей в какую-то простую таблицу и потом в фоне генерация и запись нужных доков.
63 Вафель
 
29.12.17
15:41
(62) один документ - это 100500 запросов на скуль
64 Новиков
 
29.12.17
15:43
(63) тебе жалко?
65 Вафель
 
29.12.17
15:44
(64) Просто ты предлагаешь потом запустить этот запрос.
Но это не реально
66 Новиков
 
29.12.17
15:49
(65) Если бы это не было не реально - тогда не было бы прямой генерации доков на скуле. Ну - ее никто бы никогда не сделал, т.к. это тупо не реально. Однако? Ты что-нибудь слышал когда-нибудь про обмены, которые написаны не на конвертахе, а на прямых запросах к скулю?
67 ИТ директор
 
29.12.17
16:14
(55) Посмотрел, какой-то невнятный доклад и ответы на вопросы невнятные.
(66) я не слышал, можно ссылку?
68 Новиков
 
29.12.17
17:13
(67) наверное рыть ИСу? :) Как думаешь? Я сам такие велосипеды писал, но сам понимаешь - это очень кастомное дерьмо. Суть кароче заключается вот в чем - делаешь нормальные вьюшки русские, чтобы можно было "аля язык запросов 1С" иметь на Т-SQL. Затем в качестве полей синхронизации по ссылке юзаешь ее гуид. И соотв. сам обмен представляет из себя поиск по каким-то полям, и если ничего не найдено - инсерт. Если найдено - апдейт. Написать это - не сложно. Но если в конвертахе просто сделать "создавай все, что не нашла", то на прямом обмене - тебе, если такое нужно, надо проанализировать последовательность таких инсертов, чтобы не попасть. И это самый гемор, когда тебе надо перетащить док в любом случае, и все ссылки в нем сначала проверить - если оные. Т.е. там кода столько под капотом, чтобы такие решения адски тяжело потом поддерживать. Прошла реструктуризация, все вьюхи завалились, у тебя все поломалось. Это первое. Но вьюхи можно пересоздать в клик. Второе - это ответ на вопросы, а почему вот этот, предположим какой-нибудь банк в р.с. контрагента, задублился? И тебе нужно протащить всю трассу в тестовую среду, чтобы разобраться - где косяк. Т.е. это не интересно все, долго, нудно. Но зато по скорости такое, что со второй конвертахой не снилось.
69 Новиков
 
29.12.17
17:16
Поэтому чуваку протащить тыщу доков - просто запись за секунду - скорее всего можно, если у него прямой запрос (запросы) за такое время пройдут. Вопрос в том, что скорее всего, не нужно так делать и он так, даже если захочет, не сделает - нужно сильно страдать, чтоб пойти на такой шаг. Т.е. должна быть очень критичная попа-боль. Полагаю у тс не так все, я бы сказал, драматично.
70 MaxS
 
29.12.17
17:16
Записать данные по документам в XML файл за 1 секунду и потом в фоновом задании обменом загружать их в базу 1С.
71 ИТ директор
 
29.12.17
17:20
(68) 1. Обмены и проведение это какбэ разные вещи, не находишь?
2. Твои костыли не имеют никакой гарантии что ничего в базе не поломается.
3. Если нужна скорость, этот вопрос решается на уровне железа и оптимизации штатных механизмов, на крайняк открывается проект ЦКТП и 1С допиливает в узких местах платформу. И уж никак не твоими кривыми руками.
72 ИТ директор
 
29.12.17
17:21
Короче всё что в этой ветке понаписали дичь дикая, а ТС тупой, жадный и ленивый.
73 Новиков
 
29.12.17
17:28
(71) >>Обмены и проведение это какбэ разные вещи, не находишь?

Ты не внимательно читаешь. Я где-то писал про проведение документа? В сабже написано: Как записать 1000 документов за 1 сек. Ну?

>>2. Твои костыли не имеют никакой гарантии что ничего в базе не поломается.
Не фантазируй, платформа при записи делает ровно тоже самое все. Ты генеришь код за нее. В части записи элементов справочника и документа - это не сложно.

>>3.на крайняк открывается проект ЦКТП и 1С допиливает в узких местах платформу. И уж никак не твоими кривыми руками.
Я не знаю, как твой ник коррелирует с твоим мозгом. Убейся об стену сам, будь мужиком :)
74 ИТ директор
 
29.12.17
17:37
(73) Ты дебил? Читай сабж внематочно: "Возникла потребность проведения большого объема данных. "

Платформа при записи делает много чего, в т.ч. на сервере 1С.

Мой ник кореллирует с моим опытом, а твой ник кореллирует со старческим маразмом.
75 Новиков
 
29.12.17
17:44
(74) ты точно препараты в нужной дозировке принимаешь? :)
76 Дык ё
 
29.12.17
18:31
(74) (75) парни, с новым годом! :)
77 Новиков
 
29.12.17
18:37
(76) Спасибо, взаимно! :)