Trebuie să defragmentez baza de date mysql?

Faptul este că în tabelele care sunt utilizate pentru nevoile motorului, datele se schimbă constant. Și mesele, dacă nu sunt optimizate, vor funcționa puțin mai încet. Dacă site-ul pe care îl aveți este mic, atunci, probabil, nu veți observa diferența. Și dacă încărcătura este ridicată? Am întâlnit cumva faptul că clienții mei aveau probleme cu furnizorul - site-ul a fost prea ocupat cu MySQL. Sa dovedit că pentru rezultatele unei pagini (acesta a fost un magazin online OS Commerce) au generat mai mult de 120 de solicitări. În unele cazuri, chiar mai mult de 200 de tone. Și din moment ce au fost mulți vizitatori (proiectul de lege a fost mii), baza de date nu a reușit să facă față. A trebuit să optimizez codul, deși nu era ușor.







Puteți concluziona că trebuie să defragmentați tabelele (cum ar fi codul PHP, desigur :)).

Acum, despre ce tabele trebuie să optimizați. Mai întâi, tipul trebuie să fie MyISAM sau BDB. În al doilea rând, printre câmpuri trebuie să existe tipuri VARCHAR, BLOB sau TEXT. După cum am înțeles, în alte cazuri, nu este necesară optimizarea.







Echipa de optimizare este simplă:

OPTIMIZAȚI TABELUL tbl_name

Este o opțiune nepoliticoasă să treci prin toate mesele existente. MySQL defragmentează tabelele. Dar trebuie să aveți grijă ca în timpul optimizării masa să fie blocată. Ce înseamnă asta, nu știu exact, trebuie să-mi dau seama. Deoarece procesul durează o secundă secundară, probabilitatea ca utilizatorii să observe ceva este mică.

Cum știu dacă este necesară optimizarea? Cine a lucrat cu myphpadmin, știți că puteți vedea o mulțime de informații despre masă. Nu este dificil să faci singur. Există o astfel de comandă SHOW STATUS TABLE. În ieșire, căutați Data_free, care este numărul dorit. Dacă este mai mare de 0, atunci este necesară optimizarea. Aceasta, după cum se spune, este mai subtilă.

Cod de probă pentru a determina dacă este necesară optimizarea:

if ($ data_info = get_rows ( 'SHOW TABEL STATUS')) foreach ($ data_info ca $ di) if ($ di [ 'Data_free']> 0) $ TMP1. = 'Optimizare masă'. $ di [ 'Name'] . "

„;
> pentru di
>

dacă (! gol ($ tmp1)) $ TPL_main. = $ tmp1. "optimiza (în acest moment mesele sunt blocate, vizitatorii pot avea probleme)
„;

La funcția mea get_rows ia de la un DB datele și locurile într-un matrice.

De exemplu, SHOW STATUS TABLE returnează informații despre toate tabelele bazei de date.

În cod, nu am verificat tabelele MYISAM, dar acum, de regulă, ele sunt folosite pentru găzduire.







Articole similare

Trimiteți-le prietenilor: