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. Linux串口中的超时设置

    在Linux下使用串口通信时,默认的阻塞模式是不实用的.而采用select或epoll机制的非阻塞模式,写代码有比较麻烦.幸好Linux的串口自己就带有超时机制. Linux下使用termios.h中 ...

  2. angularjs向后台传参,后台收不到数据

    angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...

  3. servlet 之request

    request对象中其他功能     一.转发和包含         转发==>用于一个servlet和一个jsp合作处理             servlet用于处理逻辑.jsp用于显示   ...

  4. 关于git的简单实用命令

    时代在进步啊,现在已经不是svn的时代了,好多人都在使用git.所以自己也稍微学习了下git的使用. 常见的通过git提交代码步骤: git status :查看文件状态 :该命令显示你工程内修改的所 ...

  5. go:windows下用sublime Text搭建go语言开发环境

      一.安装   1.安装go    go安装包地址:http://pan.baidu.com/s/1hq1mrDM(进入下图中箭头所示目录中下载对应版本) * 注意go的安装路径不能包含中文    ...

  6. mac tomcat https

    一.HTTPS的基本工作原理: HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.TLS/SSL协议不仅仅是一套加密传输的协议 ...

  7. 简单粗暴将sqlserver表以及数据迁移到oracle

    1.利用sqlserver工具查询出表中所有数据,全选,右键 -连同标题一起复制. 2.将数据保存到excel文件,数据 时间类型(yyyy--MM--dd HH:mm:ss)最好处理一下,需要将id ...

  8. CSS实现背景透明,文字不透明,兼容所有浏览器

    11.11是公司成立的日子,16岁啦,我呢3岁半,感谢公司给了这样一个平台,让我得以学习和成长,这里祝愿公司发展越来越好~ 进入主题,每年11月11号是光棍节,产生于校园,本来只是一流传于年轻人的娱乐 ...

  9. LockSupport

    LockSupport是高级线程同步类的基础,用来block和释放线程.这里要区别notify和wait的点在于这里可以先unpark,再park.(有点类似于unpark等于-1,park等于+1. ...

  10. linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

    =============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...