一. latch: rowcache objects 等待事件说明
Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。
Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,通常用于保护描述buffer cache中block的数据结构。
有关Latch的更多说明参考:
http://blog.csdn.net/tianlesoftware/article/details/5263238
Row Cache Objects:
The row cache objects latch contentionusually means there is contention in the data dictionary. This problem may also be a symptom of excessive parsing ofSQL statements that depend on public synonyms. Increasingthe shared pool usually solves this latch problem.
Youusually increase the shared pool for a library cache latch problem well beforethis one is a problem.
Row cache objectslatch的争夺也就意味着数据字典的争夺。如果有latch: row cache objects等待事件,那么会导致CPU很高,主机和数据库响应都很慢。
因为Row cacheobjects latch是用来保护数据字典缓冲区的,进程在装载、引用或者清除数据字典缓冲区中的对象时必须获得该latch。Latch不会造成阻塞,只会导致等待。 阻塞是一种系统设计上的问题,等待是一种系统资源争用的问题。
当依赖于公共同义词的SQL 被过度解析时,可能会导致这种问题。增加shared pool 通常可以解决这种latch。
在MOS上搜了一下,与latch:row cacheobjects 相关的等待,大部分与Oracle 的bug 相关,如下图:
和Rowcache及其相关Latch的视图主要有:v$latch_children,v$rowcache,v$latch_misses。
在这篇blog里有说明:
http://blog.csdn.net/tianlesoftware/article/details/5263238
latch的获取就是一个不断spin的过程。所以这里就会有gets, misses和sleeps的次数。
--查看row cache objects 的具体信息:
SELECTaddr,
latch#,
child#,
level#,
name,
gets,
misses,
sleeps
FROMv$latch_children
WHEREname='rowcache objects' AND gets <>0
ORDER BYgets;
SELECT "WHERE",sleep_count, location
FROMv$latch_misses
WHEREparent_name = 'row cacheobjects' ANDsleep_count > 0;
SELECT DISTINCTr.cache#,
r.parameter name,
r.TYPE,
r.subordinate#,
r.gets
FROMv$rowcache r
ORDER BY1, 4,5;
我们可以使用如下SQL检查row cache 是否高效。 pct_succ_gets 接近与100最好,如果接近于0,就说明需要优化。
SELECT parameter,
SUM(gets),
SUM(getmisses),
100 * SUM (gets-getmisses)/sum(gets)pct_succ_gets,
sum(modifications)updates
FROM V$ROWCACHE
WHERE gets >0
GROUP BYparameter;
如果pct_succ_gets 的值不接近与100,或者数据库出现大量的“Row Cache Objects” latch等待,可以考虑增加SHARE_POOL_SIZE 来缓解这种现象。
二.Row cache 具体包含哪些对象
在前面说数据库可能会出现latch:row cache objects等待,这里的row cache objects是一个大的概念,因为它还有很多Child Latch。
从Oracle 9.2 开始,'row cache objects' latch 就包含了多个childdren。 如:dc_objects,dc_users,dc_histograms等,每个child latch 包含一个row cache。 在Oracle 9.2.0.8中,每个row cache 包含8个children latches。
在检查数据库的性能时,如果出现latch free 的等待事件,也就说明在获取latch的spin过程中消耗了大量的数据库时间。
官网MOS的文档:
How to Match a Row Cache Object Child Latch to its Row Cache[ID 468334.1]
提供了SQL,让我们查看row cache objects具体包含的内容。
SET PAGES 1000
COLUMN cache# FORMAT 99999
COLUMN nameFORMAT a33
COLUMN latch# FORMAT 999999
SELECTDISTINCTs.kqrstcln latch#,
r.cache#,
r.parameter name,
r.TYPE,
r.subordinate#
FROMv$rowcache r, x$kqrst s
WHEREr.cache# =s.kqrstcid
ORDER BY1, 4,5;
在Oracle 9.2.0.1中,row cache包含children latch如下:
LATCH# CACHE# NAME TYPE SUBORDINATE#
------- ------ ------------------------------------ ------------
1 1 dc_free_extents PARENT
2 4 dc_used_extents PARENT
3 2 dc_segments PARENT
4 0 dc_tablespaces PARENT
5 5 dc_tablespace_quotas PARENT
6 6 dc_files PARENT
7 7 dc_users PARENT
7 7 dc_users SUBORDINATE 0
7 7 dc_user_grants SUBORDINATE 1
7 7 dc_app_role SUBORDINATE 2
8 3 dc_rollback_segments PARENT
9 8 dc_objects PARENT
10 17 dc_global_oids PARENT
11 12 dc_constraints PARENT
12 11 dc_object_ids PARENT
13 13 dc_sequences PARENT
14 10 dc_usernames PARENT
15 15 dc_database_links PARENT
16 16 dc_histogram_defs PARENT
16 16 dc_histogram_data SUBORDINATE 0
16 16dc_histogram_data_values SUBORDINATE 1
17 21 dc_table_scns PARENT
17 21 dc_partition_scns SUBORDINATE 0
18 18 dc_outlines PARENT
19 14 dc_profiles PARENT
20 19dc_encrypted_objects PARENT
21 20 dc_encryption_profiles PARENT
22 9dc_qmc_cache_entries PARENT
28 rows selected.
在oracle 9.2.0.8 中每个row cache 包含8个childlatchs:
LATCH# CACHE# NAME TYPE SUBORDINATE#
------- ------ ------------------------------------ ------------
1 1 dc_free_extents PARENT
2 1 dc_free_extents PARENT
3 1 dc_free_extents PARENT
4 1 dc_free_extents PARENT
5 1 dc_free_extents PARENT
6 1 dc_free_extents PARENT
7 1 dc_free_extents PARENT
8 1 dc_free_extents PARENT
9 4 dc_used_extents PARENT
10 4 dc_used_extents PARENT
11 4 dc_used_extents PARENT
12 4 dc_used_extents PARENT
13 4 dc_used_extents PARENT
14 4 dc_used_extents PARENT
15 4 dc_used_extents PARENT
16 4 dc_used_extents PARENT
17 2 dc_segments PARENT
18 2 dc_segments PARENT
19 2 dc_segments PARENT
20 2 dc_segments PARENT
21 2 dc_segments PARENT
22 2 dc_segments PARENT
23 2 dc_segments PARENT
24 2 dc_segments PARENT
25 0 dc_tablespaces PARENT
26 0 dc_tablespaces PARENT
...
174 9dc_qmc_cache_entries PARENT
175 9dc_qmc_cache_entries PARENT
176 9dc_qmc_cache_entries PARENT
177 22dc_qmc_ldap_cache_entries PARENT
178 22dc_qmc_ldap_cache_entries PARENT
179 22dc_qmc_ldap_cache_entries PARENT
180 22dc_qmc_ldap_cache_entries PARENT
181 22dc_qmc_ldap_cache_entries PARENT
182 22dc_qmc_ldap_cache_entries PARENT
183 22dc_qmc_ldap_cache_entries PARENT
184 22dc_qmc_ldap_cache_entries PARENT
232 rows selected.
在Oracle 11.2.0.3 中,childrenlatch 与之前的版本有很大区别,具体如下:
LATCH# CACHE# NAME TYPE SUBORDINATE#
------- --------------------------------------- ----------- ------------
1 3 dc_rollback_segments PARENT
2 1 dc_free_extents PARENT
3 4 dc_used_extents PARENT
4 2 dc_segments PARENT
5 0 dc_tablespaces PARENT
6 5 dc_tablespace_quotas PARENT
7 6 dc_files PARENT
8 10 dc_users PARENT
8 7 dc_users SUBORDINATE 0
8 7 dc_users SUBORDINATE 1
8 7 dc_users SUBORDINATE 2
9 8 dc_objects PARENT
9 8 dc_object_grants SUBORDINATE 0
10 17 dc_global_oids PARENT
11 12 dc_constraints PARENT
12 13 dc_sequences PARENT
13 16 dc_histogram_defs PARENT
13 16 dc_histogram_data SUBORDINATE 0
13 16 dc_histogram_data SUBORDINATE 1
14 54 dc_sql_prs_errors PARENT
15 32 kqlsubheap_object PARENT
16 19 dc_table_scns PARENT
16 19 dc_partition_scns SUBORDINATE 0
17 18 dc_outlines PARENT
18 14 dc_profiles PARENT
19 47 realm cache PARENT
19 47 realm auth SUBORDINATE 0
20 48 Command rule cache PARENT
21 49 Realm Object cache PARENT
21 49 Realm SubordinateCache SUBORDINATE 0
22 46 Rule Set Cache PARENT
23 55 DV Auth Cache PARENT
24 34 extensible security userand rol PARENT
25 35 extensible securityprincipal pa PARENT
26 37 extensible security UIDto princ PARENT
27 36 extensible securityprincipal na PARENT
28 33 extensible securityprincipal ne PARENT
29 38 XS security classprivilege PARENT
30 39 extensible securitymidtier cach PARENT
31 43 AV row cache 1 PARENT
32 44 AV row cache 2 PARENT
33 45 AV row cache 3 PARENT
34 15 global databasename PARENT
35 20 rule_info PARENT
36 21 rule_or_piece PARENT
36 21 rule_fast_operators SUBORDINATE 0
37 23dc_qmc_ldap_cache_entries PARENT
38 52qmc_app_cache_entries PARENT
39 53qmc_app_cache_entries PARENT
40 27qmtmrcin_cache_entries PARENT
41 28 qmtmrctn_cache_entries PARENT
42 29qmtmrcip_cache_entries PARENT
43 30qmtmrctp_cache_entries PARENT
44 31qmtmrciq_cache_entries PARENT
45 26qmtmrctq_cache_entries PARENT
46 9 qmrc_cache_entries PARENT
47 50qmemod_cache_entries PARENT
48 24 outstanding_alerts PARENT
49 22 dc_awr_control PARENT
50 25 SMO rowcache PARENT
51 40 sch_lj_objs PARENT
52 41 sch_lj_oids PARENT
62 rows selected.
---------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Skype: tianlesoftware
QQ: tianlesoftware@gmail.com
Email: tianlesoftware@gmail.com
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Twitter: http://twitter.com/tianlesoftware
Facebook: http://www.facebook.com/tianlesoftware
Linkedin: http://cn.linkedin.com/in/tianlesoftware