Тема: Скорость синхронизации с 1С

Коллеги, добрый день.

Поделитесь своим опытом. Сколько по времени у вас занимает полный обмен данными 1с с сайтом?
При этом укажите количество позиций.

Столкнулись с такой бедой что у нас обмен данными длится уже сутки.
В выгрузке участвует 60000 товаров. И это просто товары (Наименование, артикул, цена, остаток) тут даже нет речи о картинках и свойствах.

Пока ТП разбираются с вопросом, хотел бы узнать у кого как.

Повысить оценку Понизить оценку

Re: Скорость синхронизации с 1С

Здравствуйте! Я рекомендую загружать порциями, ветками категорий товаров.
Потом включите синхронизацию только изменений.

3 Отредактировано Бутаков (20.01.2018 00:16:34)

Re: Скорость синхронизации с 1С

Ярослав пишет:

Здравствуйте! Я рекомендую загружать порциями, ветками категорий товаров.
Потом включите синхронизацию только изменений.

Только изменения это понятно, оно так и будет работать.

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

На текущий момент обмен продолжается
Старт

[2018.01.18 14:59:28] Запрос /site1/exchange/?type=catalog&mode=checkauth

Текущий лог

[2018.01.19 22:57:09]     Exchange\Model\Task\AfterImport\Groups [filename=offers.xml, startTime=1516391829, maxExecTime=7] is completed.

Пока писал ответ, обмен завершился.

Итого:

Выгружено товаров: 67 596
Выгружено предложений: 66 155

Время на все это дело
32 ЧАСА, КРАЛ smile


32ч. = 1920мин. = 115200сек.
115200 / 67596 = 1,7сек на товар, очень уж производительно.

Повысить оценку Понизить оценку

Re: Скорость синхронизации с 1С

Так у Вас и товаров огромное количество. Многое и от сервера зависит и от настройки MySQL.
В данном случае еще и файл обмена большого размера обрабатывается.

1. Увеличьте время выполнения запроса в настройках модуля. У вас стоит maxExecTime = 7. 7 секунд на обработку это очень мало.

2. Попробуйте закомментировать строку с $this->setOffersRightSortnIfNeed() в \modules\exchange\model\task\afterimport\products.inc.php

1000 продуктов с 27 000 многомерных комплектаций примерно за 20 минут заливаем.

Для клиента с постоянной выгрузкой остатков 10 000 товаров писали отдельно обмен.

Re: Скорость синхронизации с 1С

1. Увеличьте время выполнения запроса в настройках модуля. У вас стоит maxExecTime = 7. 7 секунд на обработку это очень мало.

Это относится к последнему запросу. По умолчанию стоит 30сек. Увеличили до 60 сек.

Также отключили в настройках обмена на сайте: Использовать импорт многомерных комплектаций

Сейчас показатели следующие:
Выгрузка 4400 товаров (1/15 общего каталога)
2 категории

Время на выполнение: 1 час 10 минут

Из наблюдений, дольше всего обновляются данные в таблице rs_product_x_stock

Повысить оценку Понизить оценку

6

Re: Скорость синхронизации с 1С

Сейчас тестируем обмен с вашими файлами на локальной машине. У нас без фото загружается 10 товаров в секунду:

[2018.01.23 19:29:28]         Импорт товара: Ополаскиватель для рта Колгейт Кора дуба и пихта 250мл Артикул:
[2018.01.23 19:29:28]         Импорт товара: Ополаскиватель для рта Колгейт Лечебные травы 250мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель СПЛАТ Биокальций 275мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель СПЛАТ Отбеливание Плюс 275мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума  Hair Love 200мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума 7 трав 200мл Артикул:00022298
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Fresh it Up 200мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Бесконечно длинные Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Крем уход с маслом Арганы 200мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Кристальный блеск 380мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Объем Пуш-Ап 200мл Артикул:
[2018.01.23 19:29:29]         Импорт товара: Ополаскиватель Шаума Сила Кератина 200мл Артикул:
[2018.01.23 19:29:30]         Импорт товара: Ополаскиватель Шаума Фито-Кофеин 200мл Артикул:
[2018.01.23 19:29:30]         Импорт товара: Ополаскиватель Шаума Фито-Укрепление 200мл Артикул:

Используется: PHP 7.1 x64 + opCache

Попробуйте отключить принудительный ресайз фотографий в разделе Веб-сайт -> Настройка модулей -> Блок фотографий -> "Изменять размер оригинальной фотографии при загрузке"

Повысить оценку Понизить оценку

Re: Скорость синхронизации с 1С

PHP Version 7.0.15-0ubuntu0.16.04.4
apache2 + nginx

Mysql при выгрузке съедает почти 100% CPU


