Oracle: Was ist Einzelblock- oder Multiblock-IO?

Ich weiß, dass dies eine wirklich grundlegende Frage ist, aber ich habe Mühe, eine Antwort auf Google, Wiki oder Oracle zu finden. (Jedes technische Dokument, das ich sehe, geht davon aus, dass diese Themen bereits verstanden sind)

Ich lese einen großartigen Artikel über die Feinheiten des Oracle Optimizer und darüber, wie Explain Plan den günstigsten Plan für eine SQL-Abfrage ermittelt. Momentan befinde ich mich im Abschnitt über die verschiedenen Zugriffsmethoden (wie Full-Index-Scan und Fast-Full-Index-Scan ) und sehe immer wieder referenceen auf Einzelblock- und Multiblock- E / A-Lesevorgänge.

Ich habe diese Konzepte schon einmal gesehen, aber ich verstehe nur vage, dass es damit zu tun hat, wie die Oracle-Engine auf die in Blöcken gespeicherten data zugreift.

Fragen

  1. Kann mir jemand den Unterschied zwischen diesen beiden Lesarten erklären und warum könnte man in bestimmten Situationen vorteilhafter sein als der andere?
  2. Welche Bedeutung hat der Full-Index-Scan bei Verwendung eines Einzelblock-Lesevorgangs gegenüber dem Fast-Full-Index-Scan bei Verwendung eines Multiblock-Lesevorgangs?

Solutions Collecting From Web of "Oracle: Was ist Einzelblock- oder Multiblock-IO?"

Multiblock-E / A bedeutet, wie viele databaseblöcke mit einem einzigen READ-Aufruf des Betriebssystems gelesen werden. In aktuellen Versionen (11gR2 und 12c) entspricht der Standardwert der maximalen E / A-Größe, die effizient ausgeführt werden kann. Der maximale E / A-Größenwert ist plattformabhängig und beträgt für die meisten Plattformen 1 MB. Multiblock-E / As werden vom databaseparameter DB_FILE_MULTIBLOCK_READ_COUNT gesteuert.

Mit anderen Worten: In der heutigen time ist ein databaseblock 8kb groß. 8kb kann mehrere Zeilen einer Tabelle und sogar mehr Indexschlüssel enthalten, wenn sie für einen Indexblatteintrag verwendet wird. Wenn Sie jetzt einen Singleblock I / O ausführen, lesen Sie einen dieser 8kb Blöcke – typischerweise eine Zeilen-ID-search nach Indexschlüsselwert (bestimmen Sie den Block, in dem sich der Indexschlüssel befindet) und führen Sie einen einzelnen Block-I / O durch, um den databaseblock zu erhalten aktuelle Zeile). Wenn Sie jedoch viele data lesen, weil Sie z. B. Aggregationen auf riesigen Tabellen durchführen, ist es in Data Warehousing-Umgebungen normalerweise weniger effizient, einen 8-KB-Block nach einem 8-KB-Block nach einem 8-KB-Block beim zugrunde liegenden E / A-System anzufordern kann z. B. 1 MB in einem physischen Lesevorgang lesen. Daher gibt Oracle einen Multiblock-I / O aus und fordert 1 MB Block (128 8-KByte-Blöcke) in einem System-READ-Aufruf anstelle von 128 individuellen Anforderungen an und beschleunigt dadurch die performance der E / A-Anforderungen.

Weitere Informationen hierzu finden Sie in der databasereferenz für den Parameter DB_FILE_MULTIBLOCK_READ_COUNT und die angeforderte I / O-Größe im Database Performance Tuning Guide . Letztere ist auch eine großartige Ressource, um Oracle Database Performance im Allgemeinen zu verstehen.