Why Control File Waits Occur ?
Control File Waits Occur due to the following reason .
1.) This wait occurs when a server process is updating all copies of the controlfile i.e, the session is writing physical blocks to all control files at same time .
2.) The session commits a transaction to a controlfile
3.) Changing a generic entry in the controlfile, the new value is being written to all controlfiles
4.) Controlfile resides on such a disk which is heavily used i.e, facing lots of i/o's .
We can check the wait experience by a session using v$session_wait views as
SQL>select event, wait_time, p1, p2, p3 frpm v$session_wait wher event like '%control%';
Here wait_time is the elapsed time for reads or writes.
Possible steps to reduce this wait :
1.) Reduce the number of controlfile copies to the minimum that ensures that not all copies can be lost at the same time.
2.) Move the controlfile copies to less saturated storage locations.
3.) Reduce the frequent log switches . To find the optimal time and size for log switch check this post .