Linux I/O-Modi fuer MySQL: O_DIRECT vs. Buffered I/O richtig waehlen
AI generated
$
/etc
Linux · O_DIRECT · MySQL · InnoDB
Linux I/O-Modi fuer MySQL: O_DIRECT vs. Buffered I/O richtig waehlen
Wie innodb_flush_method das Zusammenspiel mit dem Page Cache steuert

MySQL puffert Datenbankseiten bereits im InnoDB Buffer Pool im RAM. Nutzt der Linux-Kernel gleichzeitig seinen eigenen Page Cache fuer dieselben Daten, entsteht Double Buffering: derselbe Speicherinhalt liegt doppelt im Arbeitsspeicher, ohne zusaetzlichen Nutzen. O_DIRECT umgeht den Page Cache gezielt und uebergibt InnoDB die volle Kontrolle ueber das Caching, waehrend Buffered I/O in bestimmten Szenarien trotzdem die pragmatischere Wahl bleibt.

18 Min. Lesezeit innodb_flush_method · O_DIRECT · Page Cache Linux · MySQL 8 · InnoDB

1. Warum der I/O-Modus fuer InnoDB entscheidend ist

Wer sich mit MySQL-Performance auf Linux-Servern beschaeftigt, stoesst frueher oder spaeter auf eine Konfigurationszeile, die auf den ersten Blick unscheinbar wirkt, aber weitreichende Folgen fuer die Speichernutzung des gesamten Servers hat: innodb_flush_method. Diese Einstellung entscheidet, ob MySQL mit dem Linux-Kernel um Speicher konkurriert oder ob der Kernel die Speicherverwaltung vollstaendig der Datenbank ueberlaesst.

Jede Lese- und Schreiboperation, die MySQL auf die Datendateien der InnoDB-Storage-Engine ausfuehrt, laeuft ueber einen von zwei grundsaetzlichen I/O-Modi des Linux-Kernels: Buffered I/O, bei dem der Kernel jede Seite zusaetzlich im eigenen Page Cache vorhaelt, oder O_DIRECT, bei dem Daten direkt zwischen dem Anwendungsspeicher von MySQL und dem Blockgeraet uebertragen werden, ohne den Page Cache zu durchlaufen. Diese Entscheidung wird ueber den Parameter innodb_flush_method in der MySQL-Konfiguration getroffen und hat einen direkten Einfluss darauf, wie effizient der verfuegbare Arbeitsspeicher eines Datenbankservers genutzt wird.

Fuer eine Magento-Installation mit einem dedizierten Datenbankserver und einem grosszuegig dimensionierten InnoDB Buffer Pool ist diese Entscheidung keine Nebensaechlichkeit. Ein Buffer Pool von 32 GB auf einem Server mit 64 GB RAM soll die haeufig gelesenen Datenbankseiten vollstaendig im Speicher halten. Nutzt der Kernel parallel Buffered I/O, haelt er dieselben Seiten zusaetzlich im Page Cache vor, wodurch effektiv weniger freier Speicher fuer den eigentlichen Zweck zur Verfuegung steht als die Konfiguration vermuten laesst.

Der Effekt dieses doppelten Cachings wird oft erst sichtbar, wenn der Arbeitsspeicher unter Last knapp wird und der Kernel beginnt, Page-Cache-Seiten unter Druck zu verwerfen oder, schlimmer, in den Swap zu verdraengen. O_DIRECT beseitigt dieses Problem an der Wurzel, indem es dem Page Cache die Datenbankseiten komplett entzieht und die vollstaendige Cache-Verantwortung dem InnoDB Buffer Pool ueberlaesst, der ohnehin fuer genau diesen Zweck entworfen wurde.

2. Buffered I/O: der Page Cache als zweite Schicht ueber InnoDB

Um die Tragweite dieser Entscheidung einzuordnen, lohnt sich ein Blick auf die Rolle des Page Cache im Linux-Kernel im Allgemeinen, bevor die MySQL-spezifischen Auswirkungen betrachtet werden.

Ohne explizite Konfiguration nutzt der Linux-Kernel fuer alle Dateizugriffe standardmaessig Buffered I/O. Jede gelesene Seite einer Datendatei landet dabei im Page Cache, selbst wenn die Anwendung, die die Daten angefordert hat, bereits ueber einen eigenen, spezialisierten Cache verfuegt. Fuer generische Anwendungen ist dieses Verhalten sinnvoll, weil der Kernel nicht wissen kann, welche Anwendung eigene Caching-Strategien implementiert. Fuer MySQL/InnoDB mit einem gross dimensionierten Buffer Pool fuehrt es dagegen zu einer strukturellen Ineffizienz.

Das Kernproblem heisst Double Buffering: dieselbe 16-KB-InnoDB-Seite liegt einmal im InnoDB Buffer Pool und ein zweites Mal im Linux Page Cache im Arbeitsspeicher, ohne dass der zweite Cache einen zusaetzlichen Nutzen fuer die Datenbank stiftet. InnoDB verwaltet seinen eigenen Cache bereits mit einem auf Datenbankzugriffsmuster zugeschnittenen LRU-Algorithmus, der zwischen jung eingelesenen und wiederholt genutzten Seiten unterscheidet. Der Page Cache des Kernels kennt diese Unterscheidung nicht und verwaltet Seiten rein nach allgemeiner Zugriffshaeufigkeit.

In der Praxis bedeutet Buffered I/O bei MySQL zudem einen zusaetzlichen CPU- und Speicherkopieraufwand: Daten muessen vom Blockgeraet in den Page Cache und von dort noch einmal in den InnoDB Buffer Pool kopiert werden, statt direkt in den Zielspeicher zu gelangen. Bei schreibintensiven Workloads, etwa waehrend eines Magento-Reindex-Laufs mit vielen INSERT- und UPDATE-Operationen, summiert sich dieser doppelte Kopieraufwand zu einer messbaren zusaetzlichen CPU-Last.


# my.cnf — default behavior without explicit flush method
# On many distributions this historically defaulted to fsync,
# which still uses the page cache for reads (buffered I/O)
[mysqld]
innodb_flush_method = fsync
innodb_buffer_pool_size = 32G

3. O_DIRECT: Double Buffering gezielt vermeiden

O_DIRECT ist ein Flag, das beim Oeffnen einer Datei uebergeben werden kann und den Kernel anweist, den Page Cache fuer diese Datei zu umgehen. Daten werden dann direkt zwischen dem Nutzerspeicher der Anwendung, in diesem Fall dem InnoDB Buffer Pool, und dem Blockgeraet uebertragen. MySQL nutzt O_DIRECT, wenn innodb_flush_method entsprechend gesetzt ist, und uebernimmt damit die volle Verantwortung fuer das Caching der Datenbankseiten, ohne Unterstuetzung durch den Kernel-Page-Cache.

Der unmittelbare Vorteil von O_DIRECT: der gesamte fuer den Buffer Pool reservierte Speicher steht tatsaechlich fuer Datenbankseiten zur Verfuegung, ohne durch einen redundanten zweiten Cache verwaesserst zu werden. Auf einem Server mit 64 GB RAM und einem 48-GB-Buffer-Pool bleibt bei O_DIRECT tatsaechlich mehr Spielraum fuer das Betriebssystem und andere Prozesse, waehrend bei Buffered I/O derselbe Speicher teilweise doppelt fuer dieselben Daten verwendet wird.

Ein weiterer Effekt von O_DIRECT: Schreibvorgaenge werden synchroner und vorhersehbarer, weil sie nicht erst im Page Cache zwischengelagert und asynchron vom Kernel-Writeback-Mechanismus auf die Platte geschrieben werden. Fuer InnoDB, das ohnehin ein eigenes Redo-Log und eine eigene Checkpoint-Logik fuer Konsistenz und Crash Recovery mitbringt, ist diese direktere Kontrolle ueber den Zeitpunkt physischer Schreibvorgaenge in der Regel vorteilhaft, weil InnoDB selbst besser abschaetzen kann, wann ein Flush tatsaechlich noetig ist.

Fuer Read-Replicas, die primaer fuer Leselast in einem Magento-Setup mit getrennten Lese- und Schreibinstanzen genutzt werden, gilt eine aehnliche Ueberlegung: solange der Buffer Pool auch dort gross genug dimensioniert ist, um die haeufig gelesenen Katalog- und Preisdaten vollstaendig vorzuhalten, bringt O_DIRECT denselben Vorteil wie auf der Schreibinstanz. Erst bei deutlich kleineren Replica-Instanzen mit knapperem Buffer Pool relativiert sich dieser Vorteil wieder.

4. innodb_flush_method im Detail: fsync, O_DIRECT, O_DIRECT_NO_FSYNC

