MySQL 5.7 oder 8 absolute Minimum RAM-Konfiguration?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Edward11
User
Beiträge: 1
Registriert: Samstag 28. Dezember 2019, 09:43

Diese Frage kommt ziemlich oft, und die Antwort darauf ist dieselbe und das ist verständlich.

Hängt von der Arbeitsbelastung ab.

Aber lassen Sie uns sagen, Leistung ist nicht das Ziel. Das Ziel ist es, Mysql so wenig RAM wie möglich zu nehmen.

Zu verstehen, wie MySQL funktioniert, ist nicht so einfach und erfordert viel Erfahrung.

Ich hätte gerne eine MySQL-Konfiguration, die nicht im RAM "expandiert".

Zum Beispiel kann das minimale Setup von Nginx + PHP-FPM + Laravel innerhalb von 20 MB RAM für jede Anforderung ausgeführt werden. Wenn wir dieses Setup plötzlich um mysql erweitern, brauche ich zusätzliche ~ 100MB.

Ist es möglich, mysql anzuweisen, für jede Abfrage immer Festplatten-E / A zu verwenden, und auf diese Weise den RAM zu schonen?
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Edward11: Was soll das bringen? RAM ist nicht dazu da geschont zu werden, sondern um benutzt zu werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

https://dev.mysql.com/doc/refman/8.0/en/memory-use.html verrät alles was du wissen musst. Du solltest natürlich nicht den Empfehlungen folgen. 100MB dürfte allerdings schon sehr nah an der unteren Grenze sein.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bei Datenbanken gilt ja immer noch: viel (RAM) hilft viel.

Wenn du aus welchen Gründen auch immer RAM sparen musst -> nimm' eine DB die per se weniger RAM benutzt.

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

MySQL (und Postgres) sind schon dafür gedacht wenig RAM zu benutzen oder zumindest dafür dass der Großteil der Daten auf der Festplatte liegt. Ich denke nicht dass man beim wechseln sich da viel ersparen kann. Im Gegenteil alles was neuer ist, wird tendenziell eher dafür gedacht sein auf Systemen zu laufen wo man (fast) die ganze Datenbank im RAM halten kann.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hängt vielleicht teilweise mit der Frage zusammen: Ich lese immer wieder, dass man versucht eine ganze DB im RAM zu halten. Aber warum?
Kann das DBMS nicht intelligent entscheiden, welche Daten oder Indexe in den Cache müssen, weil nur die bestimmt abgefragt werden?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Wenn die Datenbank komplett im RAM ist, braucht keine Instanz irgend etwas zu entscheiden. Schneller als dort kann der Zugriff auf eine große Menge an Daten nicht sein.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Kann das DBMS nicht intelligent entscheiden, welche Daten oder Indexe in den Cache müssen, weil nur die bestimmt abgefragt werden?
Das hat ja auch nur bedingt was mit "intelligent", sondern eher mit Wahrscheinlichkeiten und Spekulation. Grundsätzlich muss man ja davon ausgehen, dass alle Daten aus der Datenbank angefragt werden könnten. Sonst bräuchte man die nicht in der DB ;-)

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Kann das DBMS nicht intelligent entscheiden, welche Daten oder Indexe in den Cache müssen, weil nur die bestimmt abgefragt werden?
Jein. Ein DBMS kann schon versuchen intelligent zu entscheiden wann, welche Daten gelesen und geschrieben werden und was im RAM gehalten wird. Das ist allerdings ein sehr komplexes Thema und nicht alle Datenbanken sind da sonderlich gut drin. Das Betriebssystem macht sowas von sich aus auch schon und einige Datenbanken verlassen sich einfach darauf, obwohl die Datenbank dies in der Theorie besser könnte als das Betriebssystem. (Wenn man nach databases und mmap sucht findet man einige Diskussionen zu dem Thema). Diese Entscheidungen zu fällen kostet natürlich auch Zeit.

Außerdem ist es immer möglich dass einzelne Queries oder mehrere parallel laufende Queries zusammen die Verarbeitung von mehr Daten erfordern als in den RAM passt. Ab dem Punkt zahlst du dann den Preis dafür dass du auf Storage zugreifen musst der langsamer als RAM ist.

Darüberhinaus kommt aber noch ein anderes Problem hinzu: Allein die Möglichkeit dass Daten nicht im RAM liegen könnten, zwingt dich zur Indirektion da du keinen gewöhnlichen Pointer auf Daten die nicht im RAM liegen haben kannst. Diese Indirektion wirkt sich erheblich auf die Performance aus. Deswegen hast du dann, wie schon angesprochen, moderne Datenbanken wie SAP HANA die einfach alles im RAM halten und Bedarf für immer größere EC2 Instanzen schaffen.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Und deswegen entscheidet man sich einfach die komplette DB in dem RAM zu drücken? Wie ist das denn bei DB die mehrere TB groß sind?

Muss man die DB aktiv in den RAM schieben oder passiert das vom DBMS automatisch?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es heißt ja nirgends muss. Nur wenn möglich. Natürlich kannst du immer mehr Daten haben als RAM. Du kannst auch immer mehr Daten haben was eine Platte. Und dann? Heißt es dann alle Hoffnung fahren lassen?

Wie DasIch ja schon sagte gibt’s DBs die das grundsätzlich machen. Andere wird man konfigurieren können.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

naheliegend hat geschrieben: Samstag 26. März 2022, 18:58 Und deswegen entscheidet man sich einfach die komplette DB in dem RAM zu drücken? Wie ist das denn bei DB die mehrere TB groß sind?
Wenn es für die Anwendung sinnvoll ist.
AWS hat geschrieben: EC2 High Memory instances offer 3, 6, 9, 12, 18, and 24 TiB of memory in an instance.
Also ein paar TB sind noch kein Problem.
Muss man die DB aktiv in den RAM schieben oder passiert das vom DBMS automatisch?
Das passiert automatisch wie bei Redis oder Memcached auch. Die Festplatte nutzt man, wenn überhaupt, für WAL und Backups, damit man bei einem Neustart keine Daten verliert.

Das ist natürlich nur etwas was man macht wenn man größtmögliche Performance braucht und man dies auch bezahlen kann, wirklich bezahlbar ist sowas auch erst in den letzten ~10 Jahren geworden. Gerade für analytische Anwendungen gibt es auch Systeme die deutlich langsamer und günstiger sind wie Apache Hive oder Delta Lake um auf Daten zuzugreifen die noch im S3 Bucket liegen und die du lokal überhaupt gar nicht hast.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten