The Exadata flash cache makes use of flash memory to speed up access to commonly used data. Flash-based solid-state storage has latency times and I/O operation rates much higher than rotating storage, improving performance particularly in transaction-processing applications. The flash cache is stored on flash-memory cards on storage servers. The storage server software manages the flash cache and can recognize different types of I/O requests so that non-repeatable data access like RMAN backup I/O does not flush database blocks from the cache. It also prioritizes frequently accessed block types such as redo logs, control files, and index root blocks.
Note that the Exadata flash cache works completely differently from the similarly named database smart flash cache.
Database administrators can control which objects are cached by using the CELL_FLASH_CACHE property of database objects. Available values are
- none Exclude the object from the flash cache entirely.
- default Give the object a normal priority for caching.
- keep Give the object a higher priority for caching. Note that setting CELL_FLASH_CACHE KEEP for an object does not guarantee that it will be cached, just that it is given a higher priority
Trying Out the Flash Cache
When we created BIG_TABLE, we intentionally set CELL_FLASH_CACHE to none to prevent the flash cache from being used. Now we’ll turn it on and see the difference.
First we reconnect to the database server:
Make the table eligible for caching and count the rows:
Because flash cache statistics are counted by read request rather than bytes retrieved, we will use request-level statistics:
As the table isn’t yet cached, none of the reads came from the cache. But now that we read the table from disk, it will be in cache for the next run. We will reconnect and re-run the query after the change:
The entire table read came off flash, and we didn’t need to access the hard drives at all. Note that the flash cache is considered a physical device, so statistics such as physical read IO requests include requests fulfilled by the flash cache. And depending on the state of the cache, you may notice that less than 100 percent of the table was cached.