Архивирование списаний
Решение
Народ, надеюсь что мое новое решение для упрощения процедуры архивирования таблиц списаний поможет многоим, смотрим подробности здесь viewtopic.php?t=8312&highlight=%E0%F0%F ... 0%ED%E8%E9
На тестовом стенде создал архивы по месяцам. При проверке корректности отчетов заметил, что результаты основного отчета за прошлые месяцы не сходятся с рабочей системой (где архивация еще не внедрена). С остальными отчетами все в порядке. В debug.log видна разница в запросах выполняемых при основном отчете и всех прочих отчетах.
Выдержки из debug.log, во время выполнения основного отчета за сентябрь:
Выдержки из debug.log, во время выполнения отчета по услугам за сентябрь:
Т.е. в отчете по услугам (и всех прочих отчетах, кроме основного):
discount_date>='1346436000' AND discount_date <='1349027999'
discount_date>='1349027999' AND discount_date <='1349028000'
, а в основном отчете:
discount_date >= '1346436000' AND discount_date < '1349027999'
discount_date >= '1349027999' AND discount_date < '1349028000'
Получается, из осн.отчета пропадают списания за последнюю секунду из всех архивных таблиц, входящих в диапазон запроса. В данном примере списания за 1349027999 секунду находятся в таблице arc_dta_2012_09, а UTM их ищет только в discount_transactions_all. Кто-нибудь сталкивался с подобной проблемой?
Выдержки из debug.log, во время выполнения основного отчета за сентябрь:
Код: Выделить всё
?Debug : Oct 21 22:14:22 DBCtx: <141987840> SQL SELECT query: SELECT SUM(discount),SUM(discount_with_tax),service_type,account_id FROM UTM5arc.arc_dta_2012_09 WHERE discount_date >= 1346436000 AND discount_date < 1349027999 AND account_id='25' GROUP BY service_type, account_id ORDER BY account_id
?Debug : Oct 21 22:14:45 DBCtx: <141987840> SQL SELECT query: SELECT MIN(id),account_id FROM UTM5arc.arc_dta_2012_09 WHERE discount_date >= '1346436000' AND discount_date < '1349027999' AND account_id='25' GROUP BY account_id
?Debug : Oct 21 22:14:56 DBCtx: <141987840> SQL SELECT query: SELECT MAX(id),account_id FROM UTM5arc.arc_dta_2012_09 WHERE discount_date >= '1346436000' AND discount_date < '1349027999' AND account_id='25' GROUP BY account_id
?Debug : Oct 21 22:15:41 DBCtx: <141987840> SQL SELECT query: SELECT SUM(discount),SUM(discount_with_tax),service_type,account_id FROM discount_transactions_all WHERE discount_date >= 1349027999 AND discount_date < 1349028000 AND account_id='25' GROUP BY service_type, account_id ORDER BY account_id
?Debug : Oct 21 22:15:41 DBCtx: <141987840> SQL SELECT query: SELECT MIN(id),account_id FROM discount_transactions_all WHERE discount_date >= '1349027999' AND discount_date < '1349028000' AND account_id='25' GROUP BY account_id
?Debug : Oct 21 22:15:41 DBCtx: <141987840> SQL SELECT query: SELECT MAX(id),account_id FROM discount_transactions_all WHERE discount_date >= '1349027999' AND discount_date < '1349028000' AND account_id='25' GROUP BY account_id
?Debug : Oct 21 22:15:41 DBCtx: <141987840> SQL SELECT query: SELECT SUM(payment_absolute),account_id FROM UTM5arc.arc_ptr_2012_09 WHERE payment_enter_date >= '1346436000' AND payment_enter_date < '1349028000' AND account_id='25' AND method <> '7' GROUP BY account_id
?Debug : Oct 21 22:15:41 DBCtx: <141987840> SQL SELECT query: SELECT SUM(payment_absolute),account_id FROM payment_transactions WHERE payment_enter_date >= '1346436000' AND payment_enter_date < '1349028000' AND account_id='25' AND method <> '7' GROUP BY account_id
Код: Выделить всё
?Debug : Oct 22 01:14:13 DBCtx: <142115840> SQL SELECT query: SELECT discount, slink_id, discount_date, discount_period_id,account_id, services_data.service_name, services_data.service_type, charge_type, discount_with_tax FROM UTM5arc.arc_dta_2012_09, services_data WHERE services_data.id=UTM5arc.arc_dta_2012_09.service_id AND discount_date>='1346436000' AND discount_date <='1349027999' AND account_id='25' AND (UTM5arc.arc_dta_2012_09.service_type='2' OR UTM5arc.arc_dta_2012_09.service_type='1' OR charge_type='1' OR charge_type='2') ORDER BY discount_date DESC
?Debug : Oct 22 01:14:24 DBCtx: <142115840> SQL SELECT query: SELECT discount,slink_id,discount_date,discount_period_id,account_id,charge_type,discount_with_tax FROM UTM5arc.arc_dta_2012_09 WHERE discount_date>='1346436000' AND discount_date <='1349027999' AND account_id='25' AND (charge_type='18' OR charge_type='20') ORDER BY discount_date DESC
?Debug : Oct 22 01:14:35 DBCtx: <142115840> SQL SELECT query: SELECT discount, slink_id, discount_date, discount_period_id,account_id, services_data.service_name, services_data.service_type, charge_type, discount_with_tax FROM discount_transactions_all, services_data WHERE services_data.id=discount_transactions_all.service_id AND discount_date>='1349027999' AND discount_date <='1349028000' AND account_id='25' AND (discount_transactions_all.service_type='2' OR discount_transactions_all.service_type='1' OR charge_type='1' OR charge_type='2') ORDER BY discount_date DESC
?Debug : Oct 22 01:14:35 DBCtx: <142115840> SQL SELECT query: SELECT discount,slink_id,discount_date,discount_period_id,account_id,charge_type,discount_with_tax FROM discount_transactions_all WHERE discount_date>='1349027999' AND discount_date <='1349028000' AND account_id='25' AND (charge_type='18' OR charge_type='20') ORDER BY discount_date DESC
discount_date>='1346436000' AND discount_date <='1349027999'
discount_date>='1349027999' AND discount_date <='1349028000'
, а в основном отчете:
discount_date >= '1346436000' AND discount_date < '1349027999'
discount_date >= '1349027999' AND discount_date < '1349028000'
Получается, из осн.отчета пропадают списания за последнюю секунду из всех архивных таблиц, входящих в диапазон запроса. В данном примере списания за 1349027999 секунду находятся в таблице arc_dta_2012_09, а UTM их ищет только в discount_transactions_all. Кто-нибудь сталкивался с подобной проблемой?
up
Архивирование работает отлично, спасибо.
Вот только есть небольшая проблема, если из админки формировать отчеты - выбирая предыдущий месяц - там пусто.
Если выбрать вручную не с 1-го числа 00:00:00, а на 4 часа раньше - 31 числа 20:00:00 то всё показывает. Причём показывает время списание услуг 1 числа 00:00:10
Разница ровным счетом в часовой пояс.
mysql> SHOW VARIABLES LIKE "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | MSK |
| time_zone | SYSTEM |
+------------------+--------+
и в админке стоит нужный пояс, и системное время правильное.
В чём траблы могут быть?
спасибо
Архивирование работает отлично, спасибо.
Вот только есть небольшая проблема, если из админки формировать отчеты - выбирая предыдущий месяц - там пусто.
Если выбрать вручную не с 1-го числа 00:00:00, а на 4 часа раньше - 31 числа 20:00:00 то всё показывает. Причём показывает время списание услуг 1 числа 00:00:10
Разница ровным счетом в часовой пояс.
mysql> SHOW VARIABLES LIKE "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | MSK |
| time_zone | SYSTEM |
+------------------+--------+
и в админке стоит нужный пояс, и системное время правильное.
В чём траблы могут быть?
спасибо
11) none - I want to specify the time zone using the Posix TZ format.
#? 11
Please enter the desired value of the TZ environment variable.
For example, GST-10 is a zone named GST that is 10 hours ahead (east) of UTC.
Вообщем у меня московский часовой пояс. От гринвича +4 часа
tzdata обновлен, и вроде всё правильно - а вот не всё
#? 11
Please enter the desired value of the TZ environment variable.
For example, GST-10 is a zone named GST that is 10 hours ahead (east) of UTC.
Вообщем у меня московский часовой пояс. От гринвича +4 часа
tzdata обновлен, и вроде всё правильно - а вот не всё
Еще саму java на рабочей станции надо обновить там есть фикс для нее, тут подробнее: http://habrahabr.ru/post/131573/