Vie*_*ele 34 database concurrency locking
我试图理解一篇关于并发B树的论文,其中作者提到了latch vs lock,以及latch如何不需要"Lock Manager".我一直试图弄清楚这两者之间的差异是两天.
谷歌导致:
"锁保证数据的逻辑一致性.它们通过锁表实现,长时间保持(例如2PL),以及部分死锁检测机制.
锁存器就像信号量.它们确保数据和资源的物理一致性,这在交易级别是不可见的"
但是,我仍然很困惑.有人可以详细说明这个吗?锁经理到底做了什么?
提前谢谢〜
Mat*_*ish 10
这实际上取决于您的DBMS,但这是Oracle的一个很好的解释.
http://www.dba-oracle.com/t_lru_latches.htm
锁存器类似于RAM存储器结构的锁,以防止并发访问并确保内核代码的串行执行.在从缓冲区高速缓存中查找,添加或删除缓冲区时使用LRU(最近最少使用的)锁存器,该操作一次只能由一个进程完成.
以下是从SQL Server 的角度。
锁存器是短期的轻量级同步对象。与锁不同,锁存器不会一直保持到整个逻辑事务。他们只持有page.
引擎使用闩锁来同步多个线程(例如尝试在表上插入)。锁存器不是为开发人员或应用程序设计的——它是由引擎来完成它的任务的。锁存器是内部控制机制。而锁是供开发人员和应用程序控制的。锁存器用于内部存储器一致性。锁用于逻辑事务一致性。
锁存器引起的等待对于诊断性能问题非常重要。查看诊断和解决 SQL Server 上的闩锁争用 - 白皮书。这PAGEIOLATCH_EX是一种重要的等待类型。
参考
闩锁的另一个名称是“自旋锁”。这是一个简单的“while 循环”,直到位为零(取决于实现)。当闩锁不可用时,执行线程永远不会休眠。没有任何队列。自旋锁对于短时内存对象锁定很有用,但如果持有时间较长则浪费。请参阅维基百科上的“自旋锁”文章
系统通常支持锁,如果它们被占用,您的线程将进入睡眠状态,因此它不会消耗任何处理器资源。每个锁保持所有挂起线程的内部队列。
锁管理器是一个子系统,它可以为您提供自旋锁作为并发支持的重量级锁。
另请参阅Tom Kyte 撰写的关于闩锁和锁的文章。
| 归档时间: |
|
| 查看次数: |
23270 次 |
| 最近记录: |