一:背景 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 为一个简单
………………………………