
内在缓慢泄漏
漏泄点儿指向oracle的驱动jar包
线程中有更新表的SQL一直在执行
select s.SID,s.SERIAL#,s.MACHINE,s.TYPE,l.TYPE,l.CTIME,l.BLOCK,l.REQUEST,l.LMODE,decode(l.lmode,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',substr(to_char(l.lmode), 1, 13)) as "Locked Mode",DECODE(L.TYPE,'MR','File_ID:' || L.ID1,'TM',t.NAME,'TX','USN:' || to_char(TRUNC(L.ID1 65536)) || 'RWO:' ||nvl(r.NAME, 'None'),L.ID1) as LOCK_ID1,'alter system killsession ''' || s.SID || ',' || s.SERIAL# || ''';' as "Kill"from v$process pinner join v$session son s.PADDR = p.ADDRinner join v$lock lon l.SID = s.SIDleft join sys.obj$ ton l.ID1 = t.obj#left join sys.obj$ ron s.ROW_WAIT_OBJ# = r.obj#where 1 = 1and l.TYPE != 'MR'order by s.SID

在改变数据时必须是排它模式(mode 6)。
每一个活动事务都拥有一个锁。它将在事务结束(commit/rollback)时释放。
如果一个块包括的列被改变而没有ITL(interestedtransaction list)槽位(entries),那么session将锁置于共享模式(mode 4)。当session获得块的ITL槽位时释放。
当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。
指出回滚段和事务表项
避免TX-6类型竞争,需要根据应用而定。
避免TX-4类型竞争,可以考虑增加对象INITRANS参数值。
数据库执行任何DDL语句时必须是排它模式;例如alter table,drop table。
执行像insert,update,delete这类DML语句时处于共享模式。它防止其它session对同一个对象同时执行ddl语句。
任何对象拥有正被改变的数据,TM锁都将必须存在。
锁指向对象。
每个数据库(非实例)拥有一个ST锁。
除了本地管理表空间,在space管理操作(新建或删除extents)时必须是排它模式。
对象creation, dropping, extension, 以及truncation都处于这种锁
多数公共原因的争夺,是在磁盘排序(并非使用真正的临时表空间)或回滚段扩展或收缩。
使用真正的临时表空间(true temporarytablespaces),利用临时文件。临时段在磁盘排序之后并不创建或删除。
使用本地管理表空间。
指定回滚段避免动态扩展和收缩,或使用自动undo management。
避免应用执行创建或删除数据库对象。