Мы не грузим фотографии при обмене. Но на всякий случай отключил.

Повысить оценку Понизить оценку

8

Re: Скорость синхронизации с 1С

Проверьте, включен ли у вас opCache (ускорение до 2х раз)
Проверьте, включен ли у вас кэш в разделе Управление -> Настройка системы -> "Включить кэширование данных"
Попробуйте еще оптимизировать (выполнить OPTIMIZE TABLE .....) все таблицы в Mysql (через phpMyAdmin, например), чтобы исключить фактор, что Mysql тормозит. (однажды с таким сталкивались)

Повысить оценку Понизить оценку

9

Re: Скорость синхронизации с 1С

На всякий случай проверьте, не включен ли у вас в php.ini xdebug . Он может тормозить PHP значительно.

Повысить оценку Понизить оценку

10

Re: Скорость синхронизации с 1С

1. opCache https://yadi.sk/i/Ce1REjUb3RmTta
2. Включить кэширование данных - вкл
3. Оптимизировано
4. xdebug - нет такого параметра.

Вопрос при обмен данными через csv можно сюда не задавать?
Скорость тоже удручает, прогоняю 3 поля, название, краткое описание и описание, сверка данных по полю название.
34000 строк, продолжительность пока 12 часов.

Параметры сервера:

Процессор Xeon (2000 МГц) - 3CPU
Оперативная память DDR4 - 4 ГБ
SSD

Сервер как 2 дня работает, подняли для тестов.

Повысить оценку Понизить оценку

11

Re: Скорость синхронизации с 1С

Это аномально медленно. Есть подозрение, что что-то не так настроено на сервере. (либо возможны махинации хостинг провайдеров с оверселлингом). Попробуйте ради эксперимента на любом вашем локальном компьютере с OpenServer + php 7 + opCache запустить импорт.

Повысить оценку Понизить оценку

12

Re: Скорость синхронизации с 1С

Удовольствием развернем на локальном сервере, но уже наверно после того как работы с товарной составляющей будут завершены.

Просто на одном сервере валяются 2 сайта readyscript и bitrix, у второго нет таких проблем с обменами данных.
1с одного и того же клиента, товары по количеству идентичны.

Повысить оценку Понизить оценку

13

Re: Скорость синхронизации с 1С

admin пишет:

Это аномально медленно. Есть подозрение, что что-то не так настроено на сервере. (либо возможны махинации хостинг провайдеров с оверселлингом). Попробуйте ради эксперимента на любом вашем локальном компьютере с OpenServer + php 7 + opCache запустить импорт.


На сколько быстро, по вашим предположениям, должен проходить импорт csv?
в каталоге 77000 товаров
в импорте 34000 товара

Сопоставление идет по "Названию" (это для обновления данных), 3 поля название, описание, бренд.

Запустили на локальном, специально для этого развернутом сервачке:
Intel(R) Atom(TM) CPU D2550   @ 1.86GHz
Intel(R) Atom(TM) CPU D2550   @ 1.86GHz
Intel(R) Atom(TM) CPU D2550   @ 1.86GHz
Intel(R) Atom(TM) CPU D2550   @ 1.86GHz

Память 4 GB

HDD

Повысить оценку Понизить оценку

14

Re: Скорость синхронизации с 1С

Выкладывайте обезличенные файлы с выгрузкой, устроим Import Challenge)

15

Re: Скорость синхронизации с 1С

Давайте для начала конфигами mysql похвастаемся...
Время ночь, а проект запустить надо сидим эксперементируем с настройками БД, вот изначальная, с нее то все проблемы и растут.

