简单案例描述:
某运营商的EAI系统在业务处理逐渐加大之后表现出大量的ITL Lock,从最初的每周一次到后来的每日一次的由于ITL Lock导致的业务系统Hang,被迫重新启动以恢复业务。各路人马(都是顶级国际厂商)进行了会诊和调整,但几乎没有任何效果。由于以前和该客户具有紧密的关系,在某天下午也过去帮忙了,简单看了下即使在所谓的还可以的状态下都是大量ITL Lock,DBA已经增大了maxtrans,效果不大。简单看了下系统,了解了下业务系统的基本公用,基本断定ITL LOCK应该和EAI系统没有太大关系。我要求召集相关人员给我解释下业务流程的具体流转,在听了业务流程流转之后,我的建议很简单,在EAI业务流转到其他业务系统之前增加commit语句。EAI是一个极为简单的应用整合系统,接受指令记录日志并交由Weblogic工作流通过http调用Siebel CRM和CSG计费的相关业务。在本案例中,主要原因在于随着业务量的变大,Siebel CRM和CSG计费系统效率有所降低,导致EAI锁定的时间变长,自然就导致了大量的ITL Lock。
在这种全省性的运营商业务设计中,系统之间的全同步设计是典型的架构设计错误,必然导致其吞吐量有限效率低下。你如果需要高业务吞吐量,异步设计是一个基本准则。只有在低吞吐量系统,为了使业务简单才会考虑全同步设计。
事实上有更好的处理方式来解决上面的ITL Lock的问题,表格设计成分区表,分成32或者64个分区,当然还可以更大,依据处理进程id的余数进行分区,使各自进程的操作落在各自分区中,进程之间的冲突自然就变少了。
锁是Oracle数据库用来保证数据一致性的基本保证手段,锁是一种Enqueue资源,一般采用FIFO队列实现。至于锁的具体实现如何,我不懂,大家咨询吕海波必然可以获得满意的回答,也许在他的新书中有这部分内容也说不定。
Oracle数据库主要对于持久性对象进行Enqueue锁定,部分非持久化对象也会进行Enqueue操作。主要的Oracle锁可以分为以下几类: 事务锁,对象锁,文件锁和状态锁。下面是从Oracle文档上复制的Oracle不同的锁类型,我仅仅会介绍其中的部分常见的性能影响比较大的锁(Enqueue)进行介绍。
-
BL, Buffer Cache Management
-
BR, Backup/Restore
-
CF, Controlfile Transaction
-
CI, Cross-instance Call Invocation
-
CU, Bind Enqueue
-
DF, Datafile
-
DL, Direct Loader Index Creation
-
DM, Database Mount
-
DR, Distributed Recovery Process
-
DX, Distributed Transaction
-
FP, File Object
-
FS, File Set
-
HW, High-Water Lock
-
IN, Instance Number
-
IR, Instance Recovery
-
IS, Instance State
-
IV, Library Cache Invalidation
-
JI, Enqueue used during AJV snapshot refresh
-
JQ, Job Queue
-
KK, Redo Log "Kick"
-
KP, contention in Oracle Data Pump startup and shutdown processes
-
KO, Multiple Object Checkpoint
-
L[A-P], Library Cache Lock
-
LS, Log Start or Switch
-
MM, Mount Definition
-
MR, Media Recovery
-
N[A-Z], Library Cache Pin
-
PE, ALTER SYSTEM SET PARAMETER = VALUE
-
PF, Password File
-
PI, Parallel Slaves
-
PR, Process Startup
-
PS, Parallel Slave Synchronization
-
Q[A-Z], Row Cache
-
RO, Object Reuse
-
RT, Redo Thread
-
RW, Row Wait
-
SC, System Commit Number
-
SM, SMON
-
SN, Sequence Number
-
SQ, Sequence Number Enqueue
-
SR, Synchronized Replication
-
SS, Sort Segment
-
ST, Space Management Transaction
-
SV, Sequence Number Value
-
TA, Transaction Recovery
-
TC, Thread Checkpoint
-
TE, Extend Table
-
TM, DML Enqueue
-
TO, Temporary Table Object Enqueue
-
TS, Temporary Segment (also TableSpace)
-
TT, Temporary Table
-
TX, Transaction
-
UL, User-defined Locks
-
UN, User Name
-
US, Undo Segment, Serialization
-
WL, Being Written Redo Log
-
XA, Instance Attribute Lock
-
XI, Instance Registration Lock
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/92650/viewspace-1061325/
,如需转载,请注明出处,否则将追究法律责任。