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

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

 

数说Social Research 数说Social Research

社媒领域的AI Agent,全能营销智能助手

数说Social Research 164 查看详情 数说Social Research

 

答:这个问题每个人可能有每个人不同的想法,每个人的出发点可能也都不同,我的出发点先从来源找,是什么原因产生了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也不多。

 

Leonarding
2012.12.06
天津&winter
分享技术~成就梦想
Blog:

本文出自 “leonarding Blog” 博客,请务必保留此出处

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/525579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 07:51:08
下一篇 2025年11月9日 07:52:53

相关推荐

  • Oracle DATE 类型存储时间戳及如何仅存储日期

    本文旨在解释 Oracle 数据库中 DATE 类型总是包含时间戳的原因,并提供在数据库中存储日期时去除时间部分的方法,重点介绍如何通过格式化函数控制日期显示,而非修改数据库结构。 在 Oracle 数据库中,DATE 类型的设计初衷就是同时存储日期和时间信息。即使你只关心日期部分,DATE 类型仍…

    2025年12月6日 java
    000
  • mysql中事务隔离级别有哪些

    读未提交允许读取未提交数据,易引发脏读、不可重复读和幻读;2. 读已提交确保读取已提交数据,避免脏读但存在不可重复读和幻读;3. 可重复读保证事务内多次读取一致,MySQL默认级别,通过MVCC和间隙锁减少幻读;4. 串行化强制事务串行执行,避免所有并发问题但性能最差。选择隔离级别需权衡一致性与性能…

    2025年12月6日 数据库
    000
  • 优化MySQL电话号码字段搜索:解决空格与格式多样性问题

    本文详细介绍了在mysql数据库中,如何高效地搜索包含空格或多种格式的电话号码字段。针对`like`查询无法识别空格字符的问题,核心解决方案是利用`replace`函数在查询时移除字段中的空格,从而实现准确匹配。教程还将探讨更全面的数据清洗策略和性能优化建议,以提升搜索效率和数据质量。 在数据库管理…

    2025年12月6日 后端开发
    000
  • OpenJPA 在 Oracle 中处理字符串长度限制的警告与解决方案

    本文深入探讨了 openjpa 在与 oracle 数据库交互时,针对字符串字段可能遇到的“值超过 4000 字节/字符”的警告信息。该警告源于 oracle `varchar2` 数据类型的默认 4000 字节限制。教程将详细介绍两种主要的解决方案:通过 `@column(length = n)`…

    2025年12月6日 java
    000
  • Java中MANIFEST.MF的作用 详解清单文件

    manifest.mf是java中jar文件的元数据配置文件,位于meta-inf目录下,用于定义版本、主类、依赖路径等关键信息。1. 它允许指定入口类,使jar可直接运行;2. 通过class-path管理依赖,减少类加载冲突;3. 可配置安全权限,如设置沙箱运行;4. 常见属性包括manifes…

    2025年12月5日 java
    000
  • SQL文件如何Mysql 导入数据库

    1、在 win 系统下使用 mysql 中的source命令即可实现导入 sql 文件: mysql -u root -pmysql>use 数据库名mysql>source d:/数据库名 这样就完成了 Win 系统下的 SQL 文件的导入。 2、在 Linux 系统下导入 SQL 文…

    数据库 2025年12月5日
    100
  • Java中枚举类型怎么定义 掌握Java枚举的定义和常用方法

    java中定义枚举类型使用enum关键字,例如public enum weekday { monday, tuesday,…};枚举可包含字段和方法,如添加中文名称字段及获取方法;可在switch语句中使用,确保覆盖所有值;常用方法包括values()、valueof()、ordinal…

    2025年12月4日 java
    000
  • linux下数据库有哪些

    linux下数据库有:1、Oracle;2、MySQL;3、MariaDB;4、SQL Server;5、Memcached,“Key-Value”型数据库;6、Redis,“Key-Value”型数据库;7、MongoDB等。 本教程操作环境:Red Hat Enterprise Linux 6.…

    2025年12月4日 运维
    000
  • MySQL关系型数据库事务的ACID特性与实现方法

    1. 事务的 ACID 特性详 acid 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性: 原子性(Atomicity):事务中的操作同时成功或者失败。 一致性(Consistency):数据库事务不能破坏数据的完整性以及业务逻辑上的一致。 隔离性(Isolation):一…

    数据库 2025年12月4日
    700
  • oracle/mysql拼接值遇到的坑及双竖线||和concat怎么使用

    %ign%ignore_a_1%re_a_1% mysql 拼接值遇到的坑 双竖线 || concat || “||” 在oracle中是拼接值,但在mysql中是“或”的意思。 where name like ‘%’ || ‘Tony’ || ‘%’ 所以推荐使用concat() concat()…

    数据库 2025年12月4日
    000
  • Linux实现自动挂载autofs的方法详解

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 目录 实现自动挂载-autofs autofs工具简单使用 autofs配置详细说明 自动挂载资源有两种格式 优化Linux系统性能 安装Tuned 选择调整配置文件 检查系统推荐的调整配置文件…

    2025年12月4日
    000
  • 简易项目搭建(用于一般杂七杂八的小功能点)

    在工作中,我们常常会遇到许多需要完成的小功能点。以我自己的工作情况为例,最常见的是两个方面:1、控制台项目;2、web界面(纯前端)。 首先让我们讨论控制台项目的工作内容。在没有使用PostMan之前,工作中大量使用接口调用。在项目准备阶段,首先需要对接口的使用进行描述。在主要使用WebServic…

    2025年12月4日
    000
  • 分页功能如何实现?LIMIT与页码计算

    分页功能通过offset和limit截取数据实现。1.分页核心是计算偏移量(offset=(页码-1)每页条数)和限制数量;2.使用sql的limit子句或数据库特定语法(如sql server的offset…fetch next)执行查询;3.前端传页码和每页大小,后端计算偏移量并执行…

    2025年12月3日 后端开发
    000
  • Java中DAO模式的作用 解析DAO模式封装数据访问的价值

    dao模式通过解耦业务逻辑与数据访问,解决了数据库切换困难、sql注入风险和代码重复问题。其核心价值在于将数据访问细节封装在接口和实现类中,使业务代码仅面向接口编程,从而降低维护成本。具体步骤包括:1.定义dao接口;2.创建具体实现类;3.使用工厂模式获取实例;4.在业务逻辑中调用dao方法。技术…

    2025年12月3日 java
    000
  • Swoole如何做数据加密?加密算法如何选择?

    Swoole中数据加密依赖PHP的OpenSSL扩展,通过选择AES、RSA等算法实现;在Server或Client的接收与发送过程中进行加解密操作,结合CBC、GCM等模式保障安全与性能;密钥应通过环境变量或配置文件管理,避免硬编码;为防止中间人攻击,应启用TLS/SSL加密通信,并在WebSoc…

    2025年12月3日
    100
  • 怎么使用Mysql来管理关系型数据库

    第一步,安装MySQL 在使用MySQL之前,你需要先安装MySQL。你可以从MySQL官方网站https://dev.mysql.com/downloads/mysql/ 下载MySQL安装程序,并根据提示完成安装过程。在安装过程中,你可以设置root用户密码和端口等相关信息。 第二步,连接MyS…

    数据库 2025年12月3日
    000
  • SpringBoot如何连接MySQL获取数据写后端接口

    1.新建项目 2.添加依赖 mysql mysql-connector-java 8.0.20 org.springframework spring-jdbc 5.3.8 org.springframework spring-tx 5.3.8 org.springframework spring-a…

    2025年12月3日 数据库
    000
  • Swoole如何实现多租户?租户隔离怎么操作?

    Swoole实现多租户的核心在于协程上下文隔离,通过Coroutine::getContext()绑定租户ID、数据库连接、缓存前缀等上下文信息,在请求入口识别租户并加载配置,确保数据、缓存、文件存储、数据库连接等资源按租户隔离,避免长驻内存导致的数据泄露,结合连接池重置、缓存键前缀、独立表或库等策…

    2025年12月3日
    000
  • 2023合同管理软件排名:前10名榜单

    合同管理软件依托信息技术,结合现代企业的先进管理思想,为企业构建起一个集决策、规划、控制及经营绩效评估于一体的全方位、系统化的管理平台。企业在开展经济活动时,通常以合同为纽带,合同管理的效果直接关系到经营的成败。作为企业管理的重要组成部分,合同管理对业务流程的规范化、数据的准确性以及信息传递的安全性…

    2025年12月3日 软件教程
    000
  • 如何在PHP中配置Oracle数据库连接池的详细教程?

    在php中配置oracle数据库连接池需依赖oracle工具和配置,而非php本身。1. 安装oracle instant client并配置环境变量,安装oci8扩展并在php.ini中启用;2. 在oracle端启用drcp连接池,使用dbms_connection_pool包启动并调整参数;3…

    2025年12月3日 后端开发
    000

发表回复

登录后才能评论
关注微信