The process has issued multiple I/O requests in parallel to read blocks from data files into memory and is waiting for all requests to complete. This occurs during regular activity when a session batches many single block I/O requests together and issues them in parallel. This is also occurs during recovery. This wait event does not apply to parallel query or parallel DML.
Block reads are necessary in a database, but it is important to limit unnecessary I/O. The best way to do this is by making the application as efficient as possible in regard to its data access requirements. Also, creating efficient SQL can produce large gains in performance. In contrast, changes to the RDBMS itself may produce smaller performance improvements.
Identify and resolve any SQL using unselective index scans. Use Ignite to find SQL with a large “db file parallel read” wait time — indicating a long index scan. Look at the explain plan to see if the index scan is high cost with low cardinality.
Try increasing the size of the buffer cache with DB_BLOCK_BUFFERS if enough memory is available on the server. This should reduce the cost of the I/O, since the necessary data is more likely to be in memory, but it won’t reduce the amount of I/O.
Consider using the operating system’s data cache if available. For tables that are frequently accessed via index scans, placing their corresponding data files on buffered file systems can reduce the I/O to actual drives.
Evaluate Data Clustering.
Evaluate whether table partitioning can reduce the amount of data needed to navigate to satisfy your queries.