看啥推荐读物
专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
今天看啥  ›  专栏  ›  dotNET跨平台

SQLSERVER 的 nolock 到底是怎样的无锁

dotNET跨平台  · 公众号  ·  · 2023-02-02 08:00
一:背景 1. 讲故事相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词,即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock,但这玩意有什么注意事项呢?这就需要了解它的底层原理了。二:nolock 的原理 1. sql 阻塞还原为了方便讲述,先创建一个 post 表,插个 6 条记录,参考代码如下:CREATE TABLE post(id INT IDENTITY,content char(4000))GOINSERT INTO dbo.post VALUES('aaa')INSERT INTO dbo.post VALUES('bbb')INSERT INTO dbo.post VALUES('ccc');INSERT INTO dbo.post VALUES('ddd');INSERT INTO dbo.post VALUES('eee');INSERT INTO dbo.post VALUES('fff');这里为了简单我没有创建索引,所以会出现 Table Scan 的情况,毕竟生产环境下的sql也避免不了 Table Scan 和 Clustered Index Scan 的存在,接下来还原下阻塞场景,开启两个 session 会话, session1 为正在运行的 update 事务, session2 为一个简单 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照