Tutoriale Linux, Tutoriale Programare, Tutoriale retele, tutoriale photoshop

SQL-Optimizarea tabelelor
Cand aveti un site mare care lucreaza intens cu baze de date se intampla ca la un moment dat sa va mearga din ce in ce mai greu, query-urile sa necesite mai mult timp. Cand se creaza inregistrari intr-un tabel din baza de date se aloca un spatiu pentru informatia stocata. Cand se sterg inregistrarile raman spatii libere, zone in baza de date care sunt ocupate de “nimic”, care nu sunt folositoare. Ca sa fie mai usor de inteles, se poate face comparatie cu fragmentarea discurilor. Ceva asemanator se intampla si aici. Ramane informatia “rasfirata” pe disc rezultand o baza de date nejustificat de mare. Numele dat acelui spatiu e “Overhead” - spatiu depasit. In phpMyAdmin puteti vedea asta cand deschideti o baza de date. Un exemplu aveti mai jos:
http://i32.tinypic.com/28a14ki.jpg
Exemplul e destul de “anemic”. Cum imi optimizez tot timpul tabelele am gasit doar un overhead de 20B :D

OK, am inteles ca asta e o problema. In timp se mareste baza de date, creste timpul de procesare, in cazuri mai nasoale (baze de date mari) se poate intampla sa clacheze serverul si sa corupa unele fisiere. Intrebarea cea mare: “Cum rezolvam problema ?”. MySQL (de fapt, majoritatea serverelor web) suporta instructiunea OPTIMIZE care nu face altceva decat sa elimine overheadul din tabele. Instructiunea se foloseste in felul urmator:

Cod:

OPTIMIZE TABLE `tabel`

Bun. Acum stiti ce aveti de facut ca sa va pastrati o baza de date cu tabele optimizate. Problema e ca la site-urile cu trafic mare si query-uri multe apare overhead mare si destul de rapid. Asta inseamna ca o data la cateva zile ar trebui sa va faceti timp pentru optimizare sau… daca sunteti mai lenesi (cum e, de exemplu, autorul acestui articol) faceti un script care sa faca toata treaba. Scriptul arata cam asa:

Cod:

<?php
        $link = mysql_connect(‘localhost’,‘user’,‘parola’) or die();
        mysql_select_db(‘database’) or die();
       
        $result = mysql_query(‘SHOW TABLES;’,$link);
        while($row = mysql_fetch_array($result,MYSQL_NUM) )
                @mysql_query(‘OPTIMIZE TABLE `’.$row[0].‘`;’,$link);
        echo “Optimization finished”;
?>

Ce face scriptul ? Face o lista cu toate tabelele iar apoi le optimizeaza pe rand. Optional se pot face filtre sa se optimizeze doar unele tabele. Eu am pus script-ul in cron si ruleaza zilnic la o ora la care traficul e mic, deci tabelele sunt tot timpul in forma maxima :D
Sper sa gasiti scriptul util. Daca aveti intrebari le puteti pune aici.
Autor: Agkelos

Ethical hacking and programming community