Параллельность выгрузок

41 Comments

  1. NazarovV

    все гениальное — просто! Спасибо Вам за эту публикацию, как никогда кстати!

    Reply
  2. fixin

    (1) сам несказанно рад. тупил год на решением проблемы, чего только не хотел сделать. А решение вот оно где оказывается.

    Reply
  3. NazarovV

    (2) мне до сих пор стыдно(

    Reply
  4. Fragster

    Я не только на мисте, я и тут есть

    Reply
  5. tolyan_ekb

    Изредка следил за твоими исканиями по мелькавшим темам. Молодец, у тебя получилось ))

    Reply
  6. Fragster

    Опять же главное — сделать обмен вида 1 база — 7 баз — 7х10 баз — так и не реализовано, а это очень сильно снижает время выгрузок (если одни и те же данные ходят во много узлов), 7 «промежуточных» баз можно вынести на отдельный сервер, чтобы они не мешали работе основного.

    Reply
  7. fixin

    (6) да. но это из пушки по воробьям. Меня устроила выгрузка в пять потоков на 70 точек.

    Грузит, конечно, сервак на 100%, но быстро. Терпимо.

    Да, спасибо большое за решение. 😉

    (5) да, стремлюсь к идеалу.

    Reply
  8. rosinfo1

    Что-то не понял как 14 узлов в одну настройку обмена запихнуть??? У меня один узел соответствует одной настройке, потом цикл по справочнику с настройками запускается и стартует последовательно. Правда у меня всего 5 узлов.

    Reply
  9. fixin

    (8) не путайте «настройка выполнения обмена» (сюда именно запихиваются 14 узлов) и «настройка обмена»

    Reply
  10. Slotty

    Хм. Сам как то бился над решением данного вопроса. Fragster, fixin — молодцы.

    Reply
  11. a-novoselov

    Вроде бы элементарное решение, сам до него за пару часов додумался, когда проблемы возникли и другие действия не помогали… Но, видимо, не всем сразу в голову может прийти. Молодец что написал в помощь молодым!

    Reply
  12. fixin

    (11) а прикинь, я год парился. и не новичок.

    кстати, у меня розница переделана была в режим управляемых блокировок. но думаю, что и в обычном режиме должна норм работать.

    Reply
  13. rosinfo1

    Что-то все равно не понятно где в спр. «настройка выполнения обмена» указать 14 узлов, узел же указывается в шапке справочника «настройка обмена». Если 70 обменов следовательно 70 элементов справочника «настройка обмена», далее цикл переборка каждого элемента справочника и запуск обмена, или я что-то не понимаю ?

    Reply
  14. rosinfo1

    Еще вопрос. У Вас обмен файлами через ФТП ресурс настроен, или как-то по другому? Файлы каждого магазина в отдельной папочке на ФТП ресурсе, или по названиям ищите (если что не так пойдет)? Потом из Розницы в какую базы выгружаете? Просто мне предстоит настроить 15 магазинов розницы РИБ, а потом выгрузку из центрального узла в Комплексную автоматизацию. Хочу все типовыми средствами делать. Думаю как бы на «грабли не наступить».

    Reply
  15. rosinfo1

    C настройкой спр. «настройка выполнения обмена» разобрался, почему то табличная часть «Выполняемые действия» была скрыта в демо-базе Розница 1.0

    Reply
  16. fixin

    (14) у нас VPN, обмен происходит через расшаренный каталог центрального сервера. То бишь никакого ФТП.

    Reply
  17. Aleskey_K

    я думаю, что обмен по 1 элементу, это слишком мелко. почему не использовать блоки по 5-10 элементов, найти эту золотую середину? Или тут смысл немного в другом ?

    Reply
  18. LexSeIch

    Мир этому дому!

    Спасибо за предложенное решение! Думаю скоро пригодится.

    Reply
  19. fixin

    (17) лучшее — враг хорошего. И так работает. Вот на 200 не работало. 😉

    Ну их нафиг, эти транзакции, рассадник блокировок.

    (18) спасибо.

    Reply
  20. NazarovV

    (14) rosinfo1, у нас 12 магазинов, обмен был настроен по http://ftp... выгружал последовательно, параллельно тупило( после этой статьи попробовал — все ок, выгрузказагрузка проходят за 30-40 секунд, тормозов замеченно не было… удачи в настройке!

    Reply
  21. ivanov660

    Наверное не сравнивали время выгрузки при различных настройках 200 и 1? Если сопоставимы тогда гуд.

    Мы же делаем выгрузки последовательно растягивается конечно часа на 2-3 (8 точек). Надо попробовать, интересно посмотреть на результат. Больше всего конечно напрягают взаимные блокировки в случае параллельности…

    Reply
  22. stoptime

    22 магазина файлы ходят эпические, так как картинок много. Супер это решило проблемму.

    дед локи ушли

    Reply
  23. Yashazz

    «Не изучал…», «Спросил совета…». Метод тыка, ё-моё.

    Лучше б товарищ Fragster сам словил означенные плюсы.

    Reply
  24. fixin

    (23) коллеги, давайте относиться к вещам реалистично. Товарищ Фрагстер много знает и спасибо ему за это.

    Но если бы я не постарался, вы ды до сих пор не знали, что есть такая методика. Не думаю что в планах товарища Фрагстера было публиковать такую статью на ИС.

    Так что плюсы мои заслуженные. 😉

    Reply
  25. Fragster

    Можете купить мне на пиво обработку за 1000 рублей 🙂

    http://infostart.ru/public/197614/

    Reply
  26. fixin

    (25) не могу, я бедный.

    Reply
  27. kruglay

    оказывается все так просто, спасибо за совет

    Reply
  28. gallam99

    (0)

    Без обид конечно, но эта информация давно есть в инете:

    «Количество элементов в транзакции» – определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. Если значение параметра равно 0 (значение по умолчанию), то все данные помещаются в рамках одной транзакции. Такой режим является рекомендуемым, так как гарантирует согласованность данных, помещаемых в сообщение. Но при создании сообщения в многопользовательском режиме могут быть конфликты блокировок между транзакцией, в которой данные помещаются в сообщение, и транзакциями, выполняемыми другими пользователями. Для снижения вероятности возникновения таких конфликтов можно задать значение этого параметра, отличное от значения по умолчанию. Чем меньше значение параметра, тем меньше вероятность конфликта блокировок, но выше вероятность помещения в сообщение несогласованных данных.

    Я так понимаю, по фразе «элементов в транзакции при выгрузке данных» в яндексе эта статья на втором месте)))

    Reply
  29. fixin

    (28) привет, КЭП. В интернете есть все. Вопрос в том, чтобы применить то что есть в интернете.

    Не замечаете своей логической ошибки?

    Reply
  30. Fragster

    (28) gallam99, Это даже в синтакс помощнике есть, если что…

    Reply
  31. fixin

    (30) коллега, я не в первый раз подымаю эту тему. И никто ничего не мог сказать, пока я не провел эксперимент и не внедрил. Одно дело знать, что это влияет на блокировки, другое дело быть уверенным, что будет параллельность.

    Так что не надо выдавать неочевидные факты за очевидные.

    Reply
  32. gallam99

    (29) «Вы год бились по вашим словам», а то что написано в туче материалов не прочитали, досадно.

    И второе, прежде чем говорить об этой «супер находке», надо бы предупредить людей о проблеме «согласованности данных», на которую они могут наступить. И должны это учитывать для конкретной ситуации.

    У нас был практический опыт организации параллельных загрузок/выгрузок и не только в разрезе периферийных БД, а в размере объектов одной периферийной БД (и это возможно).

    Проще было проанализировать на чем у вас блокировка (какой ресурс блокируется) и можно было бы ли его расшить, тем более, что узел присутствует в таблице регистрации изменений (логических проблем быть не должно).

    Reply
  33. fixin

    (32) вам проще одно, мне другое. Проблема рассогласования данных решается проще, чем построение хитрых схем параллельности. 😉

    Видите ли, на практике все упирается в стоимость решения. Это решение дешевое и довольно надежное.

    Reply
  34. Jogeedae

    вообще, при выгрузке данных для узла блокируется только этот узел, так что не вижу проблемы в параллельной выгрузке данных для N-Узлов.

    саму проблему ожидания завершения транзакции для одного объекта выгружаемого в N-узлов одновременно не решили :), да это и не под силу в рамках платформы :).

    проблема согласованности данных по-моему мнимая, к тому же самоустраняющаяся в следующем сообщении.

    Зайдя сюда решил было что вы одно сообщение раздаёте всем узлам, хорошо что не так 🙂

    И ещё одно, пока есть процессы выгрузки сообщений, возможно, не стоит начинать приём сообщений? Если данные интенсивно мигрируют не только вертикально, но и горизонтально.

    Reply
  35. anchovy

    (34) Jogeedae, При определении состава сообщения блокируется вся ТРИ, иначе блокировки при параллельных выгрузках не возникали бы. Это баг, не убирающийся управляемыми блокировкаии. Я пробовал устанавливать режим управляемых блокировок в РИБ Розница — ничего не дало.

    Reply
  36. Zmey_72

    Спасибо за проделанную работу. Очень пригодилось!

    Reply
  37. AVK_Alex

    Вот так вот. На очередном примере подтверждается старинная русская поговорка: «Хорошего понемногу».

    Транзакции в небольшом количестве — добро, в большом — уже зло 🙂

    Reply
  38. natarezn

    Вы такой молодец! объяснили

    Reply
  39. natarezn

    У меня стоит 200 как у Вас. база слетает по часам. невозможно сделать выгрузки. сбоит

    Reply
  40. mixperm

    Зачет!!! Сделал как сказано тут, но при выгрузке были блокировки и ничего не выгружалось. Погуглил еще интернет и нашлось решение

    1. В конфигураторе сделал Режим управления блокировкой данных Автоматический и управляемый (было Автоматический)

    2. На sql выполнил запрос

    ALTER DATABASE <ИМЯ БАЗЫ>

    SET ALLOW_SNAPSHOT_ISOLATION ON

    ALTER DATABASE <ИМЯ БАЗЫ>

    SET READ_COMMITTED_SNAPSHOT ON

    Не стал разбивать на количество потоков базы, для каждой базы создана отдельная настройка выполнения обмена. В обработке одновременно запускаются все 40 обменов, на серваке 8 потоков выделено. Выгрузка обновлений конфигурации занимает 15 минут, до этого было 90 :)))

    Reply
  41. fixin

    (40) молодцом! грамотно применили идею.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *