Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форумы общения пользователей продуктов АТОЛ _ Frontol Discount Unit _ Очень тормозит!

Автор: svd-alex 2.9.2019, 16:43

Коллеги, приветствую!

Совсем перестала устраивать скорость работы программы! Ввод карты клиента на кассе занимает 10-30 секунд, просмотр баланса столько же. При введенной дисконтной карте очень долго может закрываться чека на кассе. Карт в системе 500 тыс., подключено около 100 касс

Куда посмотреть и что подкрутить?

Автор: svd-alex 2.9.2019, 18:14

Проблема (одна из) в запросе ниже. И в принципе понятно почему - потому что client_bonus, client_discount и client_total - это view, которые группируют соответствующие показатели по клиенту. В данном запросе это работает долго (учитывая что у меня вся БД в памяти и попадание в кэш 100% (или почти 100%)).
Неужели никто с этим не сталкивался?

SELECT client.id
,client.NAME
,client.birthday
,client.sex
,client.phone
,client.email
,client.enabled
,client.notify_email
,client.notify_sms
,coalesce(client_bonus.value, 0)
,coalesce(client_discount.value, 0)
,coalesce(client_total.value, 0)
FROM client
LEFT JOIN client_bonus ON client.id = client_bonus.id
LEFT JOIN client_discount ON client.id = client_discount.id
LEFT JOIN client_total ON client.id = client_total.id
WHERE (
client.id LIKE $1
OR $1 IS NULL
)
AND (
client.NAME LIKE $2
OR $2 IS NULL
)
AND (
client.birthday >= $3
OR $3 IS NULL
)
AND (
client.birthday <= $4
OR $4 IS NULL
)
AND (
client.sex = $5
OR $5 IS NULL
)
AND (
client.phone LIKE $6
OR $6 IS NULL
)
AND (
client.email LIKE $7
OR $7 IS NULL
)
AND (
client.enabled = $8
OR $8 IS NULL
)
AND (
client.notify_email = $9
OR $9 IS NULL
)
AND (
client.notify_sms = $10
OR $10 IS NULL
)
ORDER BY client.id

Автор: zenik 3.9.2019, 8:47

Цитата(svd-alex @ 2.9.2019, 18:14) *
и попадание в кэш 100% (или почти 100%)).

Для БД - индексы. В кеше можно пол дня ковырятся, если в индекс не попал.

Автор: svd-alex 3.9.2019, 10:41

Цитата(zenik @ 3.9.2019, 8:47) *
Для БД - индексы. В кеше можно пол дня ковырятся, если в индекс не попал.

Согласен про индексы, но ещё важнее - правильно построенные запросы. В данном запросе оптимизатор сначала сделает 3 больших view, а потом уже из них выберет по одной записи из каждого, что не особо быстро и не нужно, если выбирается одна запись. Для выбора многих записей - хороший вариант, но не для одной!

Да и неправильно это - в закрытой системе что то пытаться сделать. Хочется ответ от разработчиков получить - что нужно посмотреть, настроить и т.д...

Автор: zenik 3.9.2019, 10:58

Цитата(svd-alex @ 3.9.2019, 10:41) *
В данном запросе оптимизатор сначала сделает 3 больших view

Не факт. Даже скорее наоборот. Мне больше кажется, что тормоза из-за LIKE

Но вы свою версию можете легко проверить по плану запроса или банально переписав запрос - сделать select в переменную, а по ней уже вторым запросом сделать соединение с вьюхами. 5 минут на проверку уйдет smile.gif

Автор: svd-alex 3.9.2019, 11:05

Цитата(zenik @ 3.9.2019, 10:58) *
Не факт. Даже скорее наоборот. Мне больше кажется, что тормоза из-за LIKE

Но вы свою версию можете легко проверить по плану запроса или банально переписав запрос - сделать select в переменную, а по ней уже вторым запросом сделать соединение с вьюхами. 5 минут на проверку уйдет smile.gif


Естественно LIKE с % в начале строки - это проблема для поиска по индексу. Естественно я могу легко переписать этот запрос так, что тормозить не будет. И конечно я посмотрел план запроса smile.gif

Для своих целей я давно всё импортирую в MS SQL и там делаю что и как хочу - интегрирую с нашей ERP системой, отчёты строю и т.д...

Но мне то нужно что бы с ней Фронтол нормально работал и веб форма от самого Discount Unit, а там я ничего поменять не могу!

Автор: zenik 3.9.2019, 11:21

Цитата(svd-alex @ 3.9.2019, 11:05) *
Для своих целей я давно всё импортирую в MS SQL

На кой черт тогда вам нужен был этот unit? У нас вон самопальная система на MSSQL трудится уже не первый год - дорабатывается под желания и трудится дальше smile.gif

Автор: svd-alex 3.9.2019, 11:31

Цитата(zenik @ 3.9.2019, 11:21) *
На кой черт тогда вам нужен был этот unit? У нас вон самопальная система на MSSQL трудится уже не первый год - дорабатывается под желания и трудится дальше smile.gif

Сгубило меня пару лет назад посещение форума атола.... Подкупила лёгкость внедрения. Тогда наш отдел розницы был полностью доволен. А вот теперь и хотелок у них стало побольше и карт побольше - и началось...

А как самопальную систему с фронтолом интегрируете?

Автор: zenik 3.9.2019, 11:41

Цитата(svd-alex @ 3.9.2019, 11:31) *
А как самопальную систему с фронтолом интегрируете?

Код
Command = new ActiveXObject("ADODB.Command");

Ну и далее по тексту. Есть нюанс: не доступен сервер - зависает на 30 сек. А вот как переделать на асинхронный вызов - не допер. Но разрывы связи редкость - так что не напрягает.

Автор: svd-alex 3.9.2019, 12:10

Цитата(zenik @ 3.9.2019, 11:41) *
Код
Command = new ActiveXObject("ADODB.Command");

Ну и далее по тексту. Есть нюанс: не доступен сервер - зависает на 30 сек. А вот как переделать на асинхронный вызов - не допер. Но разрывы связи редкость - так что не напрягает.

Т.е. всю логику скриптами реализовали с прямыми запросами к БД?

Тоже выход, конечно, но всё же хочется что бы АТОЛ хоть что то сказал как заставить нормально работать его продукт. Или я ошибся форумом и тут не помогают своим клиентам решать проблемы?

Автор: АТОЛ: Репьевский Геннадий 3.9.2019, 13:05

Цитата(svd-alex @ 3.9.2019, 12:10) *
Т.е. всю логику скриптами реализовали с прямыми запросами к БД?

Тоже выход, конечно, но всё же хочется что бы АТОЛ хоть что то сказал как заставить нормально работать его продукт. Или я ошибся форумом и тут не помогают своим клиентам решать проблемы?


Доброго дня.

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

Автор: svd-alex 3.9.2019, 13:15

Цитата(АТОЛ: Репьевский Геннадий @ 3.9.2019, 13:05) *
Доброго дня.

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

Геннадий, спасибо. ОЧЕНЬ жду.

Автор: zenik 3.9.2019, 16:49

Цитата(svd-alex @ 3.9.2019, 12:10) *
Т.е. всю логику скриптами реализовали с прямыми запросами к БД?

1. Касса запрашивает информацию по карте с сервера.
2. Если карты нет в базе - проходит авторегистрация карты.
3. Сервер возвращает параметры карты (тип карты, количество бонусов) - все хранится на сервере.
4. Касса запрашивает использование бонусов у клиента, списываем/несписываем бонусы.
5. При закрытии чека - отправляем инфомацию по чеку в бонусный сервер назад.

Сейчас система поддерживает накопительные бонусные карты покупателей, карты сотрудников - внутренняя оплата, и карты с фиксированной скидкой.

Из 1с сделали парочку отчетов, которые лезут в эту базу и агрегируют данные smile.gif

Автор: svd-alex 3.9.2019, 16:52

Цитата(zenik @ 3.9.2019, 16:49) *
1. Касса запрашивает информацию по карте с сервера.
2. Если карты нет в базе - проходит авторегистрация карты.
3. Сервер возвращает параметры карты (тип карты, количество бонусов) - все хранится на сервере.
4. Касса запрашивает использование бонусов у клиента, списываем/несписываем бонусы.
5. При закрытии чека - отправляем инфомацию по чеку в бонусный сервер назад.

Сейчас система поддерживает накопительные бонусные карты покупателей, карты сотрудников - внутренняя оплата, и карты с фиксированной скидкой.

Из 1с сделали парочку отчетов, которые лезут в эту базу и агрегируют данные smile.gif


Спасибо за подробности!

Надеюсь что коллеги помогут всё же с Discount Unit, но если нет, то придётся отказаться от него и писать самим всё.

Автор: АТОЛ: Репьевский Геннадий 9.9.2019, 16:12

предоставьте бэкап БД Discount unit, только самой БД, а не всего сервера postgresql (можете передать в рамках уже созданного обращения в СТП или ссылкой в личку)

уточните так же на каком железе стоит Discount unit



Автор: svd-alex 10.9.2019, 9:41

Цитата(АТОЛ: Репьевский Геннадий @ 9.9.2019, 16:12) *
предоставьте бэкап БД Discount unit, только самой БД, а не всего сервера postgresql (можете передать в рамках уже созданного обращения в СТП или ссылкой в личку)

уточните так же на каком железе стоит Discount unit

Геннадий, через вашего партнёра (БрэндСелект) неделю назад все эти данные переслал вашим программистам. Мне сказали что они работают над оптимизацией и через неделю (т.е. сегодня - завтра) всё исправят.

Мне нужно дополнительно ещё какие то данные прислать?

Автор: АТОЛ: Репьевский Геннадий 10.9.2019, 10:21

Цитата(svd-alex @ 10.9.2019, 9:41) *
Геннадий, через вашего партнёра (БрэндСелект) неделю назад все эти данные переслал вашим программистам. Мне сказали что они работают над оптимизацией и через неделю (т.е. сегодня - завтра) всё исправят.

Мне нужно дополнительно ещё какие то данные прислать?


БД нашли
параметры железа напишите

Автор: svd-alex 10.9.2019, 12:21

Цитата(АТОЛ: Репьевский Геннадий @ 10.9.2019, 10:21) *
БД нашли
параметры железа напишите


Виртуальный сервер с 32 Гб памяти, 10 ядрами Intel Xeon 2.8 Гц, на RAID массиве из SSD дисков

Автор: АТОЛ: Репьевский Геннадий 10.9.2019, 13:16

Цитата(svd-alex @ 10.9.2019, 12:21) *
Виртуальный сервер с 32 Гб памяти, 10 ядрами Intel Xeon 2.8 Гц, на RAID массиве из SSD дисков


спасибо, все передал разработчикам

Автор: АТОЛ: Репьевский Геннадий 16.9.2019, 16:20

Цитата(АТОЛ: Репьевский Геннадий @ 10.9.2019, 13:16) *
спасибо, все передал разработчикам


решено, проверьте с новым релизом
https://frontol.ru/resources/Download_Center/?params%5Bfilters%5D%5Bversion%5D=2.1.7&params%5Bfilters%5D%5Bproducts%5D=9398
или
http://forum.atol.ru/index.php?showtopic=34073&view=findpost&p=285288

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)