gpt4 book ai didi

sql-server - 解释 SQL Server 中的锁定行为

转载 作者:行者123 更新时间:2023-12-02 07:53:20 25 4
gpt4 key购买 nike

为什么在 Sql Server 上使用默认设置(因此事务隔离级别 = 已提交读),这个测试:

CREATE TABLE test2 (
ID bigint,
name varchar(20)
)

然后在一个 SSMS 选项卡中运行:

begin transaction SH
insert into test2(ID,name) values(1,'11')
waitfor delay '00:00:30'
commit transaction SH

和这个同时出现在另一个标签页中:

select * from test2

要求第二个选择在返回前等待第一个完成??

我们还在第二个查询中尝试了这些:

select * from test2 NOLOCK WHERE ID = 1

并尝试在第一个查询中插入一个 ID,然后在第二个查询中选择不同的 ID。

这是页面锁定的结果吗?在运行 2 个查询时,我还运行了这个:

select object_name(P.object_id) as TableName, resource_type, resource_description
from
sys.dm_tran_locks L join sys.partitions P on L.resource_associated_entity_id = p.hobt_id

得到这个结果集:

test2 RID 1:12186:5
test2 RID 1:12186:5
test2 PAGE 1:12186
test2 PAGE 1:12186

最佳答案

requires the 2nd select to wait for the first to complete before returning??

read committed 防止脏读,通过阻塞你会得到一个一致的结果,快照隔离解决了这个问题但是你会得到稍微差一点的性能,因为现在 sql server 将在事务期间保持旧值(最好有你的 tempdb在良好的驱动器上)

顺便说一句,尝试更改查询

select * from test2

select * from test2 where id <> 1 

假设您在表格中有超过 1 行并且将超过一页,插入几千行

关于sql-server - 解释 SQL Server 中的锁定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com