Forum Stats

  • 3,733,668 Users
  • 2,246,802 Discussions


what are consistent gets & current mode gets

DBA2011 Member Posts: 2,830
Logical reads/writes are computed as the sum of consistent gets plus current mode gets.


  • mbobak
    mbobak Member Posts: 1,342 Gold Badge
    Hmm....based on your subject, I thought you were asking a question, but, then you seem to be stating a fact.

    Here's something I wrote a few years ago, describing the difference between a consistent get and current mode get:

    Oracle accesses blocks in one of two modes, current or consistent.

    A 'db block get' is a current mode get. That is, it's the most up-to-date
    copy of the data in that block, as it is right now, or currently. There
    can only be one current copy of a block in the buffer cache at any time.
    Db block gets generally are used when DML changes data in the database.
    In that case, row-level locks are implicitly taken on the updated rows.
    There is also at least one well-known case where a select statement does
    a db block get, and does not take a lock. That is, when it does a full
    table scan or fast full index scan, Oracle will read the segment header
    in current mode (multiple times, the number varies based on Oracle version).

    A 'consistent get' is when Oracle gets the data in a block which is consistent
    with a given point in time, or SCN. The consistent get is at the heart of
    Oracle's read consistency mechanism. When blocks are fetched in order to
    satisfy a query result set, they are fetched in consistent mode. If no
    block in the buffer cache is consistent to the correct point in time, Oracle
    will (attempt to) reconstruct that block using the information in the rollback
    segments. If it fails to do so, that's when a query errors out with the
    much dreaded, much feared, and much misunderstood ORA-1555 "snapshot too old".

    As to latching, and how it relates, well, consider that the block buffers
    are in the SGA, which is shared memory. To avoid corruption, latches are
    used to serialize access to many linked lists and data structures that point
    to the buffers as well as the buffers themselves. It is safe to say that
    each consistent get introduces serialization to the system, and by tuning
    SQL to use more efficient access paths, you can get the same answer to the
    same query but do less consistent gets. This not only consumes less CPU,
    it also can significantly reduce latching which reduces serialization and
    makes your system more scalable.

    Hope that helps,

  • Centinul
    Centinul Member Posts: 6,871
    Tom Kyte -- Effective Oracle By Design:

    "Blocks may be retrieved and used by Oracle in one of two ways: current of consistent. A current mode get is a retrieval of a block as it exists right now. You will see these most frequently during modification statements, which must update only the latest copy of the block. Consistent gets are the retrieval of blocks from the buffer cache in "read consistent" mode and may include read asides to UNDO (rollback segments). A query will generally perform "consistent gets."
This discussion has been closed.