MySQL bietet ueber innodb_flush_method mehrere Werte an, die das Zusammenspiel mit dem Linux-I/O-Stack unterschiedlich steuern. fsync ist der klassische Standardwert: Lese- und Schreibzugriffe laufen ueber Buffered I/O, und InnoDB ruft fsync() auf, um sicherzustellen, dass Daten tatsaechlich auf die Platte geschrieben wurden, statt nur im Page Cache zu liegen. Dieser Modus ist der sicherste Kompromiss fuer generische Setups, aber nicht der effizienteste fuer dedizierte Datenbankserver.

O_DIRECT aktiviert den direkten I/O-Modus fuer Datendateien, waehrend weiterhin fsync()-Aufrufe genutzt werden, um Schreibvorgaenge zu bestaetigen. Dies ist der am haeufigsten empfohlene Wert fuer dedizierte MySQL-Server mit ausreichend grossem Buffer Pool. O_DIRECT_NO_FSYNC, seit MySQL 8.0 verfuegbar, geht noch einen Schritt weiter und verzichtet auf redundante fsync()-Aufrufe bei Dateisystemen, die bei O_DIRECT-Schreibvorgaengen bereits Konsistenz garantieren, etwa XFS unter bestimmten Bedingungen, was zusaetzliche Overhead-Reduktion ermoeglicht, aber sorgfaeltige Tests vor dem Produktiveinsatz verlangt.


# my.cnf — recommended setting for a dedicated MySQL server
[mysqld]
innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 48G
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 1

5. Wann O_DIRECT die bessere Wahl ist

Als grobe Faustregel gilt: Sobald der InnoDB Buffer Pool mehr als die Haelfte des physischen Arbeitsspeichers eines dedizierten Datenbankservers belegt, ueberwiegt der Vorteil von O_DIRECT gegenueber Buffered I/O in nahezu allen praktischen Faellen deutlich.

O_DIRECT spielt seine Staerken vor allem auf dedizierten Datenbankservern aus, bei denen ein grosser Teil des verfuegbaren RAMs bewusst dem InnoDB Buffer Pool zugewiesen wurde. Wenn der Buffer Pool bereits 60 bis 80 Prozent des physischen Arbeitsspeichers belegt, bringt ein zusaetzlicher Page Cache kaum noch einen Vorteil, sondern konkurriert direkt um denselben knappen Speicherplatz. Fuer Magento-Setups mit einer dedizierten MySQL-Instanz auf eigener Hardware oder eigener VM ist das der Regelfall, nicht die Ausnahme.

Ein weiteres Kriterium fuer O_DIRECT ist schreibintensive Last, wie sie bei haeufigen Preis- und Bestandsupdates, grossen Batch-Importen oder dem naechtlichen Reindexing typischer Magento-Kataloge entsteht. Da O_DIRECT den zusaetzlichen Kopierschritt ueber den Page Cache entfaellt, sinkt die CPU-Last pro Schreibvorgang, was sich besonders bei I/O-gebundenen Batch-Jobs in kuerzeren Laufzeiten niederschlaegt. Auf Storage mit NVMe-SSDs, die ohnehin sehr niedrige Latenzen liefern, faellt der Geschwindigkeitsvorteil des Page Cache fuer wiederholte Lesezugriffe zudem geringer aus als bei klassischen Festplatten, was O_DIRECT zusaetzlich attraktiver macht.

Auch bei virtualisierten Umgebungen mit sogenannten Thin-Provisioned-Volumes, bei denen der Hypervisor selbst zusaetzliche Caching-Schichten unterhaelt, kann sich der Effekt von O_DIRECT etwas anders darstellen als auf Bare-Metal-Hardware, da der Hypervisor unabhaengig vom Gastbetriebssystem eigene Entscheidungen ueber Caching trifft. Ein Benchmark direkt in der Zielumgebung bleibt deshalb wichtiger als eine pauschale Uebernahme von Tuning-Empfehlungen aus Bare-Metal-Setups.

6. Wann Buffered I/O sinnvoll bleibt

Diese Gegenprobe ist wichtig, damit die Umstellung auf O_DIRECT nicht zur reflexartigen Standardmassnahme wird, ohne den konkreten Anwendungsfall zu pruefen.

Trotz der Vorteile von O_DIRECT gibt es Szenarien, in denen Buffered I/O die pragmatischere Wahl bleibt. Bei kleinen MySQL-Instanzen mit einem Buffer Pool von wenigen Gigabyte auf einem Server mit deutlich mehr freiem RAM kann der Page Cache tatsaechlich zusaetzliche Lesezugriffe abfangen, etwa fuer Dateien ausserhalb des direkten InnoDB-Datenbestands oder fuer gemischte Workloads, bei denen derselbe Server auch andere Dienste bedient.

Auch bei bestimmten Netzwerk-Dateisystemen wie NFS ist O_DIRECT nicht immer zuverlaessig implementiert oder wird vom jeweiligen NFS-Server nicht vollstaendig unterstuetzt, was zu inkonsistentem Verhalten fuehren kann. In diesen Faellen ist Buffered I/O die sicherere, wenn auch weniger effiziente Option. Ebenso kann bei sehr kleinen, testweise betriebenen Umgebungen der Konfigurations- und Validierungsaufwand fuer O_DIRECT in keinem Verhaeltnis zum tatsaechlichen Performance-Gewinn stehen, wenn ohnehin ausreichend RAM fuer beide Caching-Ebenen vorhanden ist.

7. Konfiguration und Validierung unter Linux

Bevor die Aenderung im laufenden Betrieb aktiviert wird, empfiehlt sich zusaetzlich ein kurzer Blick in die MySQL-Fehlerlogs nach dem Neustart. Manche Kombinationen aus Kernel-Version, Dateisystem und Storage-Treiber quittieren eine fehlende O_DIRECT-Unterstuetzung nicht mit einem harten Fehler, sondern mit einer stillen Rueckstufung auf Buffered I/O, die sich nur ueber die Logs oder die spaetere strace-Pruefung aufdecken laesst.

Ergaenzend zur reinen Funktionsvalidierung lohnt sich ein Blick auf iostat -x 1 waehrend des Benchmarks, um zu sehen, ob sich die durchschnittliche Warteschlangentiefe (avgqu-sz) und die Latenz pro Anfrage nach der Umstellung tatsaechlich veraendern. Bleiben diese Werte nahezu unveraendert, deutet das darauf hin, dass nicht der I/O-Modus, sondern ein anderer Faktor wie die Storage-Latenz selbst der limitierende Engpass ist.

Diese praktischen Schritte gelten unabhaengig davon, ob der Server bereits produktiv laeuft oder gerade neu aufgesetzt wird.

Die Umstellung auf O_DIRECT erfolgt ueber die Konfigurationsdatei von MySQL und erfordert einen Neustart des Datenbankdienstes, da innodb_flush_method nicht zur Laufzeit aenderbar ist. Vor dem Neustart sollte sichergestellt sein, dass das verwendete Dateisystem O_DIRECT unterstuetzt, was bei ext4 und XFS auf modernen Linux-Kernen standardmaessig der Fall ist. Nach dem Neustart laesst sich das tatsaechlich genutzte Flag mit strace auf einem laufenden mysqld-Prozess verifizieren.

Zur Validierung des Effekts eignet sich ein Vergleich der Speicherbelegung mit free -h vor und nach der Umstellung, sowie ein direkter Benchmark mit sysbench unter realistischer Last. Ein sinnvoller Test misst dabei sowohl reine Lesezugriffe als auch gemischte Lese-Schreib-Workloads, da sich der Effekt von O_DIRECT je nach Zugriffsmuster unterschiedlich stark bemerkbar macht.


# Verify which I/O flag mysqld actually uses after restart
sudo strace -f -e trace=open,openat -p "$(pgrep -x mysqld)" 2>&1 | grep -i direct

# Compare page cache usage before and after switching to O_DIRECT
free -h
# 'buff/cache' should shrink noticeably for the InnoDB data files
# once double buffering through the page cache is eliminated

# Run a mixed read/write benchmark to measure the practical effect
sysbench oltp_read_write --table-size=1000000 --threads=8 \
  --mysql-db=magento --time=120 run

8. Fallstricke: Alignment, Dateisystem und falsche Erwartungen

Ein oft unterschaetzter Punkt ist der Umgang mit Tablespace-Dateien auf komprimierten oder deduplizierten Dateisystemen, etwa Btrfs mit aktivierter Kompression. O_DIRECT und transparente Dateisystem-Kompression vertragen sich nicht immer reibungslos, da die Kompression zusaetzliche Verarbeitungsschritte einfuehrt, die dem Konzept des direkten, unveraenderten Datentransfers widersprechen. Fuer produktive MySQL-Server empfiehlt sich deshalb in aller Regel ein unkomprimiertes ext4- oder XFS-Dateisystem fuer die InnoDB-Datendateien.

