Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ-4

Ошибка при расчете купонами. Query failed: Error(1205) Lock wait timeout exceeded : УКМ-4

23.11.2024 3:37


09.04.2014 16:29
Так Onesoft в конце написал, внимательно прочитай...
09.04.2014 16:46
Цитата:
Лечится обновлением до 53 (ошибка 5327 по утверждениям разрабов исправлена там), но мы обошлись отключением импорта таблицы trm_coupon_data с касс и серверов и еже15секундным запуском скрипта обработки принятых с касс и серверов чеков: берём из таблицы trm_out_receipt_discount_coupons_accept свежего чека купон, ставим ему status=0,version=0 и формируем пустой incr в конвертере import4. Всем этим занимается SQL-скрипт, запускаемый event schedulerом MySQL (у нас оно версии 5.6.12).
Хотелось бы по-подробнее! Как отключить импорт таблицы (если в разделе "Централизация-Интерактивный маркетинг" на СГО, то он не включен не на один магазин) или это нужно в базе магазина как-то отключить? И что приставляет собой скрипт (52 sp1)? Версия Mysql 5.0.84! Обновляться пока не собираем ждем 58 версию!
09.04.2014 17:46
Цитата:
Tiger Согласен, что это напрямую связано с проверкой купона на сервере и репликацией принятых купонов на кассу с других касса в этот момент и происходит ошибка! Как быть в моей версии 52 sp1 на СГО 52 sp2? Может есть пути решения для моей версии?
Долго ещё купоны принимать? Сейчас могу только порекомендовать отключить импорт в настройках репликации домена "интерактивный маркетинг" (и кратковременно включать его только с утра либо в течение дня с интервалами, чтобы на кассы выгрузить применённые купоны), а к следующей купонной акции основательно подготовиться, например, обновить всю сеть до 56, а заодно подстраховаться моим решением..
10.04.2014 04:46
Цитата:
Onesoft Долго ещё купоны принимать? Сейчас могу только порекомендовать отключить импорт в настройках репликации домена "интерактивный маркетинг" (и кратковременно включать его только с утра либо в течение дня с интервалами, чтобы на кассы выгрузить применённые купоны), а к следующей купонной акции основательно подготовиться, например, обновить всю сеть до 56, а заодно подстраховаться моим решением..
Отключить импорт в разделе "Настройка сервера и оборудования/Настройка обмена с СГО/Репликация и буферизация" в колонке Импорт, только на магазинах где действуют купоны, или на СГО? И можно ваше решение по-подробнее описать, что и где настроить? Прием купонов на 2-х магазинах закончился 6 апреля (но нужно продлить как-то действие до 13 апреля - подскажите каким запросом?), а еще на одном до 20 апреля!
10.04.2014 08:13
Цитата:
Tiger Отключить импорт в разделе "Настройка сервера и оборудования/Настройка обмена с СГО/Репликация и буферизация" в колонке Импорт, только на магазинах где действуют купоны, или на СГО? И можно ваше решение по-подробнее описать, что и где настроить? Прием купонов на 2-х магазинах закончился 6 апреля (но нужно продлить как-то действие до 13 апреля - подскажите каким запросом?), а еще на одном до 20 апреля!
Отключать на СГО.

Продлить до 13 и 20 апреля: выполни на СГО запрос и пришли ответ:
select*from trm_coupon_data group by LEFT(id,5), date_to;
10.04.2014 09:47
Цитата:
Onesoft Отключать на СГО.

Продлить до 13 и 20 апреля: выполни на СГО запрос и пришли ответ:
select*from trm_coupon_data group by LEFT(id,5), date_to;
Вот результат запроса на СГО:

Цитата:
mysql> select*from trm_coupon_data group by LEFT(id,5), date_to;
+-----------+------------------+------------+------------+---------+--------+---------+---------+
| global_id | id | date_from | date_to | amount | status | version | deleted |
+-----------+------------------+------------+------------+---------+--------+---------+---------+
| 0 | номер купона | 2014-01-21 | 2014-01-31 | 50.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 50.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 50.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 50.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 100.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 100.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 100.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 150.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 150.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 150.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 200.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 200.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 200.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-21 | 2014-01-31 | 250.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 250.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 250.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 250.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 300.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 300.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 300.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 350.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 350.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 350.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 400.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 400.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 400.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 450.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 450.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 450.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 500.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 500.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 500.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 550.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 550.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 550.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 600.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 600.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 600.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 650.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 650.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 650.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 700.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 700.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 700.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 750.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 750.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 750.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 800.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 800.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 850.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 850.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 900.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 900.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 950.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 950.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 950.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-01-23 | 2014-03-03 | 1000.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-04 | 2014-04-06 | 1000.00 | 0 | 488972 | 0 |
| 0 | номер купона | 2014-03-20 | 2014-04-20 | 1000.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-02-01 | 2014-02-28 | 100.00 | 1 | 488972 | 0 |
| 0 | номер купона | 2014-02-01 | 2014-08-01 | 100.00 | 1 | 488972 | 0 |
+-----------+------------------+------------+------------+---------+--------+---------+---------+
61 rows in set (0.06 sec)
Что является результатом данного запроса?
10.04.2014 09:51
Цитата:
Tiger Вот результат запроса на СГО:
"номер купона" - прямо так и написано? Или это ты их из соображений секретности заменил?
10.04.2014 09:52
Цитата:
Onesoft "номер купона" - прямо так и написано? Или это ты их из соображений секретности заменил?
секретность :)
10.04.2014 10:15
Цитата:
Tiger секретность :)
Понятно. Очевидно, что у них у всех ещё и префиксы разные.. Тогда запрос на продление срока действия купонов будет таким:

