Dass Oracle in Version 11 unter bestimmten Umständen große serielle Full Table Scans (FTS) mit Hilfe von Direct Path Reads durchführen kann, ist schon häufig erwähnt worden (hier im Blog mindestens in drei Artikeln) - zuletzt hatte Tanel Poder darauf hingewiesen, dass die Entscheidung für diesen Zugriff seit 11.2.0.2 zum Teil auf den Objektstatistiken basiert. Jetzt hat Frits Hogland sich mit dem Verhalten der Direct Path Reads im Fall von Index Fast Full Scans (IFFS) beschäftigt - die mit dem FTS bekanntlich eng verwandt sind: beide Operationen lesen ein komplettes Segment über multiblock I/O. Zunächst nennt er dabei noch einmal die bekannten Voraussetzungen für direct path reads beim seriellen FTS:
- The segment is bigger than 5 * _small_table_threshold.
- Less than 50% of the blocks of the table is already in the buffercache.
- Less than 25% of the blocks in the buffercache are dirty.
Nach einem Beispiel zum Verhalten der FTS folgt dann eine Untersuchung der IFFS und deren Verhalten wird offenbar nicht durch _small_table_threshold, sondern über den Parameter _very_large_object_threshold gesteuert, der dabei eine ähnliche Wirkung zeigt: kurz gesagt erfolgt ein IFFS offenbar, wenn die Größe des Index-Segments > _very_large_object_threshold * 5 ist. Allerdings werden die beiden Parameter in unterschiedlichen Einheiten angegeben (_small_table_threshold in blocks, _very_large_object_threshold anscheinend in megabyte) und die default-Werte sind unterschiedlich definiert (_small_table_threshold dynamisch als 2% der Größe des buffer caches, _very_large_object_threshold statisch als 500; was Sayan Malakshinov in seinem Kommentar allerdings in Frage stellt). Wahrscheinlich ist in diesem Zusammenhang noch weitere Analyse erforderlich.
Keine Kommentare:
Kommentar veröffentlichen