On Thu, 2 Dec 2004, Elena Lazar wrote:

> salut, am un server dell, dual xeon la 2.8 Ghz, cu 2 GB de ram si hdd-s
> scsi care logheaza trafic la clienti in genul unui web trafic monitor.

        Extraordinar. Sa-ti traiasca. L-ai udat?

> 1. apar tabele corupte din cand in cand. filesystem e ok, nu sunt
> bad-uri pe disk. coruperea tabelelor se pare ca apare in momente de high
> load. cum serverul de mysql este singurul care interactioneaza efectiv cu
> tabelele, nu inteleg ceva: in mod logic, nu ar trebui sa nu se intample
> asta? e vreo problema cu mysql-ul in general sub high load sau cum?
> inteleg sa mearga mai greu, dar de ce sa se ajunga la tabele corupte?

        E posibil ca in conditii de incarcare mare anumite instante ale 
serverului de mysql sa inceapa o scriere si sa n-o mai termine (iau 
kill, apar intre timp semafoare care le dau peste ochi, etc) sau s-o 
termine aiurea. Se mai poate intimpla si ca acele instante sa fie 
terminate de kernel.

> dura si un sfer de ora pana se opreste, timp in care upload-ul urca la
> nivele "astonomice": am vazut si:
>
>       Load Avg 1023: 1 Times(s)
>
> in timpul cat "moare" httpd-ul, nu mai pot face nimic, evident, decat sa
> ma rog sa moara mai repede.

        La ce vaca de masina ai load 1023 e mai mult decit extraordinar 
de foarte enorm. Vezi ca ceva ii rupe memoria probabil si/sau hdd-urile 
din cauza vreo unui buffer nejustificat de mic. Asta determina de obicei 
intrarea in swap, inmultirea instantelor serverului mysql care incearca 
sa scrie/citeasca, creste iowait-ul, scade idle-ul pe cpu, se umple 
ram-ul si... bum.

> ce cauzeaza acest comportament? am zeci daca nu chiar sute de scripturi in
> php, dezvoltate de diferiti, daca le-as fi scris eu macar stiam unde sa ma
> uit :-)

        Probabil acest comportament este cauzat de o situatie 
asemanatoare celei descrisa de mine in paragraful anterior. Cum se poate 
ajunge aici:
        1. tunning prost sau necorelat cu dimensiunile tabelelor pe care 
le ai;
        2. indecsi creati aiurea pe tabele (fie nejustificat fie 
cimpurile pentru care s-au creat indecsi au fost alesi gresit);
        3. tranzactii proiectate prost. De obicei aici intra categoria 
de tranzactii care necesita o prelucrare (ce dureaza) a datelor citite 
intr-un query sau pe baza datelor citite se asteapta un input de la un 
utilizator, alta aplicatie, etc.
        Tranzactiile proiectate prost duc la urmatoarele, aproximativ in 
ordine:
        - cresterea numarului instantelor serverului de baze de date ca 
urmare a cresterii semafoarelor/locking-urilor pentru citiri, scrieri, 
both;
        - cresterea iowait-ului;
        - cresterea gradului de ocupare a memoriei -> swap ocupat;
        - poac.

> CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
>            total   43.2%    0.0%   13.6%   0.0%     2.4%  208.0%  131.2%
>
> cum poate sa fie iowait 208%?! cum poate fi mai mar de 100%? ce sa inteleg
> de aici? (serverul are activat hyperthreading, os-ul vede 4 cpu-uri).

        Cind rulezi top apasa tasta "1". Vei vedea cam cum arata 
parametrul iowait pentru fiecare din cele 4 (2*xeon cu HT = 4) cpu-uri 
virtuale. Ce vezi matale acolo este suma si ar trebui sa ajungi pina la 
400% (e o suma de procente).

> de dba la mysql sunt la inceput si din pacate nu avem un om aici care sa
> fie expert in asa ceva.

        Analizeaza:
        1. structura tabelelor si indecsii pe ele;
        2. query-urile care se termina cel mai greu;
        Dupa ce vei avea niste date:
        3. indecsii care trebuiesc eliminati si noi indecsi ce trebuiesc 
creati;
        4. modul de ajustare al query-urilor astfel incit:
                a. sa fie mai "slim" in cazul lucrului cu join-uri de
                multimi mari;
                b. sa foloseasca pe cit posibil indecsii si sa nu faca
                interogari secventiale;
        5. cum vei putea eventual "sparge" tabelele pe care le ai acum 
astfel incit ocuparea cpu-ului/memoriei/resurselor HDD sa fie minima;
        6. ce valori trebuie sa aiba parametrii pentru cache la 
query-uri, buffere sortari si join-uri, etc.

        MySQL 4 ar trebui sa fie ok pentru servere cu incarcare 
medie->mare. Cel putin la mine dureaza mai mult un du -shx pe directorul 
cu tabele decit un query :)

-- 
Any views or opinions presented within this e-mail are solely those of
the author and do not necessarily represent those of any company, unless
otherwise expressly stated.

--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui