zoukankan      html  css  js  c++  java
  • insert操作卡死的处理过程

    SQL> select sql_id from v$sql where sql_text like 'delete  from  std_contract%';
    
    SQL_ID
    -------------
    9wx6s3p84v3xw
    
    SQL> set long 9999
    SQL> select sql_text from v$sql where sql_id ='9wx6s3p84v3xw';
    
    SQL_TEXT
    ------------------------------------------------------------------------------
    delete  from  std_contract subpartition (P0000021) t1  where  exists (select 1
     from T_POLINFO_WN_000002  t2 where t1.Cntr_Id=t2.CntrId )
    
    SQL> 
    SQL> 
    SQL> 
    SQL> !
    $ ora plan 9wx6s3p84v3xw
    
    Session altered.
    
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID  9wx6s3p84v3xw, child number 0
    -------------------------------------
    delete  from  std_contract subpartition (P0000021) t1  where  exists
    (select 1 from T_POLINFO_WN_000002  t2 where t1.Cntr_Id=t2.CntrId )
    
    Plan hash value: 668406912
    
    -----------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation                     | Name                | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    -----------------------------------------------------------------------------------------------------------------------------
    |   0 | DELETE STATEMENT              |                     |       |       |       |   295K(100)|          |       |       |
    |   1 |  DELETE                       | STD_CONTRACT        |       |       |       |            |          |       |       |
    |*  2 |   HASH JOIN RIGHT SEMI        |                     |    13M|  1727M|   538M|   295K  (1)| 00:59:02 |       |       |
    |   3 |    TABLE ACCESS FULL          | T_POLINFO_WN_000002 |    13M|   380M|       | 85240   (1)| 00:17:03 |       |       |
    |   4 |    PARTITION COMBINED ITERATOR|                     |    16M|  1577M|       | 95085   (2)| 00:19:02 |   KEY |   KEY |
    |   5 |     TABLE ACCESS FULL         | STD_CONTRACT        |    16M|  1577M|       | 95085   (2)| 00:19:02 |     1 |     1 |
    -----------------------------------------------------------------------------------------------------------------------------
    
    
    SQL> select index_name from dba_indexes where table_name ='STD_CONTRACT';
    
    INDEX_NAME
    ------------------------------
    IDX_STD_CONTACT_APPLNO
    IDX_STD_CONTACT_CNTRNO
    IDX_STD_CONTACT_CNTRID
    IDX_STD_CONTRACT_INFORCE
    IDX_STD_SGID
    

    通过oradebug查看session的情况

        Oracle session identified by:
        {
                    instance: 1 (cmds.cmds1)
                       os id: 14419572
                  process id: 342, oracle@cmdsky01
                  session id: 3619
            session serial #: 34985
        }
        is waiting for 'enq: TM - contention' with wait info:
        {
                          p1: 'name|mode'=0x544d0003
                          p2: 'object #'=0x1a10c
                          p3: 'table/partition'=0x0
                time in wait: 2714 min 58 sec
               timeout after: never
                     wait id: 2058617
                    blocking: 0 sessions
                 current sql: delete  from  std_contract subpartition (P0000021) t1  where  exists (select 1 from T_POLINFO_WN_000002  t
    2 where t1.Cntr_Id=t2.CntrId )
                 short stack: ksedsts()+240<-ksdxfstk()+44<-ksdxcb()+3432<-sspuser()+116<-__sighandler()<-thread_wait()+580<-sskgpwwait(
    )+32<-skgpwwait()+200<-ksliwat()+10772<-kslwaitctx()+180<-kjusuc()+3600<-ksipgetctxi()+1884<-ksqcmi()+22104<-ksqgtlctx()+2884<-ktaia
    m()+700<-ktagetg0()+776<-ktagetp_internal()+232<-ktagetg_internal()+116<-ktagdw()+152<-ktaadm()+152<-kksfbc()+1860<-opiexe()+2020<-o
    pipls()+2028<-opiodr()+908<-rpidrus()+216<-skgmstack()+160<-rpidru()+132<-rpiswu2()+520<-rpidrv()+1060<-psddr0()+448<-psdnal()+472<-
    pevm_EXIM()+240<-
                wait history:
                  * time between current wait and wait #1: 0.001417 sec
                  1.       event: 'row cache lock'
                     time waited: 0.000372 sec
                         wait id: 2058616         p1: 'cache id'=0x10
                                                  p2: 'mode'=0x0
                                                  p3: 'request'=0x3
                  * time between wait #1 and #2: 0.002481 sec
                  2.       event: 'library cache pin'
                     time waited: 0.000265 sec
                         wait id: 2058615         p1: 'handle address'=0x7000118a2602118
                                                  p2: 'pin address'=0x7000118a4aeb478
                                                  p3: '100*mode+namespace'=0x67138700010002
    
    

    查看锁的情况

    col OS_USER_NAME for a10
    SELECT /*+ RULE */ ls.osuser os_user_name,
    	ls.username user_name,
    	decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,
    	o.object_name OBJECT,
    	decode(ls.lmode, 1, NULL, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', NULL) lock_mode,
    	o.OWNER,
    	ls.sid,
    	ls.serial# serial_num,
    	ls.id1,
    	ls.id2
    FROM sys.dba_objects o,
    	(
    		SELECT s.osuser,
    			s.username,
    			l.type,
    			l.lmode,
    			s.sid,
    			s.serial#,
    			l.id1,
    			l.id2
    		FROM v$session s,
    			v$lock l
    		WHERE s.sid = l.sid 
    		) ls
    WHERE o.object_id = ls.id1
    	AND o.OWNER ='CMDS'
    ORDER BY o.OWNER,
    	o.object_name;
    

    检查没有索引的外键,排除这个原因

    SELECT * FROM (
       SELECT c.table_name, cc.column_name, cc.position column_position
       FROM   user_constraints c, user_cons_columns cc
       WHERE  c.constraint_name = cc.constraint_name
       AND    c.constraint_type = 'R'
       MINUS
       SELECT i.table_name, ic.column_name, ic.column_position
       FROM   user_indexes i, user_ind_columns ic
       WHERE  i.index_name = ic.index_name
       )
    ORDER BY table_name, column_position;
    
    
    TABLE_NAME                     COLUMN_NAME          COLUMN_POSITION
    ------------------------------ -------------------- ---------------
    DBFS$_MOUNTS                   S_NAME                             2
    DBFS_SFS$_FS                   TABID                              1
    DBFS_SFS$_FS                   VOLID                              2
    HS$_CLASS_CAPS                 CAP_NUMBER                         1
    HS$_CLASS_DD                   DD_TABLE_ID                        1
    HS$_FDS_INST                   FDS_CLASS_ID                       1
    HS$_INST_CAPS                  CAP_NUMBER                         1
    HS$_INST_DD                    DD_TABLE_ID                        1
    HS$_PARALLEL_HISTOGRAM_DATA    DBLINK                             1
    HS$_PARALLEL_HISTOGRAM_DATA    REMOTE_TABLE_NAME                  2
    HS$_PARALLEL_HISTOGRAM_DATA    REMOTE_SCHEMA_NAME                 3
    HS$_PARALLEL_PARTITION_DATA    DBLINK                             1
    HS$_PARALLEL_PARTITION_DATA    REMOTE_TABLE_NAME                  2
    HS$_PARALLEL_PARTITION_DATA    REMOTE_SCHEMA_NAME                 3
    HS$_PARALLEL_SAMPLE_DATA       DBLINK                             1
    HS$_PARALLEL_SAMPLE_DATA       REMOTE_TABLE_NAME                  2
    HS$_PARALLEL_SAMPLE_DATA       REMOTE_SCHEMA_NAME                 3
    REGISTRY$                      PID                                2
    REGISTRY$DEPENDENCIES          REQ_NAMESPACE                      1
    REGISTRY$DEPENDENCIES          REQ_CID                            2
    REGISTRY$PROGRESS              NAMESPACE                          1
    REGISTRY$PROGRESS              CID                                2
    WRM$_SNAPSHOT                  INSTANCE_NUMBER                    2
    WRM$_SNAPSHOT                  STARTUP_TIME                       3
    

    没有这个情况

    杀掉这些session

    select sql_id,state from v$session where sid=2873 and  SERIAL#=39007;	
    select sql_id,state from v$session where sid=3619 and  SERIAL#=34985;	
    select sql_id,state from v$session where sid=1699 and  SERIAL#= 59001;
    
    alter system kill session '2873,39007';
    alter system kill session '3619,34985';
    alter system kill session '1699,59001';
    

    原因

    从应用了解到insert是带append提示的,因为这个提示,不走sga,所以必须保证数据不被修改,而同时表上面有delete操作,表的数据被删除,两个操作应该是delete在insert之前或差不多同时进行,导致产生了独占锁。
    处理方法是杀掉session,然后先insert数据,然后跑delete,经过这样的处理之后,insert在非常短的时间内就完成了,delete量较大,跑了大概一晚上的时间。

  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/wangrongxin/p/6224310.html
Copyright © 2011-2022 走看看