现在的位置: 首页 > 综合 > 正文

latch row cache objects 等待事件 及 child latch对象 说明

2013年10月12日 ⁄ 综合 ⁄ 共 10861字 ⁄ 字号 评论关闭

 

 

一. latch: rowcache objects 等待事件说明

 

Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。

 

Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,通常用于保护描述buffer cache中block的数据结构。

 

有关Latch的更多说明参考:

Oracle 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里有说明:

Oracle Latch说明

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

抱歉!评论已关闭.