Oracle-锁机制(1)

性能优化一般是指系统缓慢,只有系统缓慢了才需要优化,一般有两种情况,一种是系统的资源严重不足,比如CPU耗尽了,或者I/O到了瓶颈了,由于系统的资源被耗尽导致系统性能无法再提升。另外一种情况就是阻塞,这个系统的资源使用并不高,为什么程序跑的特别慢,这种情况通常是阻塞导致的,并不是资源处理不过来。

当真的是系统资源枯竭了,那么只能扩充系统的硬件性能,由于系统阻塞导致的这个就和业务设计有关系了,这样就和系统无关了。



从一个最简单的例子感受锁的存在

为什么会有锁
没有并发就没有锁! 

Oracle中锁的分类
Enqueues---队列类型的锁,通常和业务相关的。
Latches ---系统资源方面的锁,比如内存结构,SQL解析......

锁分为两类队列和LatchesEnqueues保证资源以一种队列的方式。大家都喜欢把锁叫做Lock,其实Enqueues就是锁,在v$lock里面可以看到查出来的是Enqueues(通常由DML操作导致的锁叫做Enqueues)。

另外一方面的锁就是LatchesLatches是用来保护资源的,比如访问某些内存结构,如哈希表,链这些结构。访问这些结构要获得某方面的授权,这方面的保护机制就是Latches

锁的原则
只有被修改时,行才会被锁定。
当一条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升
级。
当某行被修改时,它将阻塞别人对它的修改。
当一个事务修改一行时,将在这个行上加上行锁(TX),用于阻止其它事务对相同行
的修改。
读永远不会阻止写。(比如一个查询需要5分钟,在这5分钟里面可以将表truncate
读不会阻塞写,但有唯一的一个例外,就是select ...for update
写永远不会阻塞读。
当一行被修改后,Oracle通过回滚段提供给数据的一致性读。

 未完 待续.................................................

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/80555196
今日推荐