placebo: MEMORY Engine

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?

  1. 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

    --
    -------------------
    "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
    1. 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.

      1. 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

        --
        -------------------
        Death is nature's way of telling you to slow down.
        1. 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

          1. 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