[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log

symbolic-links=0

skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 32M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M

#innodb_use_native_aio = 0
innodb_file_per_table

max_connections=200
max_user_connections=50
wait_timeout=10
interactive_timeout=50
long_query_time=5

!includedir /etc/mysql/conf.d/

Повысить оценку Понизить оценку

16

Re: Скорость синхронизации с 1С

У меня самые стандартные конфиги OpenServer, без изменений:

[mysqld]
#skip-character-set-client-handshake
#skip-name-resolve
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
%log%general_log = 1
%log%general_log_file = "%dprogdir%\\userdata\\logs\\%mysql_driver%_queries.log"
back_log = 100
basedir = "%dprogdir%\\modules\\database\\%mysql_driver%"
bind-address = %ip%
bulk_insert_buffer_size = 2M
character-set-server=%sqlchr%
character-sets-dir    = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets"
collation-server=%mysqlcharset%
connect_timeout = 5
datadir = "%dprogdir%\\userdata\\%mysql_driver%"
default-storage-engine=InnoDB
expire_logs_days = 2
ft_min_word_len=4
init-connect="SET NAMES %sqlchr%"
interactive_timeout=30
join_buffer_size = 1M
key_buffer_size = 25M
local-infile=0
log-error = "%dprogdir%\\userdata\\logs\\%mysql_driver%_error.log"
lower_case_table_names = 2
max_allowed_packet = 32M
max_connect_errors = 10
max_connections = 30
max_heap_table_size = 25M
max_tmp_tables = 25
myisam-recover-options=backup,force
myisam_max_sort_file_size = 256M
myisam_repair_threads = 1
pid_file = "%dprogdir%\\userdata\\temp\\mysql.pid"
port = %mysqlport%
query_cache_limit = 256K
query_cache_size=25M
read_buffer_size=2M
read_rnd_buffer_size=4M
server-id = 1
skip-external-locking
skip-innodb_adaptive_hash_index
sort_buffer_size = 1M
table_open_cache = 969
thread_cache_size = 4
tmp_table_size = 25M
tmpdir = "%dprogdir%\\userdata\\temp"
transaction-isolation = READ-COMMITTED
wait_timeout=60

#innodb_fast_shutdown
#innodb_file_per_table = 1
#innodb_force_recovery=1
#skip-innodb_doublewrite

#Use default
#innodb_additional_mem_pool_size = 1M
#innodb_buffer_pool_size = 20M
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_data_home_dir = "%dprogdir%\\userdata\\%mysql_driver%"
#innodb_flush_log_at_trx_commit = 2
#innodb_lock_wait_timeout = 30
#innodb_log_buffer_size = 1M
#innodb_log_file_size = 64M
#innodb_log_files_in_group = 2
#innodb_max_dirty_pages_pct = 90
#innodb_read_io_threads=4
#innodb_thread_concurrency=4
#innodb_write_io_threads=4

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 50M
sort_buffer_size = 50M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
open-files-limit = 2048

Повысить оценку Понизить оценку

17

Re: Скорость синхронизации с 1С

На сколько быстро, по вашим предположениям, должен проходить импорт csv?

Каких-то ГОСТ'ов - нет, чем быстрее тем лучше. Но точно больше 0,7 товаров в секунду.
Просим ссылку на CSV файл.

Повысить оценку Понизить оценку

18

Re: Скорость синхронизации с 1С

Попробую описать ночные эксперементы.
Дано:
77000 товаров
979 (категорий, максимально 4 вложенность)
OpenVZ (3x2000 МГц/4 ГБ/100 ГБ SSD)
KVM (3x2000 МГц/6 ГБ/40 ГБ SSD)
Офисный сервер (4x1860 МГц/4 ГБ/200 ГБ HDD)
Ubuntu 16.4 / Centos 7
ISP Manager / VestaCP
Apache, Apache+Nginx, CGI
PHP 5,6/7
Все ставилось с ноля...
Очень много играл с настройками Mysql / Apache / Nginx


Что пытаюсь сделать:
Обновить информацию о 100 товарах через импорт CSV
Обновляю описание и бренд
Сопоставление по названию

В итоге у меня получилось оверМНОГО вариаций так сказать хостингов

Что имеет в итоге:
Почти на всех конфигурациях обновление происходило за 2 минуты.
Несколько раз удавалось сократить время до 1.5 минут, и это только в связках
KVM + Centos 7 + CGI (PHP 5,6)
OpenVZ + Ubuntu 16.4 + Apache+Nginx (PHP 7) при этом отключил почти все службы (типа exim, iptables)

Повысить оценку Понизить оценку

19 Отредактировано Ярослав (27.01.2018 16:05:43)

Re: Скорость синхронизации с 1С

Я следовал вот этим рекомендациям и скорость загрузки взлетала ощутимо. Конфиг с рабочего сервера.

key_buffer_size         = 128M#256M  # размер буфера, используемого для блоков индексов (рекомендуется 25% от ОЗУ) является общим для всех потоков
max_allowed_packet        = 16M #
#max_connections         = 50 # 50 — это мало для высоконагруженных проектов(как и VPS для таких проектов — это недостаточно) даже в данном случае можно смело повысит до 70, если поставить 100 — съест более 90% памяти, а у нас еще там апач стоит с java и прочие радости для сервера или же уменьшаем(постути жертвуем) выделение памяти под буферы и ставим max_connections сколько требуется
thread_cache_size       = 51 # число открытых потоков в кэше для обслуживания новых соединений (лучше больше)
table_open_cache        = 634 # Количество открытых таблиц для всех потоков (зависит от кол-во таблиц, лучше ставить больше)
tmp_table_size             = 128M # максимальный размер памяти для временных таблиц (устанавливается эксперементальным путём, желательно выше 32М)
max_heap_table_size     = 128M # максимальный допустимый размер временной таблицы (устанавливается эксперементальным путём, желательно выше 32М)
thread_concurrency      = 4 # 2количество одновременных процессов, обрабатывающих конкурентные запросы к mysql. Рекомендуется установить  значение, равное количеству процессов или ядер сервера, умноженное на два.
join_buffer_size        = 2M # индивидуальный параметр, вполне может хватить и 1М или меньше
open_files_limit        = 2048 # лучше больше
innodb_buffer_pool_size = 400M # зависит скорее от необходимости, надо мониторить и ставить больше чем потребляется по факту
wait_timeout            = 30 # сколько времени сервер ждет в секундах прежде чем закрыть соединение
interactive_timeout     = 60
sort_buffer_size        = 4M # поток, которому необходимо произвести сортировку, выделяет буфер данного размера (можно больше с оглядкой на расход памяти)
read_buffer_size        = 1M # рекомендуется в 4-е раза больше, чем sort_buffer_size
query_cache_limit        = 8M # по умолчанию – 1Мб, результаты, превышающие это значение, не кэшируются, слишком большое значение смысла не имеет
query_cache_size        = 128M#64 128M # сколько памяти выделить для внутреннего кэша запросов mysql, вычисляется опытным путем, по фактическому потреблению, но опять же мы ограничены 2Гб в данном конкретном случае (рекомендуется указывать 20% — 10% от ОЗУ)
 

Сопоставление по названию и не должно быть быстрым, это не же поиск по индексу.
У товара индекс alias и xml_id, у товарного предложения xml_id. Попробуйте по ним сделать сопоставление.

20

Re: Скорость синхронизации с 1С

Спасибо. Ваши настройки попробую применить.
Если была бы возможность сопоставлять по опмюисанным данным, мы бы это использовали.

Но судя по тому что обмен данными с 1с занял 32 часа, то это никак не решит проблемы.

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

Повысить оценку Понизить оценку

21 Отредактировано Ярослав (28.01.2018 01:49:22)

Re: Скорость синхронизации с 1С

У Вас же идет обмен с 1с, значит идентификатор 1с XML_id используется, поэтому выгрузите товары в CSV с XML_ID и обмен должен пойти бодрее:

<Ид>1de57a01-15d9-11dc-80e5-00179ac22fbb</Ид>

22 Отредактировано Ярослав (28.01.2018 21:12:51)

Re: Скорость синхронизации с 1С

Только что проверил загрузку 50 000 товаров из csv файла (Расширенный импорт CSV). 1 час 25 минут заняло.
Сервер:
Процессор    2 X QEMU Virtual CPU version (cpu64-rhel6) 2593.748 MHz
Оперативная память 1419 / 2010 MiB
Размер дискового пространства    58.93 GiB HDD
Хостер FirstVds
Нагрузка на проц составила 51%, памяти - 70%
Вот сама база: https://cloud.mail.ru/public/DJyV/kJ8Kr9vxT
p.s. Колонку с описанием я убрал, побоялся, что могут быть разделители, а протестировать хотел быстрее.

p.p.s. Попробовал и с описанием. Примерно такой же результат.

23

Re: Скорость синхронизации с 1С

Загрузка на чистую систему или обновление имеющейся базы?

Ярослав пишет:

Только что проверил загрузку 50 000 товаров из csv файла (Расширенный импорт CSV). 1 час 25 минут заняло.
Сервер:
Процессор    2 X QEMU Virtual CPU version (cpu64-rhel6) 2593.748 MHz
Оперативная память 1419 / 2010 MiB
Размер дискового пространства    58.93 GiB HDD
Хостер FirstVds
Нагрузка на проц составила 51%, памяти - 70%
Вот сама база: https://cloud.mail.ru/public/DJyV/kJ8Kr9vxT
p.s. Колонку с описанием я убрал, побоялся, что могут быть разделители, а протестировать хотел быстрее.

p.p.s. Попробовал и с описанием. Примерно такой же результат.


Если бы это было возможно, сделал бы.

<Ид>1de57a01-15d9-11dc-80e5-00179ac22fbb</Ид>

Повысить оценку Понизить оценку

24

Re: Скорость синхронизации с 1С

Удалил товары в каталоге и залил заново.
Сегодня попробую обновить цены у товаров.

Re: Скорость синхронизации с 1С

Интерактивный обмен
31.01.2018 23:21:56 Запуск выгрузки товаров
31.01.2018 23:23:54 Завершено формирование файлов выгрузки товаров
Выгружено товаров: 11 801
предложений: 8 059
картинок: 12 182
файлов: 0
31.01.2018 23:55:49 Товары успешно выгружены на сайт.

vps 1 ядро Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz

Повысить оценку +1 Понизить оценку