说说你是如何理解Oracle数据库中latch和enqueue lock的?

简介:

 

答:这个问题每个人可能有每个人不同的想法,每个人的出发点可能也都不同,我的出发点先从来源找,是什么原因产生了lock&latch。然后再从不同的角度去解释lock&latch的本质。

Lock

1.来源于业务也消失于业务,基本上是由于业务流程安排的不合理产生的,是一种保护业务的锁。

2.还来源于并发,俗话说没有并发就没有lock,当大量会话都要去争强一个修改权时,我们需要的是一种有序的,排队的方式来获得访问权限。这就好比大家在坐公车的时候,排队上车排队下车,谁也不能够拥挤。

3.独占资源,为什么这么说,家里的锁、银行保险箱都是为了保护贵重物品而存在,oracle的锁也一样,当我在修改一条记录的时候就相当于我自己独占了,别人要等我修改完毕后才能获取,这就是锁的特性。

4.保证读一致性,什么是读一致性,简单的通俗的说,同一时间大家看到的数据都是一样的,这么说大家好理解一些,实际要比这个复杂哦。这样的好处大家能够感受到对数据变化是统一的,避免了数据不对称造成的误解。举个例子  当你看超女演唱会的时候需要先购票,你要和她一起看这时候就需要买2张票,当你在买票的过程中,售票员需要先把2张票锁定(不管真买假买)否则在你拿钞票的过程中别人给抢购了,此时女朋友就会把今天变成你的世界末日这样不太好吧!保证看到的和实际的要一致,这就是一致性的来源。

5.维护事务完整性,这又从事务的角度来探讨lock了,大家都知道关系型数据库就是为事务而生的,只有在关系型数据库中才有事务这个概念。什么是事务的完整,就是没有提交的事务对他人是不可见的,例如 我修改一条记录,这条记录是在数据块中真真切切的修改了,但没有提交,此时别人是不可见的,别人要想查询只能从undo段中找记录前快照来查询。事物完整性是数据安全的守护神。

6.锁的信息是数据块上的一个属性是物理的,并不是逻辑上属于某个表或某几行的。


 

 

 

Latch

1.来源于系统资源的紧张不够用所致。例如 SGA  CPU  sql解析  ,它是一种保护资源的锁。

2.来源于数据库设计,我指的是内部原理机制,是一种独占资源的机制,我一旦抢到资源后马上从里面闩住,用完之后再出来。这种系统资源是一直存在的,不管我们用不用它都是存在着的,有了latch机制我们可以更有效的管理和使用这些系统资源。

3.Latch是一种轻量级的锁,为什么说它也是锁呢,因为它也有锁的一些特性。例如独占资源 一致性等。Latch不会造成锁一样的阻塞,只会导致等待,这是2个完全不同的概念,阻塞是系统设计上的问题,等待是系统资源争用的问题,这对我们判断系统性能有很大的帮助。

4.latch也可以说是一种内存技术,用于保护数据库内存结构,是系统层面的事情,跟业务无关,例如

share_pool 里面latch争用,大多数是由没有绑定变量,低效sql,不规范sql引起的。解决方法:减少sql硬解析,优化sql语句,规范编码规则。

data_buffer_cache 里面latch争用,是由大量会话同一时间访问同一个数据块引起的。我们也称作热块现象。解决方法:把记录打散到多个数据块中,减少多个会话同一时间频繁访问一个数据块概率,防止由于记录都集中在一个数据块里产生热块现象。

5.OLTP系统中由于有大并发的产生,latch争用现象非常多。

OLAP系统中由于很少有表频繁修改,执行的sql语句又不多,因此latch也不多。



 本文转自 leonarding151CTO博客,原文链接:http://blog.51cto.com/leonarding/1081170,如需转载请自行联系原作者
相关文章
|
26天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
84 11
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
57 7
|
13天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
13天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
42 3
|
13天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
54 2
|
26天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
182 15
|
20天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。

推荐镜像

更多