博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSSQL SERVER 锁的那些事
阅读量:4970 次
发布时间:2019-06-12

本文共 801 字,大约阅读时间需要 2 分钟。

     由于项目中对一个表 进行了大量的 insert,update 操作,并发特别高,所以打算研究下sql 中锁的一些概念

     我一直都认为 每个sql语句都会是一个单独的事务执行

     比如  

Insert into Table(A,B) values (C,D) WAITFOR DELAY '00:00:50'

  我一直认为它加入的是 X 排它锁, 但是用语句查看下 

EXECUTE sys.sp_lock @spid1 = 51, -- int    @spid2 = 0 -- int

  

是S锁,但是如果把它放到一个事务中

BEGIN TRANINSERT  INTO [BatchWr].[dbo].[Tbl_Test]        ( [UserName], [TDate], [MsgID] )VALUES  ( 'havid', GETDATE(), 1001 )WAITFOR DELAY '00:00:50'COMMIT TRAN

以下是查询结果

发现加入了X锁 IX锁  

这个时候执行 update/select 都会阻塞,但是通过定义事务隔离级别

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

感觉这个时候 Insert 应该是加入的行锁 ,执行其他操作就可以了。

如果你在平时的 SQL 语句中不使用事务的话,那锁都是通过数据库自己来控制的,悲观锁。。。

但是如果大批量的插入更新,用事务又觉得浪费资源

话说单独的 insert/update 语句,也会导致锁表,搜了下解释是 sql锁会根据资源的大小自动进行升级,页锁,表锁。。。。。。

 

列下搜集的几个关于sql锁的资源

阻塞分析

MSDN 锁兼容性

 

锁分析

    

转载于:https://www.cnblogs.com/havid/archive/2012/10/12/2721334.html

你可能感兴趣的文章
【ASP.NET】从服务器端注册客户端脚本
查看>>
Infix to Postfix Expression
查看>>
SELECT LOCK IN SHARE MODE and FOR UPDATE
查看>>
Perl/Nagios – Can’t locate utils.pm in @INC
查看>>
目录导航「深入浅出ASP.NET Core系列」
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>