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量较大,跑了大概一晚上的时间。

insert操作卡死的处理过程的更多相关文章

  1. MyBatis魔法堂:Insert操作详解(返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType  ...

  2. IBatisNet:让insert操作返回新增记录的主键值

    项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目 ...

  3. MyBatis返回主键,MyBatis Insert操作返回主键

    MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...

  4. MyBatis魔法堂:Insert操作详解

    一.前言 数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解 其属性如下: parameterType:入参的全限 ...

  5. veridata实验例(3)验证veridata发现insert操作不会导致同步

    veridata实验例(3)验证veridata发现insert操作不会导致同步 续接:<veridata实验举例(2)验证表BONUS与表SALGRADE两节点同步情况>,地址:点击打开 ...

  6. 多表insert操作详解

    --1.无条件的多表insert all ; ; ; --没有条件,向多个目标表全量插入,必须有all insert all --不指定emp_1后面的列,也不指定values,那么emp_1中的所有 ...

  7. 使用sparkSQL的insert操作Kudu

    可以选择使用Spark SQL直接使用INSERT语句写入Kudu表:与'append'类似,INSERT语句实际上将默认使用UPSERT语义处理: import org.apache.kudu.sp ...

  8. 【mybatis】mybatis中insert操作,返回自增id

    需求是这样的: mybatis中insert操作,返回自增id,因为这个自增id需要给后续业务用到. 原本是这样的: 将insert语句传入,正常执行insert操作,返回int永远是 0[失败] 或 ...

  9. 2016/05/25 PHP mysql_insert_id() 函数 返回上一步 INSERT 操作产生的 ID

    定义和用法 mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID. 如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() ...

随机推荐

  1. java抽象-老师的生日-逻辑思维-有趣的面试题-遁地龙卷风

    (-1)写在前面 都快去北京了,硬生生的安排一场java考试,对于那些特别细节的东西我忘了吧也不觉得有什么不好,以前都记得,也都见过,只不过平时不常用连接断了,但是你死记硬背是没用的,一段时间后还是会 ...

  2. Java MySql 批量插入数据库addBatch

    //addBatch批量插入数据库 public static void insertCommentToMySql(Set<String> commentList) { Iterator& ...

  3. oracle插入数据时解决和旧数据id的冲突

    我们在使用oracle创建一个主键的时候需要让他自增, 但是他跟mysql不同,需要创建序列,具体看下面: 可以删除之前创建的sequence,我们在重新创建一个: DROP SEQUENCE SJG ...

  4. Factorization Machine因子分解机

    隐因子分解机Factorization Machine[http://www. w2bc. com/article/113916] https://my.oschina.net/keyven/blog ...

  5. Windows下几款免费C/C++开发工具简介

    我相信作为编程初学者,我们都希望有好用的编程软件.这里"好用"应该至少要满足两点:1.安装简单,2.使用方便.大神移驾,对工具有特殊偏好跳过,从来不用Windows的止步.本文不做 ...

  6. ubuntu下安装mcrypt

    sudo apt-get install libmcrypt4 php5-mcrypt 一句命令搞定

  7. Android笔记:反向横屏

    1: 在manifest文件中更改android:screenOrientation="landscape"为“reverseLandscape” 2: 更改Android源码 3 ...

  8. iOS开发UI篇—CAlayer层的属性

    iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  9. SQL查询语句行转列横向显示

    http://blog.163.com/dreamman_yx/blog/static/26526894201121595846270/

  10. Laravel Homestead安装笔记

    引言: 最近开始学习laravel框架,了解到有个laravel homestead的box,开发起来非常方便快捷,于是就准备开始配置homestead虚拟开发环境了 什么是Homestead 要想学 ...