What is a memory granuleWhen a database instance starts up, the amount of memory allocated is determined by the allocations requested in the parameter file (init file or spfile). This memory is allocated in units called granules. All memory pool sizes will be allocated in multiples of the granule size.
How is the granule size determinedThe granule size is determined based on the amount of memory requested at the instance startup. It is based on the SGA_MAX_SIZE. If MEMORY_MAX_TARGET is specified, then SGA_MAX_SIZE defaults to MEMORY_MAX_TARGET for the purpose of sizing the granule. Once set, the granule size does not change for the life of the instance.
The granule sizes at the time of writing, are:
|RDBMS||SGA_MAX_SIZE (or memory_max_target)||GRANULE SIZE|
|>1Gb <= 4GB||16MB|
|>4Gb <= 16GB||64MB|
|>16Gb <= 64GB||256MB|
|>1Gb <= 8Gb||16Mb|
|>8Gb <= 16Gb||32Mb|
|>16Gb <= 32Gb||64Mb|
|>32Gb <= 64Gb||128Mb|
|>64Gb <= 128Gb||256Mb|
How to find the Granule sizeYou can check the granule size that is currently set for your database instance by running the following SQL statement as SYSDBA
select bytes from v$sgainfo where name like 'Granule Size';