ugrás a tartalomhoz

Mi az a "felülírás" phpmyadminban?

stan · 2012. Szep. 2. (V), 19.55
Van egy problémám. Van ismerősömnek egy weboldala, amit én kezelek. Ez egy fórum, amihez évek óta nem lett nyúlva. Időközben megtalálta egy csomó robot, aminek sikerült teleírni rengeteg reklámmal. Ennek az lett az eredménye, hogy az utóbbi két évben több tízezer spam bejegyzést kapott a fórum, így betellett az adatbázis kvóta, ami 100 Mb. Erről kaptam egy értesítést a tárhelyszolgáltatótól, és amelyben az állt, hogy túlléptem a kvótát, és 72 órám van, hogy letöröljek annyi adatot, hogy megint 100 Mb alá menjen a mysql adatbázis tartalma.

Mivel láttam, hogy több tízezer bejegyzésről van szó, ezért a weboldalon való törölgetés szóba sem jöhetett. Beléptem hát a phpmyadmin-ba, és letöröltem egy query-vel vagy 20.000 bejegyzést, és így a bejegyzések száma a két évvel ezelőtti állapotra esett vissza, amennyi biztosan elfér a 100 Mb-ban. Ezen kívül magán az oldalon letiltottam a posztolást, mert már úgy sem használja senki az oldalt. Tehát már nem is lehetett bevinni adatokat a weboldalon keresztül az adatbázisba.

Erre kaptam még egy emailt pár nappal később, hogy az adatbázisba már egyáltalán nem vihetek be adatokat, tehát most már teljesen le lett tiltva az INSERT utasítás, mert úgy vették észre, hogy még mindig 100 Mb felett van, és hogy nem tettem semmit az elmúlt 72 órában, hogy kevesebb legyen. Furcsálltam a dolgot, ezért megnéztem, hogy mi történt az adatbázissal. Hát az történt, hogy azóta valóban nem posztolt senki (mivel letiltottam), viszont ha megnézem egy tábla struktúráját, akkor megjelenik egy olyan sor az tárterületnél, amely eddig nem volt ott. Most így néz ki a statisztika az fórum üzeneteit tároló táblánál:

Adat 93 943.3 KB
Index 381.0 KB
Felülírás 91 567.4 KB
Hatályos 2 756.9 KB
Összes 94 324.3 KB

A vastagított sorok azok, amelyek még nem voltak itt eddig. És a gáz az, hogy ha törlök mondjuk 100 bejegyzést, akkor ezek a sorok növekednek, és összességében nem csökken a foglalt terület.

Megjelent egy olyan link is alatta, hogy "Tábla optimalizálása", amelyről azt olvastam, hogy ha lefuttatom, akkor a felülírás 0 Kb lesz, és újra minden a régiben lesz. De ezt meg nem engedi lefuttatni, mert azt írja ki, hogy nálam le lett tiltva ez az opció is, ameddig nem lesz 100 Mb-nál kisebb a mysql kvótám.

Mit jelent az, hogy felülírás?
Mit jelent az, hogy hatályos?
Eddig miért nem volt ott?
Azért jelent meg, mert phpmyadminból töröltem 20.000 bejegyzést?
Miért növekednek ezek az értékek amikor törlök tartalmakat?
Hogyan lehet ezeket eltüntetni?
Ha az optimalizálás megoldaná, de jelenleg nem engedi a szolgáltató, akkor hogyan oldjam fel ezt a paradoxont?
 
1

Kereső

Hidvégi Gábor · 2012. Szep. 2. (V), 20.32
optimize table
A MySQL kézikönyvből:
OPTIMIZE TABLE should be used if you have deleted a large part of a table or if you have made many changes to a table with variable-length rows (tables that have VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted rows are maintained in a linked list and subsequent INSERT operations reuse old row positions. You can use OPTIMIZE TABLE to reclaim the unused space and to defragment the data file. After extensive changes to a table, this statement may also improve performance of statements that use the table, sometimes significantly.

Talán úgy lehetne optimalizálni, ha 100 mega alá viszed az adatbázisok tartalmát, pl. kiexportálod, majd ideiglenesen törlöd a nagy táblákat, aztán visszatöltöd őket.
2

100 mega export

Pepita · 2012. Szep. 2. (V), 22.49
Remélem, az előzőleg törölt rekordok nem kerülnek be az exportba (nem írta ki, hogy utána egy SELECT-re mit lát). Az elég nagy szívás lenne...
3

megoldottam

stan · 2012. Szep. 5. (Sze), 15.03
Megoldottam a javasolt módon: kiexportáltam a kritikusan nagy táblákat, majd letöröltem őket tábla szinten (tehát nem csak a tartalmát, hanem magát a táblát is töröltem). Miután feloldották a korlátozást, már vissza tudtam tölteni, és a felülírások eltűntek.