oracle数据库:锁和闩_笔记1
锁和闩
开发多用户、数据库驱动的应用时,最大的难点之一是:一方面要力争取得最大限度的并发访问,此同时还要确保每个用户能以一致的方式读取和修改数据。为此就有了锁定(locking)机制,这也是所有数据库都具有的一个关键特性。
什么是锁
锁(lock)机制用于管理对共享资源的并发访问。
有多少种数据库,其中就可能有多少种实现锁定的方法。
大多数情况下,如果采用页级锁,多个用户就不能同时修改同一个表。另外,如果正在修改一个表,这会有效地阻塞对这个表的多个查询。
在Oracle中,你会了解到下面几点。
.事务是每个数据库的核心,它们是“好东西”
.应该延迟到适当的时刻才提交。不要太快提交,以避免对系统带来压力。这是因为,如果事务很长或很大,一般不会对系统有压力。相应的原则是:在必要时才提交,但是此前不要提交。事务的大小只应该根据业务逻辑来定。
.只要需要,就应该尽可能长时间地保持对数据所加的锁。这些锁是你能利用的工具,而不是让你退避三舍的东西。锁不是稀有资源。恰恰相反,只要需要,你就应该长期地保持数据上的锁。锁可能并不稀少,而且它们可以防止其他会话修改信息。
.在Oracle中,行级锁没有相关的开销,根本没有。不论你是有1个行锁,还是1000000个行锁,专用于锁定这个信息的“资源”数都是一样的。当然,与修改1行相比,修改1000000行要做的工作肯定多得多,但是对1000000行锁定所需的资源数与对1行锁定所需的资源数完全相同,这是一个固定的常量。
.不要以为锁升级“对系统更好”(例如,使用表锁而不是行锁)。在Oracle中,锁升级(lock escalate)对系统没有任何好处,不会节省任何资源。也许有时会使用表锁,如批处理中,此时你很清楚会更新整个表,而且不希望其他会话锁定表中的行。但是使用表锁绝对不是为了避免分配行锁,想以此来方便系统。你使用表锁来确保在这种情况下能访问批处理程序的所有资源。
.可以同时得到并发性和一致性。每次你都能快速而准确地得到数据。数据读取器不会被数据写入器阻塞。数据写入器也不会被数据读取器阻塞。这是Oracle与大多数其他关系数据库之间的根本区别之一。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5191.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