Ein haeufiger Fehler beim Umstieg auf O_DIRECT: Erwartungen an einen dramatischen Performance-Sprung, der in dieser Form selten eintritt. O_DIRECT optimiert vor allem die Speichernutzung und reduziert CPU-Overhead durch vermiedenes Double Buffering, ist aber kein Ersatz fuer ausreichend dimensionierten Buffer Pool oder schnelles Storage. Wer mit zu kleinem Buffer Pool oder langsamen Festplatten arbeitet, wird auch mit O_DIRECT keine grundlegende Verbesserung sehen, weil der eigentliche Flaschenhals unveraendert bleibt.

Ein technischeres Problem betrifft das Alignment: O_DIRECT-Operationen erfordern, dass Puffer, Offsets und Uebertragungsgroessen an den Blockgroessen des Dateisystems ausgerichtet sind, ueblicherweise 512 Byte oder 4 KB. InnoDB kuemmert sich intern bereits um dieses Alignment fuer seine 16-KB-Seiten, aber bei ungewoehnlichen Storage-Konfigurationen, etwa bestimmten Netzwerk-Storage-Loesungen mit abweichender Blockgroesse, koennen Alignment-Probleme zu Fehlern beim Dateizugriff fuehren. Vor dem produktiven Einsatz sollte O_DIRECT deshalb immer zunaechst in einer Staging-Umgebung mit identischer Storage-Konfiguration getestet werden.

Ein dritter, oft uebersehener Punkt: Backup-Tools und Snapshot-Mechanismen, die selbst auf die Datendateien zugreifen, etwa bei physischen Backups mit xtrabackup, arbeiten unabhaengig vom innodb_flush_method-Setting von MySQL und koennen weiterhin ueber Buffered I/O laufen. Das ist kein Fehler, sollte aber bei der Kapazitaetsplanung des Servers beruecksichtigt werden, da waehrend eines Backup-Laufs kurzfristig zusaetzlicher Page-Cache-Speicher benoetigt wird, unabhaengig von der MySQL-eigenen Konfiguration.

9. O_DIRECT und Buffered I/O im direkten Vergleich

Die folgende Tabelle fasst die wichtigsten Unterschiede zwischen beiden I/O-Modi fuer typische MySQL-Setups im Magento-Hosting-Kontext zusammen.

Kriterium Buffered I/O (fsync) O_DIRECT Empfehlung
Speichernutzung Double Buffering moeglich Buffer Pool voll nutzbar O_DIRECT bei grossem Pool
CPU-Overhead bei Schreiblast Zusaetzliche Kopierschritte Direkter Transfer O_DIRECT bei Batch-Jobs
Kleine Instanzen mit viel freiem RAM Zusaetzlicher Cache-Nutzen Kaum Unterschied Buffered I/O ausreichend
NFS oder Netzwerk-Storage Zuverlaessig unterstuetzt Nicht immer verlaesslich Buffered I/O pruefen
Konfigurationsaufwand Standardwert, kein Aufwand Neustart und Validierung noetig Vorher in Staging testen

Die Tabelle zeigt: O_DIRECT ist fuer dedizierte, grosszuegig dimensionierte Produktionsdatenbanken fast immer die bessere Wahl, waehrend Buffered I/O bei kleinen Instanzen, gemischten Workloads oder bestimmten Netzwerk-Storage-Szenarien weiterhin seine Berechtigung hat.

Fuer die konkrete Entscheidung im eigenen Setup lohnt sich eine kurze Bestandsaufnahme: Wie gross ist der Buffer Pool im Verhaeltnis zum gesamten RAM, wie schreibintensiv ist die taegliche Last durch Magento-Batch-Jobs, und welches Dateisystem kommt fuer die Datendateien zum Einsatz. Erst wenn diese drei Fragen beantwortet sind, laesst sich seriös abschaetzen, ob O_DIRECT den erwarteten Effekt bringt oder ob Buffered I/O im konkreten Fall die pragmatischere Grundeinstellung bleibt.

Mironsoft

MySQL-Performance-Tuning fuer Magento-Datenbankserver

Buffer Pool und Page Cache im Streit um denselben Speicher?

Wir analysieren eure InnoDB-Konfiguration, pruefen den passenden innodb_flush_method fuer eure Storage-Umgebung und validieren den Effekt mit realistischen Benchmarks, bevor die Aenderung produktiv geht.

InnoDB-Audit

Buffer Pool, Flush Method und Speichernutzung im Detail pruefen

