Interessantes zur Serverpflege für die Administratoren

brest

BANNED
Registriert
24. Oktober 2002
Beiträge
703
Hallo, hier ist weider Brest mit einen kleinen Informationsservice...
Als (momentan) ständiges Mitglied dieser (etwas schrägen) Community fühle ich mich verpflichtet, euch zur Seite bei euern Problem zu stehen....

Es geht darum, die Datenbank zu optimieren, damit das Server-Problem behoben wird (oh nein, nicht schon wieder!!!):rolleyes:

Also als erstes will ich mal einige kurze Anmerkungen machen:
Seit der Version 3.23 wurde der Typ MyISAM in MySQL eingeführt, davor war es nur ISAM...diese Art von Tabellentyp macht MySQL erst schnell (MyISAM ist gemeint). Beschäftigt euch mit dem Thema MyISAM für MySQL und ihr werdet euer Problem besser verstehen.....mehr will ich nicht auf diesen Typ jetzt eingehen!

Eine Konvertierung zu MyISAM sähe übrigens so aus:

ALTER TABLE table_name TYPE=MYISAM;

Ach ja, Operationen in MyISAM sind atomar, was soviel bedeutet, daß jedes einzelne statement sofort ausgeführt wird und nicht mehr zurückzunehmen ist...bei einer Veränderung wird ein sog. "Lock" auf die gesamte Tabelle angelegt, was ja eigentlich auch ziemlich gut funzt....wenn es das schöne Wörtchen aber nicht gäbe!!!!:rolleyes:

Nun gut - ermitteln wir erstmal systemkritische Größen. Dat janze wird über den SQL-Befehl SHOW STATUS getätigt.....

Schaut auf folgendes Ergebnis bei der Ausgabe:

Table_locks_immediate ..... Table_locks_waited .....

Nun wägt diese beiden zahlen in Prozent auf, falls mehr als 5% warten müssen - ist da eine kritische Größe evtl. schon erreicht!!!!:p

UND GENAU HIER KÖNNTE EIN PROBLEM VORLIEGEN.....!!!!!!!:eek:

Was tun, was nun (keine Sorge, ich will net klincken putzen).....
Also erstmal erklärt: Bei geringer Last (wenig user....schreiben wenig, suchen nicht etc...) is alles korrekt!!! Das ist ja auch gewollt. Nun gut, bei größerer Last findet das Warten nicht gleichmäßig, sondern gehäuft statt, was bedeutet daß zu Spitzenzeiten die Prozessorlast nach oben schnellt und das Antwortverhalten verdammt krass einbricht - kurz: Euere nette Ausrede erscheint!:p ==>:oops:
JETZT GANZ GENAU LESEN:
Also das ganze hängt mit der Sperrung von Tabellen zusammen. Eine Tabelle kann nicht gesperrt werden, wenn darin gearbeitet wird! Alles Klar! Wenn du nun ne Abfrage hast, die relativ lange läuft, muss eine verändernde Operation warten, bis die Abfrage fertig ist (...und hier wird genau der Zähler Table_locks_waited hochgezählt). Jetzt ist die Kettenreaktion perfekt. Jetzt müssen alle NUR LESENDE ANFRAGEN warten, WEIL DIESE GOTTVERDAMMTE OPERATION NUNMAL VORRANG HAT!!!!!!!! KAPISCHE.....:p :p ;)
Jetzt kann sich innerhalb nur kürzester Zeit tausende Anfrage stapeln. Die Systembremse is perfekt! YEAH.......

...und weil ihr das ganze erstmal schlucken müsst, erzähl ich euch nen Lösungsvorschlag morgen. Ich bin müde vom vielen Lesen und testen (echt ich hab mich mit vBulletin und MySQL heut ne Weile beschäftigt) und schreiben, daß ich mir ne Mütze Schlaf verdient habe, da ich auch noch morgen rackern darf (ich hasse Kassensysteme!!!!!!!!!!!!!!)........Gute Nacht beisammen (sorry für mein scheiß deutsch....)
 
Der Nahverkehrszug von Hagen nach Bochum über Witten, Wetter und Dortmund-Kirchhörde hat leider Verspätung.
 
Original geschrieben von senf
Der Nahverkehrszug von Hagen nach Bochum über Witten, Wetter und Dortmund-Kirchhörde hat leider Verspätung.


Passagiere, die nach Wattenscheid bzw. Westenfeld wollen, werden gebeten sich an den Bahnhofsvorsteher Brest zu wenden. Danke
 
hm.. hört dem jungen nur gut zu,
wo brest recht hat hat brest recht ;)
 
PART II:

...und das mitten in der Nacht - nun gut, ich hab's ja versprochen....:) :(


Also weiter geht's....

nun gut, also LINUX schafft ung. bis zu maximal 2.500 Operationen gleichzeitig (mehr wurde noch nicht gemessen - Quelle hab ich jetzt leider net zur Hand). Ein Vergleich - Solaris kann bis zu 60.000 Operationen gleichzeitig zu spitzenzeiten ausführen.....:eek:

Bei der oben genannten Situation spielt die Systemumgebung aber keine Rolle - denn eine langsame Abfrage bei einer gleichzeitigen Anforderunge eines "Locks" bringt jedes System in Schwierigkeiten....

Die Sache bekommt ihr am besten so in den Griff, daß ihr nicht herumkommt eure Abfrage zu optimieren, wenn nämlich eine Abfrage sehr schnell laäuft und so ihr "Lock" bekommt ist die Situation ja fresh fürn Server....!!!!
Also die beiden Zahlen, die ihr oben kennegelernt habt, sind gut dazu da, die ganze Sache zu kontrollieren -Table_locks_immediate ... und Table_locks_waited ...

Jetzt kommen wir zum Lösungswort eures Problems - und zwar Löcher...eure Datenbank wird riesige Löcher haben, wie ich auf Grund eurer Situation annehmen muss, denn Löcher entstehen durch Änderung in dynamischen Tabellen (z.B. wenn die Satzlänge variabel ist...) oder wenn der neue Inhalt zum Beispiel kürzer als der alte ist. Das heißt also, wenn ich auf den Button "bearbeiten" drücke (was in diesem Forum zigmal am Tag geschieht) entstehen sog. "Löcher".
Mit einem OPTIMIZE_TABLE kann man den schon etwas entgegenwirken....
Empfehlenswert ist es auch zum Beispiel, etwaige Beiträge nicht sofort zu löschen, sondern sie erst zur Löschung zu markieren und dann bei geringer Last alle zusammen zu löschen - mit einem anschließendem OPTIMIZE_TABLE...
Hierbei wird einmal wieder deutlich, wie wir professionell mit einer Datenbank umgehen, denn bei großen Anzahl von Löschungen und Operationen benötigen wir eine ganze Anzahl an "Locks".
Es ist erheblich schneller, manuelle Locks anzufordern, dann die Operation durchzuführen und dann den Lock wieder frei zu geben.
Warnung: Während dieser Zeit werden alle Operationen aufgehalten..........STAUGEFAHR, WENN MAN EINE WEILE NIX OPTIMIERT HAT..........
Mit einer zusätzlichen LIMIT-Bedingung kann man dies aber reduzieren, wenn die Schleife durchlaufen ist......
so bin schon wieder richtig fertsch...morgen Abend der Part III des kostenlosen Info-Service

Ciao

Ach ja, Cyril kannst ja mal ein kommentar ablassen.........lieg ich mit dem Problem richtig, hab ihr das mal so getestet......?
 
lieber biest,

zwar war ich schon ewig nichtmehr hier und hab die von dir genannten probleme noch nie miterlebt aber dafür kenn ich mich ein wenig mit datenbanken aus. dein angesprochenes problem mit den "löchern" und dem sperren von tabellen ist ja stehts ein problem von großen datenbanken (oder besser gesagt größeren mysql-datenbanken). daher nun meine zwei tipps für die angebliche probleme:

nr.1: aufjedenfall auf eine andere datenbank umsteigen, mysql ist nett für kleine sachen aber für sowas riesiges wie mzee bietet ist es nichts mehr! besser oracel oder sapdb (letzteres ist mein favorite). z.b. die sapdb stopft im hintergrund, während die datenbank geschohnt wird diese angesprochene löcher. leider ist das ja auch mit gut arbeit verbunden (nix mysql_query)

nr.2: den code nach select * ... durchgehen und ändern falls vorhanden!
 
hat vbulletin den eine Klasse für sapdb ???

Ansonsten haste natürlich recht...bloß die wollen net umsteigen (so scheint's mir)...hab den auch schon vorgeschlagen, die datenbank zu wechseln, aber schaun mer mal was kommt.......
 
na eigentlich kann nur noch ne dezentralisierung oder neue hardware in frage kommen (cluster bei db's bringt ja nix)
 
u. wieso sagt hier mal nicht einer von den "bossen" was dazu?
 
Re: lieber biest,

Original geschrieben von xzerO
zwar war ich schon ewig nichtmehr hier und hab die von dir genannten probleme noch nie miterlebt aber dafür kenn ich mich ein wenig mit datenbanken aus. dein angesprochenes problem mit den "löchern" und dem sperren von tabellen ist ja stehts ein problem von großen datenbanken (oder besser gesagt größeren mysql-datenbanken). daher nun meine zwei tipps für die angebliche probleme:

nr.1: aufjedenfall auf eine andere datenbank umsteigen, mysql ist nett für kleine sachen aber für sowas riesiges wie mzee bietet ist es nichts mehr! besser oracel oder sapdb (letzteres ist mein favorite). z.b. die sapdb stopft im hintergrund, während die datenbank geschohnt wird diese angesprochene löcher. leider ist das ja auch mit gut arbeit verbunden (nix mysql_query)

nr.2: den code nach select * ... durchgehen und ändern falls vorhanden!


interessantes zur SAP DB....

...business as...

http://www.dynamic-webpages.de/04.artikel.php?artikelID=232
 
So leid es mir tut, und danke für eure Mühe, ich glaube die Mods interessieren sich nicht dafür.

Schade eigentlich, obwohl sich beide viel Mühe gegeben haben.
 
Zurück
Oben Unten