IMU – In Memory Undo is the change vector for undo block changes due to a transaction where transaction redo is stored in Private redo strands. You can disable or enable this feature by setting the parameter, by default it is TRUE.

Out of 40 private strands, there are only 2 got valid address and rest are disabled initially. Extra private strands will get activated as and when the number of transactions need more redo strands. If there are more concurrent transactions than private strands, then the redo will be directly written to the PUBLIC strands.

There are total 42 redo strands including both 40 PRIVATE and 2 PUBLIC. These 42 PUBLIC and PRIVATE strands are protected by 42 ‘REDO ALLOCAITON’ latches.

SQL> select NAME,count(*) from v$latch_children where NAME like '%redo allocation%' group by name;
NAME COUNT(*)
---------------------------------------------------------------- ----------
redo allocation 42

Why HUGEPAGE – The mappings from virtual to physical address are performed so often that CPU manufacturers have created a special cache inside the CPU called the TLB Cache – Translation Look-aside Buffer. It has the latest 512 translations (typically). If you have a larger page, then these 512 slots can cover much more memory, and the chances of having a cache hit increase. If there is a cache miss, then up to three additional memory reads (from RAM) need to be performed to find the correct RAM address to read. This can waste a significant amount of CPU time.

Oracle AMM uses Memory mapped files using /dev/shm. However HUGEPAGES do not support this implementation, using SYSTEM V style IPC memory management. /dev/shm implementation, one program can create shared memory and other programs can access it as long as got permission to it.

To use a multi-column index for a primary key, the key should be the leading index columns. Remember, Oracle support only “Index Skip Scan” for non-leading columns. ROWID mapping will be always based on leading columns.