sql server中的闩锁
闩锁 翻译自: https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/ 在一个多线程的进程里,当一个线程在内存里更新一个数据或索引页,而另一个线程正在读取相同的页,将会发生什么? 当第一个线程在内存里读取一个数据或索引页,而第二个线程正在从内存里释放相同的页,将会发生什么? 答案是:我们将获得数据或数据结构不一致的结果。为了避免不一致,SQL Server使用同步机制像锁(Locks)、闩锁(Latches)和自旋锁(Spinlocks)。 在这篇博文里,我们将讨论关于闩锁的一些关键点和如何排除闩锁超时dump故障。 什么是闩锁(Latch)? 它们通过多线程控制对数据页和结构的并发访问。闩锁提供数据页的物理数据一致性,并提供数据结果的同步。闩锁不可以像锁一样被用户控制。 闩锁的类型: Buffer(BUF) Latch 用于同步访问BUF结构和它们相关的数据库页。 Buffer "IO" Latch Buffer Latch的一个子集,用于当BUF和相关的数据/索引页正在一个IO操作(从磁盘读取页或者写入页到磁盘)中间时。 Non-Buffer(Non-BUF) Latch 这些闩锁被用于同步一般的内存中数据结构,这些结构通常被并行线程、自动增长操作和收缩操作等查询/任务执行所使用。 闩锁模式: