MEMORY Engine
placebo
- datenbank
Hi
ich beschäftige mich seit einiger Zeit mit Datenbankoptimierung.
Meine Frage bezieht sich auf die MEMORY-Engine von mySQL:
http://dev.mysql.com/doc/refman/5.1/de/memory-storage-engine.html
Nun würde ich gern wissen, ob sich die Tabelle wirklich im Arbeitsspeicher befindet, oder ob sie schon auf die Festplatte "geswapped" wird.
Wie könnte man soetwas herausbekommen?
Hello,
Nun würde ich gern wissen, ob sich die Tabelle wirklich im Arbeitsspeicher befindet, oder ob sie schon auf die Festplatte "geswapped" wird.
Wie könnte man soetwas herausbekommen?
ich würde sagen, indem man das Handbuch liest: Dort steht explizit geschrieben, "Wie der Name schon sagt, werden MEMORY-Tabellen im Arbeitsspeicher gespeichert " [...] "gehen alle in MEMORY-Tabellen gespeicherten Daten verloren. Die Tabellen selbst bestehen weiter, da ihre Definitionen in .frm-Dateien auf der Festplatte gespeichert sind, doch ihre Daten sind fort, wenn der Server wieder hochfährt."
Man benutzt diese Tabellen für temporäre Daten. Vorteil: schnell, da alles im Speicher. Nachteil: Keinerlei Persistenz.
MfG
Rouven
Bevor du das Handbuch liest, solltest du meinen Beitrag auch richtig gelesen haben.
Meine Frage ist: Wie kann ich prüfen, ob die Tabelle sich wirklich im Arbeitsspeicher befindet oder wegen Überhang geswapped wird.
Hello,
Meine Frage ist: Wie kann ich prüfen, ob die Tabelle sich wirklich im Arbeitsspeicher befindet oder wegen Überhang geswapped wird.
Sorry, verlesen.
Ähm, meines Wissens gar nicht, weil dieses Wissen für das DBMS und dein Skript in erster Linie irrelevant sein dürfte. Um das Swapping kümmert sich das Betriebssystem, einzige Anlaufstelle für die Information könnte also dort sein. Dazu müsstest du allerdings die Windows-API oder die deines verwendeten Betriebssystems auseinander nehmen und im nächsten Schritt danach suchen, wie du dran kommst. Wenn es dir lediglich um die manuelle Abfrage geht, könnten dir entsprechende Analysetools weiterhelfen, vielleicht erkennst du, ob Teile des DBMS geswapped sind.
Was ich mir aber auch vorstellen könnte ist, dass die Tabelle sich sowohl im Hauptspeicher als auch im Swapfile findet.
MfG
Rouven
Hi,
Meine Frage ist: Wie kann ich prüfen, ob die Tabelle sich wirklich im Arbeitsspeicher befindet oder wegen Überhang geswapped wird.
Sorry, verlesen.
Ähm, meines Wissens gar nicht, weil dieses Wissen für das DBMS und dein Skript in erster Linie irrelevant sein dürfte. Um das Swapping kümmert sich das Betriebssystem, einzige Anlaufstelle für die Information könnte also dort sein. Dazu müsstest du allerdings die Windows-API oder die deines verwendeten Betriebssystems auseinander nehmen und im nächsten Schritt danach suchen, wie du dran kommst. Wenn es dir lediglich um die manuelle Abfrage geht, könnten dir entsprechende Analysetools weiterhelfen, vielleicht erkennst du, ob Teile des DBMS geswapped sind.
Was ich mir aber auch vorstellen könnte ist, dass die Tabelle sich sowohl im Hauptspeicher als auch im Swapfile findet.
generell:
Man prüft das doch sicher nicht zur Laufzeit.
Du prüfst das einmal mit einer bestehenden Hardware (Befehl: top), ob die Maschine überhaupt großartig swapt. Danach sollte man das der Maschine überlassen, zumindest Linux macht das sehr effizient.
Bei kleinen Tabellen ist alles sowieso egal und Du mußt den Heap ja auch angeben. Bei großen Datenmengen sollte die Maschine auch mehr Speicher haben.
Ob aber eine Heap-Tabelle wirklich immer schneller ist, ist die Frage.
Bestimmte Dinge (Blobs, Text) funktionieren nicht und schmiert die Maschine ab, ist alles weg.
Richtig schnell wird ein System erst mit sehr viel RAM und wenn man z.B. bei Datenstrukturen diese im RAMauch abwickelt und nur die Ergebnisse in die DB zurückspeichert.
Gruß
Reiner
Hallo
Du prüfst das einmal mit einer bestehenden Hardware (Befehl: top), ob die Maschine überhaupt großartig swapt. Danach sollte man das der Maschine überlassen, zumindest Linux macht das sehr effizient.
nur zur Ergänzung: Weder Linux noch Windows-NT-ähnliche Betriebssysteme verwenden Swapping. Beide verwenden On-Demand-Paging, der Name "pagefile.sys" ist daher besser gewählt als der Partitionstyp "swap" für den Paging-Bereich auf der Festplatte :-)
Freundliche Grüße
Vinzenz