zoukankan      html  css  js  c++  java
  • Oracle等待事件Enqueue CI:Cross Instance Call Invocation

    "Cross Instance call Enqueue"是一种在一个或多个instance实例间调用后台进程行为时用到的队列锁,具体调用的后台进程行为包括检查点checkpoint、日志切换logfile switch、shutdown实例、载入数据文件头等等。需要注意的是这种Enqueue Lock并不仅仅在RAC中使用,即便是单节点也会用到。CI锁的数量取决于并行执行Cross Instance Call调用的进程的总数。
    
    SQL> col ksqsttyp for a20
    SQL> col ksqstrsn for a20
    SQL> col ksqstexpl for a80
    SQL> set linesize 200 pagesize 2000;
    SQL> select ksqsttyp,ksqstrsn,ksqstexpl from x$ksqst where ksqsttyp='CI';
    
    KSQSTTYP             KSQSTRSN             KSQSTEXPL
    -------------------- -------------------- --------------------------------------------------------------------------------
    CI                   contention           Coordinates cross-instance function invocations
    
    SQL> show parameter cluster_database
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cluster_database                     boolean     FALSE
    cluster_database_instances           integer     1
    
    
    SQL> select * from v$enqueue_stat where eq_type='CI';
    
       INST_ID EQ TOTAL_REQ# TOTAL_WAIT#  SUCC_REQ# FAILED_REQ# CUM_WAIT_TIME
    ---------- -- ---------- ----------- ---------- ----------- -------------
             1 CI        595           0        595           0             0
    
    
    当系统中出现有大量这种跨实例后台进程调用时,将出现CI队列锁的争用。假设在一个RAC场景中,同时有大量的回话开始对不同的数据表执行TRUNCATE截断操作,TRUNCATE的一个前提是在所有实例上(因为对象表的dirty buffer可能分布在多个实例上)发生对象级别的检查点(object level checkpoint),检查点发生时CKPT进程会通知DBWR写出指定对象表相关的脏块,DBWR需要扫描Buffer Cache以找出脏块,而如果Buffer Cache很大那么扫描将花费大量的时间,而在此过程中前台进程将一直排他地持有着本地的CI队列锁,这就将造成CI锁的严重争用。 为了减少CI队列锁地争用,我们第一步所要做的是找出实际的Cross Instance call跨实例调用的类型。这里要另外提一下的是在10g以前不管是v$session_wait或statspack中都不会将enqueue锁等待事件的具体enqueue lock类型写明,一般需要我们从p1/p2/p3列中找出enqueue的具体身份,例如"WAIT #1: nam='enqueue' ela= 910796 p1=1128857606 p2=1 p3=4",这里的p1为1128857606也就是16进制的43490006,高位的'4349'转换为ascii码也就是'CI',而这里的p2/p3对应为V$lock中的ID1/ID2,ID1=1代表了"Reuse (checkpoint and invalidate) block range",ID2=4代表了"Mounted excl, use to allocate mechanism"。 具体ID1/ID2代表的含义在不同版本中有所变化,可以参考下表:
    Id1, Id2 Combination:
    
       Oracle 10gR1
    
    27 TO 29  *Same as 9i R2
    
                    30    process waiters after row cache requeue
                    31    Active Change Directory extent relocation
                    32    block change tracking state change
                    33    kgl mulitversion obsolete
                    34    set previous resetlogs data
                    35    set recovery destination pointer
                    36    fast object reuse request
                    37    test ksbcic()
                    38    ASM diskgroup discovery wait
                    39    ASM diskgroup release
                    40    ASM push DB updates
                    41    ASM add ACD chunk
                    42    ASM map resize message
                    43    ASM map lock message
                    44    ASM map unlock message (phase 1)
                    45    ASM map unlock message (phase 2)
                    46    ASM generate add disk redo marker
                    47    ASM check of PST validity
                    48    ASM offline disk CIC
                    49    Logical Standby Sync Point SCN
                    50    update SQL Tuning Base existence bitvector
                    51    PQ induced Checkpointing
                    52    ASM F1X0 relocation
                    53    Scheduler autostart
                    54    KZS increment grant/revoke counter
                    55    ASM disk operation message
                    56    ASM I/O error emulation
                    57    DB Supp log cursor invalidation
                    58    Cache global range invalidation
                    59    Cache global object invalidation
                    60    ASM Pre-Existing Extent Lock wait
                    61    Perform a ksk action through DBWR
                    62    ASM diskgroup refresh wait 
    
       Oracle 10gR2
    
           30 to 62 *Same as 10gR1
    
                   63    KCBO object checkpoint
                   64    KCBO object pq checkpoint
                   65    global health check event
                   66    Oracle Label Security refresh
                   67    thread internal enable
                   68    cross-instance registration
                   69    KGL purge unused subheaps
                   70    clear pin instance flag
                   71    Rolling operations CIC
    
       Oracle 9iR2
    
                     Id1   Meaning
                     ~~~   ~~~~~~
    
                 25 TO 26  *Same as 9i R1
    
                     27    set Database Force Logging mode
                     28    invalidate cached file address translations
                     29    Cursor Unauthorize Mode
                     30    snapshot too old diagnosis
                     31    process waiters after row cache requeue
    
       Oracle 9iR1
    
                    Id1    Meaning
                    ~~~    ~~~~~~~~
    
                 18 TO 24  *Same as Oracle 8i
    
                    25     Update Dscn Tracking (ktcndt)
                    26     Purge dictionary Object number Cache
    
       Oracle 8i
                    Id1     Meaning
                    ~~~     ~~~~~~~
    
                 0 TO 17    *Same as Oracle 8(please see "Oracle8*" for the Meaning)
    
                    18      Object reuse request
                    19      Rolling release checks
                    20      Propagate begin backup scn for a file
                    21      Refresh top plan (for db scheduler)
                    22      Clear checkpoint progress record
                    23      Drop temp file
                    24      Quiesce database Restricted 
    
                   Id2      Meaning
                   ~~~      ~~~~~~~
    
                   0x01     Used to pass in parameters
                   0x02     Used to invoke the function in backgroud process
                   0x03     Used to indicate the foreground has not returned
                   0x04     Mounted excl, use to allocate mechanism
                   0x05     Used to queue up interested clients 
    
        Oracle 8*
    
    		Id1 	Meaning
    		~~~	~~~~~~~
                    0       Checkpoint block range
                    1       Reuse (checkpoint and invalidate) block range
                    2       LGWR Checkpointing and Hot Backup
                    3       DBWR syncronization of SGA with control file
                    4       Log file add/drop/rename notification
                    5       Write buffer for CR read
                    6       Test call
                    7       Invalidate KCK cache in all instances
                    8       Alter rollback segment optimal
                    9       Signal Query Servers/coordinator
                    10      Create Remote parallel query Server
                    11      Set Global Partitions
                    12      Stop Disk Writes
                    13      Drop Sort Segments
                    14      Release unused space from Sort Segments
                    15      Instance Recovery for Parallel operation Group
                    16      Validate parallel slave Lock Value
                    17      Check transaction state objects
                    18      Flush blocks in object
                    19      Rolling release checks
                    20      Propagate begin backup scn for a file
                    21      Clear checkpoint progress record
    
         Oracle 7
    
    		Id1 	Meaning
    		~~~	~~~~~~~
    		0 	Flush buffers for reuse as new class
    		1 	LGWR checkpointing and Hot Backup
    		2 	DBWR synchronization of SGA with control file
    		3 	Log file add/drop/rename notification
    		4 	Write buffer for CR read
    		5 	Test Call
    		6 	Invalidate KCK cache in all instances
    		7 	Alter rollback segment optimal
    		8 	Signal Query Servers/coordinator
    		9 	Create Remote Parallel Query Server
    		10 	Set Global Partitions
    		11 	Stop Disk Writes
    		12 	Drop Sort Segments
    		13 	Release unused space from Sort Segments
    		14 	Instance Recovery for Parallel operation Group
    		15 	Validate parallel slave Lock Value
    		16 	Check Transaction State Objects
    
    		Id2 	Meaning
    		~~~	~~~~~~~
    		1 	Pass in Parameters
    		2 	Invoke the call in background process
    		3 	Foreground has not returned yet
    		4 	Used to allocate the CI call
    		5 	Used to queue up interested clients
    
    
  • 相关阅读:
    【Vue】Re19 Promise
    【Vue】Re17 Router 第四部分(参数传递,守卫函数)
    【Vue】Re16 Router 第三部分(懒加载、子路由)
    【Vue】Re15 Router 第二部分(缺省路由、动态路由)
    【Vue】Re14 Router 第一部分(入门案例)
    【Vue】Re13 CLI(Command Line Interface)
    【Vue】Re12 Webpack 第三部分(插件、热部署、配置分离)
    【Vue】Re11 Vue 与 Webpack
    【Vue】Re10 Webpack 第二部分(Loader)
    11-26日测试
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967771.html
Copyright © 2011-2022 走看看