AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 252888
Accepted
jack
jack
Asked: 2019-11-10 08:29:27 +0800 CST2019-11-10 08:29:27 +0800 CST 2019-11-10 08:29:27 +0800 CST

插销和锁的区别

  • 772

最近,当我试图查找有关latch_ex 等待类型的信息时,我偶然发现了一篇关于latch 和lock 的博客,如下所示。

在此处输入图像描述

读完这篇博客后,我只是对一件事感到好奇。当应用程序提交请求时,SQL Server 将首先在缓冲区缓存中查找信息,如果该页面不在缓冲区缓存中,那么它只会从磁盘读取并将其放入缓冲区缓存中,然后再将信息发送给应用程序。我的问题基于上面的屏幕截图,其中指出闩锁和锁定需要避免两个线程更新同一页面。基本上所有到 SQL Server 的请求都会先到缓冲区缓存,如果缓冲区缓存中的页面忙于更新,另一个线程将不得不等待。它不会回到磁盘,因为页面已经在内存中。那么锁的目的是什么,因为每个请求都将通过内存完成,并且有锁存器来保护页面

sql-server locking
  • 1 1 个回答
  • 554 Views

1 个回答

  • Voted
  1. Best Answer
    mustaccio
    2019-11-10T11:00:02+08:002019-11-10T11:00:02+08:00

    我真的不明白你在引用中不理解的内容(奇怪的是,作为截图),因为它非常清楚地解释了差异,在我看来。

    锁和闩具有不同的范围和生命周期。锁适用于您可能称之为数据库物理模型元素的东西——表、行、索引条目。锁存器保护数据库服务器在执行 SQL 语句或执行其管理任务时使用的各种内存结构。

    一个事务可能在它正在处理的对象上持有一个、多个或根本没有锁,这向其他事务发出信号,它们可以对这些对象进行何种访问。受锁保护的对象不必“在内存中”;例如,受表级锁保护的表甚至可能没有任何页面存在于缓冲池中。

    工作线程获取和释放闩锁以严格防止其他并发运行的线程(可能正在同一事务、其他事务或代表某些服务器后台进程中执行任务)同时访问某些内存区域。例如,两个事务可能会为同一缓冲池页面上的不同行持有锁,这不会阻止它们同时访问各自的行,如果不是页面锁存器确保整个页面对所有读取器和写入器保持一致. 然后是一个惰性写入器进程,它不太关心这些锁中的任何一个,但仍然必须获取一个锁存器,然后才能将一致的页面写入磁盘。

    换句话说,锁是一种事务同步机制,而锁有助于同步进程或线程。

    • 7

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve