看上去是rac的,于是查了下,结果发现确实有gcs_resources(单instance都为0)
SQL> select * from v$resource_limit;
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
------------------------------ ------------------- --------------- ------------------------------ ------------------------------
processes 179 199 500 500
sessions 179 210 555 555
enqueue_locks 21 360 6932 6932
enqueue_resources 46 144 2660 UNLIMITED
ges_procs 178 197 501 501
ges_ress 0 0 11316 UNLIMITED
ges_locks 0 0 17220 UNLIMITED
ges_cache_ress 32641 145828 0 UNLIMITED
ges_reg_msgs 194 1293 1750 UNLIMITED
ges_big_msgs 37 404 1750 UNLIMITED
ges_rsv_msgs 0 0 1000 1000
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
------------------------------ ------------------- --------------- ------------------------------ ------------------------------
gcs_resources 162251 432717 559940 559940
gcs_shadows 108880 299468 559940 559940
dml_locks 17 614 2440 UNLIMITED
temporary_table_locks 0 7 UNLIMITED UNLIMITED
transactions 513 533 610 UNLIMITED
branches 2 6 610 UNLIMITED
cmtcallbk 0 3 610 UNLIMITED
sort_segment_locks 31 39 UNLIMITED UNLIMITED
max_rollback_segments 20 22 610 65535
max_shared_servers 1 1 UNLIMITED UNLIMITED
parallel_max_servers 10 30 80 3600
查了下metalink:
Subject: |
What Is GCS_RESOURCES And How Do We Control Them? |
Applies to:
Oracle Server - Enterprise Edition - Version: 9.2.0.1 to 10.2.0.1
Information in this document applies to any platform.
Goal
Question 1: What is gcs_resources ?
Question 2: What happens if it exceeds its limit?
Question 3: How do we adjust the limit?
Solution
Answer 1: gcs_resources is global cache resources which are essentially structures we use to protect cache structures (buffers). Each instance "masters" cache resources and the implementation of this mastership is done via a gc resource structure
Answer 2 :Nothing - this is simply stating how high the value has reached for a particular resource. If we need more gcs_resources for some reason, they are obtained from the shared pool.
Answer 3 : RAC specific memory is allocated at the time of SGA creation, mostly in the shared pool. However, the memory does not count in the SHARED_POOL_SIZE as defined in the init.ora parameter file.Therefore, when migrating Oracle from single instance to RAC, you do not need to adjust the SHARED_POOL_SIZE parameter to accommodate the additional memory that RAC uses; Oracle does that automatically. Note that the memory for the KCL global cache lock elements will be allocated in the buffer cache, and not in the shared pool.
You can monitor the exact RAC memory resource usage of the shared pool by querying V$SGASTAT for GCS, GES and KCL related entries. Also, the current and maximum number of GCS resources / shadows (resource names gcs_resources and gcs_shadows) and GES resources / enqueues (resource names ges_ress and ges_locks) can be obtained from V$RESOURCE_LIMIT. In case we are running out of reserved memory for GCS / GES related components, Oracle will dynamically allocate memory from the free memory pool in the shared pool. However, it is recommended to carefully calculate the resources and enqueues as needed since dynamic memory allocation from the shared pool is an expensive operation.
We recommend you monitor for more time to see if this limit is reach and it is a constant situation, then you could considered to increase the value of gcs_resources by instance.
SQL> alter system set "_gcs_resources"= scope=spfile sid='';