Thread Max. Anzahl tables in MySQL (21 answers)
Opened by kristian at 2007-08-29 12:24

bloonix
 2007-08-31 20:30
#98944 #98944
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
sid burn+2007-08-31 16:22:52--
Die Datenbank soll sicherstellen das die Daten wirklich auf der festplatte liegen? Wie soll es das tun? Dann müssten MySQL, PostgreSQL etc. ja IDE,SCSI,... Treiber in den Datenbanken integrieren damit soetwas möglich ist.

Das OS Regelt ob Dateien direkt geschrieben werden oder nicht. und wenn du eine Partition mit "sync" mountest dann heißt es nicht das nach jeder Operation gesynct wird. Sondern das das OS Synchrone Schreibzugriffe macht, anstatt default asynchrone.

Das heißt das OS meldet erst dann der DB ein "ok" zurück wenn das OS von sich aus gesehen die Daten auch auf die festplatte geschrieben hat...

Genau das alles möchte man doch eigentlich garnicht.

Um so mehr Caches es gibt, um so höher ist die Chance,
dass es bei einem Absturz inkonsistente Daten gibt.
Die meisten professionellen Datenbanken haben ihren
eigenen Cache in dem die Datenbankblöcke gecached
werden, selbst MySQL unterstützt dieses "Feature" mittler-
weile mit InnoDB.

Szenario:

Eine Transaktion wird commitet und die Datenbank möchte die
"Dirty Blocks" aus dem eigenen Cache auf die Platte schreiben.
Die Daten wandern dann zunächst einmal in den Filesystemcache.
Dort werden die "Dirty Blocks" wiederrum in bestimmten Intervallen
auf die Platte geschrieben, aber die "Dirty Blocks" landen dann
wiederrum erstmal im Schreibcache der Festplatte. Die Datenbank
erhält aber schonmal ein ACK und schreibt die Transaktion als commited
in die Transaktionslogs. Wenn nun in diesem Moment der Server
crashed, sind die Daten weg bzw die Daten sind inkonsistent,
weil die Daten gegebenfalls noch nicht aus dem Festplattencache
auf die Platte geschrieben wurden oder nur teilweise. Um das zu
verhindern, kann man zum einem Raw Devices verwenden,
um den Filesystemcache zu umgehen. Zusätzlich muss sichergestellt
werden, dass die Daten im Festplattencache auf jedem Fall auch
physikalisch auf der Platte landen wie zum Beispiel mit Raid Controllern
und einer BBU. Erst dann darf die Datenbank die Transaktion als
commitet in die Transaktionslogs notieren, um dann bei einem Crash
gegebenfalls ein Recovery durchzuführen.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Max. Anzahl tables in MySQL