« Oracle 10g LOGMNR挖掘日志很方便 | Blog首页 | Phpmyadmin:配置文件Wrong permissions »
Granule 与 Redo Log Buffer (log_buffer) 的关系
链接:https://www.eygle.com/archives/2009/07/granule_log_buffer.html
而实际上大家也发现,从Oracle10g开始,Redo Log Buffer缺省的已经是大大超过了原来的想象。
从Oracle 9i引入了Granule的概念后,在Oracle10g中,Oracle的内存分配会为'Fixed SGA Size'和'Redo Buffers'共享整数倍个Granule。
看看不同SGA设置下的内存分配情况:
SQL> select * from v$version;在另外的系统中,供分配了2个Granule,每个4M:
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
SQL> select * from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers','Granule Size');
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 1267212 No
Redo Buffers 15507456 No
Granule Size 16777216 No
SQL> select sum(bytes)/1024/1024 from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers');
SUM(BYTES)/1024/1024
--------------------
15.99757
SQL> select * from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers','Granule Size');摘录一部分Oracle文档中关于Granule的描述供参考:
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 1263320 No
Redo Buffers 7122944 No
Granule Size 4194304 No
SQL> select sum(bytes)/1024/1024 from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers');
SUM(BYTES)/1024/1024
--------------------
7.99776459
With dynamic SGA, the unit of allocation is called a granule. Components, such as the buffer cache, the shared pool, the java pool, and the large pool, allocate and free SGA space in units of granules. Oracle tracks SGA memory use in integral numbers of granules, by SGA component. All information about a granule is stored in a corresponding granule entry. Oracle maintains the state of each granule in the granule entry and the granule type.
Granule size is determined by total SGA size. On most platforms, the size of a granule is 4 MB if the total SGA size is less than 128 MB, and it is 16 MB for larger SGAs. There may be some platform dependency, for example, on 32-bit Windows NT, the granule size is 8 MB for SGAs larger than 128 MB.
The granule size that is currently being used for SGA can be viewed in the view
V$SGA_DYNAMIC_COMPONENTS
. The same granule size is used for all dynamic components in the SGA.Oracle keeps information about the components and their granules in a scoreboard. For each component that owns granules, the scoreboard contains the number of granules allocated to the component, any pending operations against this component, the target size in granules, and the progress made toward the target size. The start time of the operation is also logged. Oracle maintains the initial number of granules and the maximum number of granules for each component.
For operations that modify the number of granules, Oracle logs the operation, the target size, and the start time to the appropriate SGA component in the scoreboard. Oracle updates the progress field until the operation is complete. When the operation is complete, Oracle replaces the current size with the target size and clears the target size field and the progress field. At the end of the operation, a database administrator can see how the number of granules was changed. Oracle updates the initialization parameter values to reflect the updated amount of SGA in use.
Oracle maintains a circular buffer of the last 100 operations made to the scoreboard. Fixed views show the state of the scoreboard and the current contents of last 100 operations to the scoreboard.
Allocating Granules at Startup
At startup, Oracle reads the values in the initialization parameter file, queries the operating system memory limits, and allocates virtual address space for the SGA. The initialization parameter
SGA_MAX_SIZE
specifies the maximum size of the SGA for the life of the instance in bytes. Its value is rounded up to the next granule size.Adding Granules to Components
A database administrator grows a component's SGA use with
ALTER
SYSTEM
statements to modify the initialization parameter values. Oracle takes the new size, rounds it up to the nearest multiple of 16MB, and adds or takes away granules to meet the target size. Oracle must have enough free granules to satisfy the request. If the current amount of SGA memory is less thanSGA_MAX_SIZE
, then Oracle can allocate more granules until the SGA size reachesSGA_MAX_SIZE
.
历史上的今天...
>> 2020-07-02文章:
>> 2011-07-02文章:
>> 2010-07-02文章:
>> 2006-07-02文章:
>> 2005-07-02文章:
By eygle on 2009-07-02 11:49 | Comments (0) | FAQ | 2326 |