Архивирование списаний

Технические вопросы по UTM 5.0
Ответить
Аватара пользователя
MaxDM
Сообщения: 313
Зарегистрирован: Пн апр 03, 2006 10:26
Контактная информация:

Сообщение MaxDM »

Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

что помешало сделать архивирование в первый раз по как помесячное?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

MaxDM писал(а):
Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.
Да хоть ежедневно хоть раз в 10 лет, какая разница.

Аватара пользователя
MaxDM
Сообщения: 313
Зарегистрирован: Пн апр 03, 2006 10:26
Контактная информация:

Сообщение MaxDM »

mikkey finn писал(а):что помешало сделать архивирование в первый раз по как помесячное?
Ничего не помешало. Попробовал сделать архивирование, рез-т см. выше.

Аватара пользователя
MaxDM
Сообщения: 313
Зарегистрирован: Пн апр 03, 2006 10:26
Контактная информация:

Сообщение MaxDM »

Magnum72 писал(а):
MaxDM писал(а):
Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.
Да хоть ежедневно хоть раз в 10 лет, какая разница.
А при чём тут логика как архивировать и не запуск нетапа после архивирования (не запускается даже когда очищаю таблицу archives)?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

MaxDM писал(а):
Magnum72 писал(а):
MaxDM писал(а):
Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.
Да хоть ежедневно хоть раз в 10 лет, какая разница.
А при чём тут логика как архивировать и не запуск нетапа после архивирования (не запускается даже когда очищаю таблицу archives)?
Потому что если делать так как ты сделал то мускул лочит таблицу и начинает заниматся сначала копированием, а потом перемещением, следовательно биллинг не может запустится, как собственно и не может корректно работать.

Аватара пользователя
MaxDM
Сообщения: 313
Зарегистрирован: Пн апр 03, 2006 10:26
Контактная информация:

Сообщение MaxDM »

База на постгресе. Ядро в момент архивирования остановлено было.
Сейчас попробую сделать архивирование с копированием таблиц, а не с созданием новых из старых.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

по мотивам Магнума получилось примерно так:
#!/usr/bin/perl -w
use DBI;
use strict;
my $dbh; my $sth; my $ts; my @res; my $tmp;
# Обязательно сменить
my $dbuser='';
my $dbpass='';
my $dbhost='';
# Дальше лучше не менять
$dbh=DBI->connect("DBI:mysql:UTM5:$dbhost", $dbuser, $dbpass, {RaiseError=>1})
or die "\nConnection failed...\nError: $DBI::errstr\n";
$sth=$dbh->prepare("select unix_timestamp(concat(year(now()),'-',month(now()),'-01 00:00:00'))");
$sth->execute();
$ts=($sth->fetchrow_array)[0];
$dbh->do("rename table discount_transactions_all to discount_transactions_all_$ts");
$dbh->do("rename table discount_transactions_iptraffic_all to discount_transactions_iptraffic_all_$ts");
$sth=$dbh->prepare("show create table discount_transactions_iptraffic_all_$ts");
$sth->execute();
if (@res=$sth->fetchrow_array) {
$tmp= $res[1];
$tmp=~ s/discount_transactions_iptraffic_all_$ts/discount_transactions_iptraffic_all/g;
};
$dbh->do($tmp);
$sth=$dbh->prepare("show create table discount_transactions_all_$ts");
$sth->execute();
if (@res=$sth->fetchrow_array) {
$tmp= $res[1];
$tmp=~ s/discount_transactions_all_$ts/discount_transactions_all/g;
};
$dbh->do($tmp);
$dbh->do("insert into discount_transactions_all select * from discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("insert into discount_transactions_iptraffic_all select * from discount_transactions_iptraffic_all_$ts where discount_date>=$ts");
$dbh->do("delete from discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("delete from discount_transactions_iptraffic_all_$ts where discount_date>=$ts");
$sth=$dbh->prepare("select max(archive_id) from archives");
$sth->execute();
$tmp=($sth->fetchrow_array)[0];
$tmp+=1;
$dbh->do("insert into archives(archive_id,table_type,table_name,start_date,end_date) SELECT $tmp,1,".$dbh->quote("discount_transactions_all_$ts").",min(discount_date),max(discount_date) from discount_transactions_all_$ts");
$dbh->do("insert into archives(archive_id,table_type,table_name,start_date,end_date) SELECT $tmp,2,".$dbh->quote("discount_transactions_iptraffic_all_$ts").",min(discount_date),max(discount_date) from discount_transactions_iptraffic_all_$ts");
Комменты по багам приветствуются.

UPD: Исправлены баги. Спасиба Магнуму за комменты.
Последний раз редактировалось mikkey finn Пт дек 19, 2008 09:32, всего редактировалось 1 раз.

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

клёва... работает :) тока можно даже поменять местами процедуры занесения в archives и удаления лишнего из таблиц.. ну это на любителя...

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Pulse писал(а):клёва... работает :) тока можно даже поменять местами процедуры занесения в archives и удаления лишнего из таблиц.. ну это на любителя...
Еще нюанс :)
Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :

1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")

2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг :)

ЗЫ Хинт если еще не удалили автоинкремент из таблицы discount_transactions_iptraffic_all можете это сделать счас :)

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

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

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

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

TEPbEP
Сообщения: 12
Зарегистрирован: Пт май 27, 2005 12:31

Сообщение TEPbEP »

Здраствуйте... хотел бы попросить помощи по данному вопросу:
Magnum72 писал(а):по поводу уменьшения размера таблиц: на самом деле глубоко пофиг, сколько они занимают места. по сути это файловая система мускула на файловой системе операционки, на скорость это никак не влияет, только на размер.
что казается размера:
Советую вам перевести движок иннодб в режим одна таблица один файл, перестанет быть доступной возможность ставить связанные межтабличные индексы, но они все равно не используются в виду того что база изначально под них не запроектирована
в этом случае размер каждой таблицы можно уменьшить командой ALTER TABLE ...
если не сложно... можно пример или линк на мануал?
Magnum72 писал(а):бегин
ренаме discount_transactions_all в discount_transactions_all_хххх
смотрим автоинкремент ид у discount_transactions_all_хххх
креате табле discount_transactions_all с автоинкремент из discount_transactions_all_хххх
далее спокойно переносим маленький кусочек данных из discount_transactions_all_хххх в discount_transactions_all
тоже самое с discount_transactions_iptraffic_all
коммит
как это написать в коде? учитывая этот комментарий:
Magnum72 писал(а):Еще нюанс
Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :

1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")

2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

TEPbEP писал(а):Здраствуйте... хотел бы попросить помощи по данному вопросу:
Magnum72 писал(а): Советую вам перевести движок иннодб в режим одна таблица один файл, перестанет быть доступной возможность ставить связанные межтабличные индексы, но они все равно не используются в виду того что база изначально под них не запроектирована
в этом случае размер каждой таблицы можно уменьшить командой ALTER TABLE ...
если не сложно... можно пример или линк на мануал?
Поищите по форуму выложенный магнумом конфиг mysql. Настройки конфига крутите под себя.
Magnum72 писал(а):бегин
ренаме discount_transactions_all в discount_transactions_all_хххх
смотрим автоинкремент ид у discount_transactions_all_хххх
креате табле discount_transactions_all с автоинкремент из discount_transactions_all_хххх
далее спокойно переносим маленький кусочек данных из discount_transactions_all_хххх в discount_transactions_all
тоже самое с discount_transactions_iptraffic_all
коммит
как это написать в коде? учитывая этот комментарий:
Magnum72 писал(а):Еще нюанс
Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :

1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")

2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг
А вот это решается тем скриптом, который я выложил и обновил уже выше.
Один нюанс моего скрипта, я делаю это все без транзакций, т.к. база у меня в myisam.

Аватара пользователя
MaxDM
Сообщения: 313
Зарегистрирован: Пн апр 03, 2006 10:26
Контактная информация:

Сообщение MaxDM »

To mikkey finn
А на PostgreSQL не пробовал свой скрипт запускать?

Ответить