OPTIMIZE TABLE
Bestaat er een phpfunctie om te zien of er een overhead is en zoja welke functie is het en hoe kan ik hem best gebruiken.
Ik zoek namelijk een script dat als er overhead is deze door middel van de sqlfunctie
OPTIMIZE TABLE bezoekers
te optimaliseren
dank!
mysql_query("OPTIMIZE TABLE `tabelnaam`");
maar de vraag was of er een functie bestaat om te zien of er een overhead is in die tabel
Wat is de functie overhead eigenlijk,, ik kijk er nooit naar :$
het is als je in je tabel veel rijen verwijderd dan ontstaat er een niet gebruikte plaats die wel geheugen inpakt --> overhead
dan moet je gewoon optimiza table pakken en dan is deze verdwenen
je tabel zal normaal dus ook sneller werken
Gewijzigd op 19/07/2004 18:29:00 door de VeeWee
Als het er niet is zal er nix gebeuren, dus je kan die gewo0n uitvoeren ...
toch nog 1 extra vraagje:
geeft sql dan geen fout weer ofzo?
Geen idee eigenlijk :$
Quote:
overhead is geen functie sulfer
Wist effe geen ander woord te vinden :P
heb het net toegepast maar dan wel zonder die(mysql_error());
ik zie op het eerste zicht geen problemen, ik zal wel binnen vijf dagen zien of er een overhead is...
bedankt allemaal
Als PHPMyAdmin kan zien dat er een overhead is, dan kan jij dat ook. Zit dat niet in de SHOW STATUS query o.i.d.? Dan krijg je een waarde, is die niet gelijk aan 0, dan die je de OPTIMIZE TABLE query...
Elwin
waar je wel op moet letten is dat als er word geschreven naar de database dat de data corrupt kan raken
als je optimize table wil gebruiken doe dat dan op een moment dat er niemand online is en lock de tables van te voren
anders is het gewoon zelfmoord voor de database
aan rick:
Quote:
waar je wel op moet letten is dat als er word geschreven naar de database dat de data corrupt kan raken
als je optimize table wil gebruiken doe dat dan op een moment dat er niemand online is en lock de tables van te voren
anders is het gewoon zelfmoord voor de database
als je optimize table wil gebruiken doe dat dan op een moment dat er niemand online is en lock de tables van te voren
anders is het gewoon zelfmoord voor de database
sorry, dit is chinees voor mij...
maar hoe kan die informatie dan corrupt worden, het is gewoon een ip adres en id nummer en een aanwezig veld...µ
Ik heb het nu gewoon op het einde van mijn pagina gezet dus het word altijd uitgevoerd maar je zei je moet het doen als er niemand online is
maar er kan tijdens het uitvoeren toch altijd iemand on komen??
bedankt voor de reacties ;)
Want als er iemand op je website komt die allemaal dingen doet die met de database tabellen te maken hebben, is er de kans dat er iets mis gaat (blijft klein maar is er wel) dat je tabellen 'fucked op' raken, aka 'corrupt' :)
Wat Elwin bedoelt, is dat wanneer je in PHPmyAdmin bent, dat je kunt zien hoeveel 'overhead' er zit op je tabel.. PHPmyAdmin is ook gewoon met PHP geschreven en voert ook een query uit om te kijken of een tabel overhead heeft of niet.. Dus wat Elwin dan beweert, is dat wanneer phpmyadmin het kan, dat jij het ook kunt, dmv een MySQL query..
Toevallig weet ik ook hoe je dit doet:
De kolom: 'Data_free' die je terug krijgt als resultaat geeft het aantal Bytes overhead aan..
Eerst was de tabel 49.9 kb en na de optimize 52.3 kb.
Lijkt mij niet direct een verbetering
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// connectie
$res = mysql_query("SHOW TABLE STATUS LIKE 'bezoekers'");//om te testen: or die(mysql_error());
$row = mysql_fetch_array($res);
if ($row['Data_free'] > 0){
$optimize = mysql_query("OPTIMIZE TABLE `bezoekers`");//om te testen: or die(mysql_error());
if ($optimize){
print ("Er is een overhead van {$row['Data_free']} gedelete");
} else {
print ("Er is een error");
}
} else {
print ("Er is geen overhead");
}
?>
// connectie
$res = mysql_query("SHOW TABLE STATUS LIKE 'bezoekers'");//om te testen: or die(mysql_error());
$row = mysql_fetch_array($res);
if ($row['Data_free'] > 0){
$optimize = mysql_query("OPTIMIZE TABLE `bezoekers`");//om te testen: or die(mysql_error());
if ($optimize){
print ("Er is een overhead van {$row['Data_free']} gedelete");
} else {
print ("Er is een error");
}
} else {
print ("Er is geen overhead");
}
?>
sickness: volgens mij heb je dan toch iet verkeerd gedaan of opeens veel rijen laten deleten hoor :p
Die code kun je uitvoeren zonder problemen ja :) Ik zou het gewoon testne.. denk dat het wel werkt, erg nice trouwens :) netjes gecode.. misschien ook leuk om dit scriptje te posten straks onder scripts..
bedankt iedereen
het kan zijn dat alleen de rij beschadigd is maar het kan ook zijn dat de hele tabel beschadigd (data komt door het opschuiven op een andere plaats te staan dan het eerst stond)
mysql is een leuke server maar heeft wat dit soort dingen betreft nog wel wat te leren van databases zoals oracle
iig zou ik optimize table NOOIT gebruiken op een tabel die actief gebruikt word op dat moment
Anders gewoon eerst even de tabel locken - dan optimizen.
je bent imho gek als je gaat optimizen bij een tabel waar mee gewerkt word (die dus ook niet gelockt is)