SQL Server 锁

简介

SQL Server通过锁,就像十字路口的红绿灯那样,告诉所有并发的连接,在同一时刻上,哪些资源可以读取,哪些资源可以修改。

当一个事务需要访问的资源加了其所不兼容的锁,SQL Server会阻塞当前的事务来达成所谓的隔离性。直到其所请求资源上的锁被释放

 

如何查看锁

使用sys.dm_tran_locks这个DMV

查询时间点的数据库锁的情况,并不包含任何历史锁的记录

 

锁的粒度

锁是加在数据库对象上的。而数据库对象是有粒度的,比如同样是1这个单位,1行,1页,1个B树,1张表所含的数据完全不是一个粒度的。因此,所谓锁的粒度,是锁所在资源的粒度

锁的粒度和锁的类型都是由SQL Server进行控制的

锁会给数据库带来阻塞,因此越大粒度的锁造成更多的阻塞,但由于大粒度的锁需要更少的锁,因此会提升性能。而小粒度的锁由于锁定更少资源,会减少阻塞,因此提高了并发,但同时大量的锁也会造成性能的下降

 

 

锁的升级

实际上,每个锁会占96字节的内存,如果有大量的小粒度锁,则会占据大量的内存,直到内存达到下一级别的锁容量,会自动升级成下个级别的锁

例:当我们选择300行数据时(表数据总共3W行),SQL Server会加对应行数的Key锁,共300个key锁。但是当我们需要查询6K行数据时, 此时如果用6000个键锁的话,则会占用大约96*6000=600K左右的内存, 所以为了平衡性能与并发之间的关系,SQL Server使用一个表锁来替代6000个key锁,这就是所谓的锁升级

 

 

锁模式

锁的模式决定了锁对其他任何锁的兼容级别, 如果一个查询发现请求资源上的锁和自己申请的锁兼容,那么查询就可以执行下去,但如果不兼容,查询会被阻塞。直到所请求的资源上的锁被释放
共享锁(S锁): 用于读取资源所加的锁,又称为读锁。 在同一个资源上可以加无数把S锁
排他锁(X锁): 用于数据修改,又称为写锁。 和其它任何锁都不兼容,包括其它排他锁
更新锁(U锁): 用于更新数据,更新数据时首先需要找到被更新的数据。相当于S锁和X锁的结合,可以与S锁兼容,解决了更新时不能查找数据的问题,减少死锁出现的几率,u锁和u锁之间也不兼容
  意向锁(IS,IU,IX) 相当于指示器。会在其上层添加这个锁。例如, 当我们更新一个表中的某一行时,其所在的页和表都会获得意向排他锁。 告诉其他查询这个资源的某一部分已经上锁

 

理解死锁

当两个进程都持有一个或一组锁时,而另一个进程持有的锁和另一个进程视图获得的锁不兼容时。就会发生死锁

 

 

可以看到,出现死锁后,SQL Server并不会袖手旁观让这两个进程无限等待下去,而是选择一个更加容易Rollback的事务作为牺牲品,而另一个事务得以正常执行 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,是一种用于控制并发访问数据库对象(如表、行、页等)的机制。分为共享和排他,它们的作用是控制读写操作的并发访问。下面是SQL Server的一些重要概念和类型: 1. 的粒度:SQL Server可以精确到行、页、表等不同的粒度。不同粒度的对应不同的并发访问场景。 2. 共享和排他:共享用于控制并发读取,不会阻止其他事务的读取操作,但会阻止其他事务的写入操作。排他用于控制并发写入,当一个事务持有排他时,其他事务无法对同一数据对象进行读写操作。 3. 行和页:行用于控制单个数据行的并发访问,而页则用于控制整个数据页的并发访问。行一般比页的并发性能更好,但是会占用更多的系统资源。 4. 事务隔离级别:SQL Server支持多种事务隔离级别,包括读未提交、读已提交、可重复读和串行化。不同的隔离级别对应不同的控制策略,能够提供不同的并发性能和数据一致性保证。 5. 死:当两个或多个事务相互等待对方持有的时,就会发生死SQL Server提供了各种死检测和解决机制,包括超时机制和死图检测等。 掌握SQL Server的相关知识,对于保证数据库的并发性能和数据一致性都是非常重要的。同时,也需要注意对系统资源的占用和死等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值