UPDATE trm_coupon_data SET date_to='2014-04-20',version=0 WHERE date_to='2014-04-06' AND status=1 AND deleted=0 LIMIT 5000;

Продлит до 20 все купоны со сроком действия 2014-04-06. Если надо продлить купоны с определённым префиксом:

UPDATE trm_coupon_data SET date_to='2014-04-20',version=0 WHERE date_to='2014-04-06' AND status=1 AND deleted=0 AND global_id=0 AND id LIKE 'xxxxx%' LIMIT 5000;

где xxxxx - пятизначный префикс номеров купона.
Выполнять в БД СГО. Запрос не отправляет данные, а только метит их на отправку (version=0), чтобы они отправились - нужно где-нибудь в WEBе тыкнуть "применить", не изменяя ничего, либо дождаться выгрузки из ТС - тогда само отреплицируется.
LIMIT 5000 - это чтобы ломанувшаяся на кассы и сервера репликация не забила каналы связи. Выполнять порциями по 5000 записей с интервалом 5-20 минут с наблюдением за show processlist в БД СГО. Выполнять до тех пор, пока в ответ на запрос не придёт "Changed: 0".

Таким образом мы продлим все купоны до 20.04.2014. В магазине, где их приём заканчивается 13.04.2014, придётся тогда настроить вторую скидку на приём суммовых купонов, дату окончания действия этой скидки настроить на 13.04.2014, настроить магазин. У второй скидки, которая будет предоставлять скидку до 20.04.2014, данный магазин исключить.
Как-то так..

По поводу решения: оно требует миграции БД СГО на MySQL 5.1.61 (как минимум), поскольку использует функционал event_scheduler.. Миграцию необходимо выполнять через перезаливку БД через текстовый дамп. Могу помочь всё это сделать, на всё про всё - одна ночь, независимо от размера БД.
10.04.2014 14:18
Цитата:
Onesoft Понятно. Очевидно, что у них у всех ещё и префиксы разные.. Тогда запрос на продление срока действия купонов будет таким:

UPDATE trm_coupon_data SET date_to='2014-04-20',version=0 WHERE date_to='2014-04-06' AND status=1 AND deleted=0 LIMIT 5000;

Продлит до 20 все купоны со сроком действия 2014-04-06. Если надо продлить купоны с определённым префиксом:

UPDATE trm_coupon_data SET date_to='2014-04-20',version=0 WHERE date_to='2014-04-06' AND status=1 AND deleted=0 AND global_id=0 AND id LIKE 'xxxxx%' LIMIT 5000;

где xxxxx - пятизначный префикс номеров купона.
Выполнять в БД СГО. Запрос не отправляет данные, а только метит их на отправку (version=0), чтобы они отправились - нужно где-нибудь в WEBе тыкнуть "применить", не изменяя ничего, либо дождаться выгрузки из ТС - тогда само отреплицируется.
LIMIT 5000 - это чтобы ломанувшаяся на кассы и сервера репликация не забила каналы связи. Выполнять порциями по 5000 записей с интервалом 5-20 минут с наблюдением за show processlist в БД СГО. Выполнять до тех пор, пока в ответ на запрос не придёт "Changed: 0".

Таким образом мы продлим все купоны до 20.04.2014. В магазине, где их приём заканчивается 13.04.2014, придётся тогда настроить вторую скидку на приём суммовых купонов, дату окончания действия этой скидки настроить на 13.04.2014, настроить магазин. У второй скидки, которая будет предоставлять скидку до 20.04.2014, данный магазин исключить.
Как-то так..

По поводу решения: оно требует миграции БД СГО на MySQL 5.1.61 (как минимум), поскольку использует функционал event_scheduler.. Миграцию необходимо выполнять через перезаливку БД через текстовый дамп. Могу помочь всё это сделать, на всё про всё - одна ночь, независимо от размера БД.
Правильно понимаю:

1. Сделал запрос на СГО

Цитата:
select * from trm_coupon_data where date_to='2014-04-06' and status=1;
- получил количество купонов (порядка 12 тыс), у которых дата окончания стоит 6 апреля 2014 г.

2. Чтобы продлить дату действия купона до 13 апреля

Цитата:
UPDATE trm_coupon_data SET date_to='2014-04-13',version=0 WHERE date_to='2014-04-06' AND status=1 AND deleted=0 LIMIT 5000;
- выполню запрос 3 раза в течении часа с интервалом 20 минут!

По поводу обновления mysql подумаю, сейчас пока нужно завершить любыми силами начатое!
Часовой пояс GMT +3, время: 03:37.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.