IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Добавить ответ в эту темуОткрыть тему
Очень тормозит!
svd-alex
сообщение 2.9.2019, 16:43
Сообщение #1


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

Куда посмотреть и что подкрутить?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 2.9.2019, 18:14
Сообщение #2


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



Проблема (одна из) в запросе ниже. И в принципе понятно почему - потому что 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
Сообщение #3


Магистр слова
********

Группа: Пользователи
Сообщений: 2 879
Регистрация: 30.10.2007
Пользователь №: 12 033



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

Для БД - индексы. В кеше можно пол дня ковырятся, если в индекс не попал.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 10:41
Сообщение #4


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

Да и неправильно это - в закрытой системе что то пытаться сделать. Хочется ответ от разработчиков получить - что нужно посмотреть, настроить и т.д...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 3.9.2019, 10:58
Сообщение #5


Магистр слова
********

Группа: Пользователи
Сообщений: 2 879
Регистрация: 30.10.2007
Пользователь №: 12 033



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

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

Но вы свою версию можете легко проверить по плану запроса или банально переписав запрос - сделать select в переменную, а по ней уже вторым запросом сделать соединение с вьюхами. 5 минут на проверку уйдет smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 11:05
Сообщение #6


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



Цитата(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
Сообщение #7


Магистр слова
********

Группа: Пользователи
Сообщений: 2 879
Регистрация: 30.10.2007
Пользователь №: 12 033



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

На кой черт тогда вам нужен был этот unit? У нас вон самопальная система на MSSQL трудится уже не первый год - дорабатывается под желания и трудится дальше smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 11:31
Сообщение #8


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

А как самопальную систему с фронтолом интегрируете?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 3.9.2019, 11:41
Сообщение #9


Магистр слова
********

Группа: Пользователи
Сообщений: 2 879
Регистрация: 30.10.2007
Пользователь №: 12 033



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

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

Ну и далее по тексту. Есть нюанс: не доступен сервер - зависает на 30 сек. А вот как переделать на асинхронный вызов - не допер. Но разрывы связи редкость - так что не напрягает.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 12:10
Сообщение #10


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

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

Тоже выход, конечно, но всё же хочется что бы АТОЛ хоть что то сказал как заставить нормально работать его продукт. Или я ошибся форумом и тут не помогают своим клиентам решать проблемы?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Репьевский...
сообщение 3.9.2019, 13:05
Сообщение #11


Менеджер тех.поддержки
*******

Группа: Специалисты
Сообщений: 1 604
Регистрация: 1.6.2016
Из: Москвы
Пользователь №: 124 119



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

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


Доброго дня.

проблему взяли в работу.
чуть позднее отпишемся, что можно сделать чтобы улучшить скорость.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 13:15
Сообщение #12


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

Геннадий, спасибо. ОЧЕНЬ жду.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 3.9.2019, 16:49
Сообщение #13


Магистр слова
********

Группа: Пользователи
Сообщений: 2 879
Регистрация: 30.10.2007
Пользователь №: 12 033



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

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

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

Из 1с сделали парочку отчетов, которые лезут в эту базу и агрегируют данные smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 3.9.2019, 16:52
Сообщение #14


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

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


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

Надеюсь что коллеги помогут всё же с Discount Unit, но если нет, то придётся отказаться от него и писать самим всё.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Репьевский...
сообщение 9.9.2019, 16:12
Сообщение #15


Менеджер тех.поддержки
*******

Группа: Специалисты
Сообщений: 1 604
Регистрация: 1.6.2016
Из: Москвы
Пользователь №: 124 119



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

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


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 10.9.2019, 9:41
Сообщение #16


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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

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

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

Мне нужно дополнительно ещё какие то данные прислать?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Репьевский...
сообщение 10.9.2019, 10:21
Сообщение #17


Менеджер тех.поддержки
*******

Группа: Специалисты
Сообщений: 1 604
Регистрация: 1.6.2016
Из: Москвы
Пользователь №: 124 119



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

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


БД нашли
параметры железа напишите
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
svd-alex
сообщение 10.9.2019, 12:21
Сообщение #18


Начинающий
*

Группа: Пользователи
Сообщений: 74
Регистрация: 9.8.2006
Пользователь №: 8 477



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


Виртуальный сервер с 32 Гб памяти, 10 ядрами Intel Xeon 2.8 Гц, на RAID массиве из SSD дисков
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Репьевский...
сообщение 10.9.2019, 13:16
Сообщение #19


Менеджер тех.поддержки
*******

Группа: Специалисты
Сообщений: 1 604
Регистрация: 1.6.2016
Из: Москвы
Пользователь №: 124 119



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


спасибо, все передал разработчикам
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Репьевский...
сообщение 16.9.2019, 16:20
Сообщение #20


Менеджер тех.поддержки
*******

Группа: Специалисты
Сообщений: 1 604
Регистрация: 1.6.2016
Из: Москвы
Пользователь №: 124 119



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


решено, проверьте с новым релизом
ЦЗ
или
форум
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
10 чел. читают эту тему (гостей: 10, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 14.11.2019, 20:56
 Яндекс цитирования  Rambler's Top100