Benchmark-Vergleich

O_DIRECT gegen Buffered I/O mit sysbench unter realer Last testen

Staging-Validierung

Alignment und Dateisystem-Kompatibilitaet vor dem Produktiv-Rollout pruefen

Fuer Teams, die eine bestehende Magento-Infrastruktur betreuen, lohnt sich diese Ueberpruefung regelmaessig, nicht nur einmalig beim initialen Server-Setup. Wird der Buffer Pool im Rahmen eines RAM-Upgrades vergroessert, veraendert sich auch das Verhaeltnis zwischen Buffer Pool und verbleibendem Page Cache, was eine erneute Bewertung von O_DIRECT gegenueber Buffered I/O rechtfertigen kann.

10. Zusammenfassung

Die Wahl zwischen O_DIRECT und Buffered I/O unter Linux entscheidet massgeblich darueber, wie effizient ein Datenbankserver seinen Arbeitsspeicher fuer den InnoDB Buffer Pool nutzt. Buffered I/O fuehrt bei gross dimensionierten Buffer Pools zu Double Buffering, weil dieselben Datenbankseiten zusaetzlich im Linux Page Cache vorgehalten werden, ohne einen echten Zusatznutzen zu stiften. O_DIRECT umgeht dieses Problem, indem es den Page Cache fuer Datendateien vollstaendig auslaesst und InnoDB die alleinige Cache-Verantwortung ueberlaesst.

Fuer dedizierte Magento-Datenbankserver mit grosszuegig konfiguriertem Buffer Pool ist O_DIRECT ueber innodb_flush_method in den meisten Faellen die bessere Wahl, insbesondere bei schreibintensiver Last durch Batch-Importe oder Reindexing. Kleine Instanzen, gemischte Workloads oder bestimmte Netzwerk-Storage-Szenarien koennen dagegen weiterhin von Buffered I/O profitieren. Die Umstellung sollte immer in einer Staging-Umgebung getestet und mit realistischen Benchmarks validiert werden, statt sich allein auf theoretische Erwartungen zu verlassen.

O_DIRECT vs. Buffered I/O fuer MySQL — Das Wichtigste auf einen Blick

Grundproblem

Buffered I/O haelt Datenbankseiten doppelt vor: im InnoDB Buffer Pool und im Linux Page Cache.

Loesung

innodb_flush_method = O_DIRECT umgeht den Page Cache und gibt InnoDB die volle Cache-Kontrolle.

Wann O_DIRECT

Dedizierte Server mit grossem Buffer Pool und schreibintensiver Batch-Last, etwa Reindexing.

Validierung

strace, free -h und sysbench vor und nach der Umstellung in Staging testen.

11. FAQ: O_DIRECT vs. Buffered I/O fuer MySQL

1Unterschied O_DIRECT vs. Buffered I/O?
Buffered I/O nutzt zusaetzlich den Page Cache. O_DIRECT umgeht ihn und vermeidet dadurch Double Buffering.
2Was ist Double Buffering?
Dieselbe Datenbankseite liegt doppelt im Speicher: im Buffer Pool und im Page Cache, ohne zusaetzlichen Nutzen.
3Wie umstellen?
innodb_flush_method = O_DIRECT in my.cnf setzen, MySQL neu starten. Nicht zur Laufzeit aenderbar.
4Immer schneller?
Nicht pauschal. Bei kleinen Buffer Pools mit viel freiem RAM bringt Buffered I/O noch Vorteile.
5O_DIRECT vs. O_DIRECT_NO_FSYNC?
Letzteres verzichtet auf zusaetzliche fsync-Aufrufe bei Dateisystemen mit ausreichenden Konsistenzgarantien.
6Funktioniert mit NFS?
Nicht zuverlaessig bei jedem NFS-Server, Buffered I/O ist dort oft die sicherere Wahl.
7Wie validieren?
strace auf mysqld zeigt die genutzten Open-Flags, free -h zeigt reduzierte Page-Cache-Nutzung.
8Weniger Vorteil auf NVMe?
Der Page-Cache-Lesevorteil ist bei NVMe geringer, was O_DIRECT relativ attraktiver macht.
9Beeinflusst xtrabackup?
Nein, Backup-Tools nutzen weiterhin Buffered I/O unabhaengig von der MySQL-Einstellung.
10Welche Dateisysteme unterstuetzen es?
ext4 und XFS zuverlaessig auf modernen Kernen. Ungewoehnliche Storage-Setups vorher in Staging testen.