How does the optimizer in Oracle Database use I/O statistics? I would like to help Oracle's query optimizer make better-informed decisions. I have been unable to find much information on how the optimizer determines the cost of I/O operations, other than unsourced remarks that it uses the time that it takes to retrieve a single data block. Here are some things that I would like to know:


Is it possible to view the current I/O benchmarks used by the optimizer?
Is it possible to trigger an update of those benchmarks?
Does the optimizer account for the current I/O cost of an operation? For example, if there is heavy concurrent load on the storage device causing a reduction in performance, does it consider that the relative cost of I/O will temporarily be higher?
Does the optimizer consider latency/random-access performance versus throughput/sequential performance?
If you have data files on multiple storage devices with different performance characteristics, does the optimizer have and apply device-specific costs?
You can see currently used statistics in SYS.AUX_STATS$. 
DBMS_STATS.GATHER_SYSTEM_STATS collects system statistics. Running it with gathering_mode='NOWORKLOAD' will capture IO related stats of the server. You usually also run it under workload ("START/STOP", "INTERVAL").   
(4,5)  Collecting system statistics during typical load should take care of potential problems you mentioned. 
In addition , (4) will be affected by optimizer mode (ALL_ROWS vs FIRST_ROWS)  


Also, with procedures in dbms_stats packages it's possible to collect stats multiple times, export (EXPORT_SYSTEM_STATS ), import (EXPORT_SYSTEM_STATS), or delete it (DELETE_SYSTEM_STATS).