Speeding up dump/restore process

As some of you know, I've been working lately for OmniTI company. When doing things for them (PostgreSQL related of course :), I stumbled on very interesting problem.

One of our clients is working on PostgreSQL 8.2, and wants to upgrade to 8.3. This is generally trivial – pg_dump, pg_restore/psql, and you're done.

But, this situation was with a twist – we had only very limited time-frame to do the migration. To be exact – we had 4 hours that we can bring the website down for.

So, we had to dump database, transfer it to new server, and load. All within 4 hours. Simple? Sure. Database was ~ 200GB (after restore – around 130GB). How to do it?

Continue reading Speeding up dump/restore process

[polish only] Historia ku pamięci … – aktualizacja

W piątek, 14 sierpnia, jakoś tak wieczorkiem dostałem maila od bliżej mi nie znanej osoby z firmy Luxmed.

Osoba ta, poprosiła o “pilny kontakt (niezależnie od godziny)", w sprawie “optymalizacji baz PostgreSQL".

Zadzwoniłem.

Okazało się, że potrzebują pomocy, i uważają, że dam radę jakoś “stuningować" Postgresa tak by działał szybciej. I że chodzi o pomoc w dniu jutrzejszym (tzn, w sobotę, 15 sierpnia).

Zapytał się mnie ten pan o oczekiwane wynagrodzenie, powiedział, że się skonsultuje i oddzwoni.

I faktycznie – oddzwonił jeszcze z 20 minut później, z pytaniem czy nie dałoby się taniej. Stwierdziłem, że skoro chcą bym pomógł w sobotę, i mam nie być jednym pracującym, to znaczy, że mają jakieś problemy – i to pewnie istotne. Może deadline na poniedziałek? Może jakaś większa awaria. Trzeba pomóc – nigdy nie wiadomo co i kiedy się komu przydarzy.

Zgodziłem się na zaproponowaną stawkę (około 70% tego co ja powiedziałem). Po czym okazało się, że mam przyjechać do nich do biura następnego dnia na 8. Powiem szczerze – w tym momencie sobie już “plułem w brodę" – praca z dojazdem? do tuningu Postgresa? za 70% standardowej stawki? No ale cóż. Już powiedziałem, że się zgadzam, firma spora, więc może to u nich standard, że trzeba przyjechać, bo np. dostęp z zewnątrz niemożliwy.

OK. Pojechałem. Pracowałem w ustalonym wymiarze, po czym zostałem poproszony czy mógłbym jeszcze zostać dłużej – nie mogłem.

I tu by zasadniczo się sprawa skończyła, gdyby nie prosty fakt.

17 sierpnia (w poniedziałek po tej sobocie) wystawiłem im fakturę i wysłałem. Na ustaloną wcześniej i potwierdzoną kwotę.

Ponieważ płatności mogą być np. robione hurtem na początku miesiąca, nie sprawdzałem czy przyszły za często, ale 4 września (prawie 3 tygodnie później), napisałem z pytaniem kiedy mogę się spodziewać przelewu.

Dostałem odpowiedź:

Spodziewałem się, że już ma Pan odpowiednią kwotę na koncie.
W poniedziałek sprawdzę w księgowości (dzisiaj przeprowadza się biuro).

I od tej pory cisza.

Od tamtej pory napisałem jeszcze dwukrotnie (9 i 12) września, i cisza. brak odpowiedzi, brak “już płacimy" czy “zapłacimy za miesiąc" czy “mamy cię w …, odwal się".

Czemu o tym piszę? Jako przestrogę dla innych. Z tego co się dowiedziałem tą bazą zajmuje się dalej znajoma firma – mam nadzieję, że im zapłacą. A jak nie – to pewnie będą szukać kolejnego “łosia".

AKTUALIZACJA

Przelew wpłynął. 22 września. wystarczyło 5 tygodni. i post na blogu 😉

Getting random interfacelift wallpaper

Just thought I'll share it – maybe somebody else will use it.

I'm using KDE 3.5, so the final “dcop …" command, simply sets the file as current wallpaper.

I also use 1680×1050 resolution – which you can probably guess from the code 🙂

#!/usr/bin/perl -w
use strict;
use English qw( -no_match_vars );
use WWW::Mechanize;
 
my $agent = WWW::Mechanize->new();
 
$agent->get("http://interfacelift.com/wallpaper_beta/downloads/random/widescreen/1680x1050/");
exit unless 200 == $agent->res->code;
 
my @links = $agent->find_all_links(
    'url_regex' => qr{1680x1050.jpg},
);
exit if 0 == scalar @links;
 
$agent->get( $links[ rand @links ] );
exit unless 200 == $agent->res->code;
 
my $username = getpwuid( $REAL_USER_ID );
my $filename = '/tmp/interfacelift.' . $username . '.jpg';
 
open my $fh, '>', $filename or exit;
binmode $fh;
print $fh $agent->res->decoded_content;
close $fh;
 
$ENV{"DISPLAY"} = ':0';
system( qw( /usr/bin/dcop kdesktop KBackgroundIface setWallpaper ), $filename, 4 );
 
exit;

Pretty simplistic, but it does the job. Now, I add this line to my crontab:

*/5  * * * * /home/depesz/bin/interfacelift.pl

And enjoy new, nice wallpaper every 5 minutes 🙂