涨薪技术|0到1学会性能测试第62课-SQL 阻塞与锁

前面的推文我们掌握了JVM调优技术。今天给大家分享MS SQL数据库监控与调优技术。后续文章都会系统分享干货,带大家从0到1学会性能测试。

图片

在讨论阻塞与加锁之前,需要先理解一些核心概念:并发性、事务、隔离级别、阻塞锁及死锁。

并发性是指多个进程在相同时间访问或者更改共享数据的能力。一般情况而言,一个系统在互不干扰的情况下可以激活的并发用户的进程数越多,该系统的并发性就越强。就像通常所说的系统性能表现,系统同时处理的并发用户数越多,说明系统的性能越强。当正在更改数据的进程阻止其他进程读取该数据时,或者当读取数据的进程阻止其它进程更改该数据时,并发行会减弱。另外,当多个进程试图同时更改相同数据时,且无法在不牺牲数据的一致性的前提下都能成功时,并发性也会受到影响。在SQL Server中提供了两种方法对并发性进行有效的管理:悲观控制法和乐观控制法。悲观控制法认为不同进程将会试图同时读写相同的数据,并且通过锁来阻塞另一个进程对正在使用的数据进行访问,即当一个进程读数据时,需要通过加锁防止其它进程对它进行写操作,当一个进程对写数据时,需要通过加锁防止其它进程对它进行读操作,这样,读数据进程阻塞写数据进程,写数据进程阻塞读数据进程。乐观控制方法假设系统中很少数据在读进程和写进程中发生交叉的情况,因此不需要对数据进行加锁操作,这意味着读进程不会阻塞写进程,写进程不会阻塞读进程。

SQL Server默认设置是悲观式并发控制,因此为了提高应用程序的并发性,需要对资源加锁和解锁,在SQL Server 2005发布后,可以采用乐观式的策略,之所以可以采用这种策略,是因为SQL Server可以使用数据行版本控制,允许读进程读取的数据是写进程开始进行修改之前的版本。在进行并发容易产生以下几种情况的异常:丢失更新、脏读、不可重复读、幻影。

1) 丢失更新(Lost Updates)

丢失更新是指两个进程对同一个数据进行读取操作,并且同时试图对该数据值进行更新时,这很容易出现更新初始值错误的现象。例如:一个人找两个朋友借钱,这个人银行卡帐中的余额为5000块,结果这两个朋友同时向这张银行卡存款,假设朋友A向这张银行卡帐户中存5000块,朋友B向这张银行卡帐户中存6000块,当朋友A存款完成后,银行的出纳员将银行卡帐户中的钱修改为10000块(5000+5000),当朋友B存款完成后,银行的出纳员将银行卡帐户中的钱修改为11000块(5000+6000),由于出现更新丢失,导致损失了5000块,这个结果显然无法接受。

2) 脏读(Dirty Reads)

脏读是指对提交的数据进行读取操作,一个进程对数据进行了修改,但在提交修改后的数据时取消了当前的操作,即没有更新成功,但另一个进程已经读取了修改后的值并开始使用它。例如:你有一套房产,最近由于资金紧张,想将该处房产卖掉,这样房产中介公司的经纪人A则将该信息写入到公司资源池中(这样公司所有的房产销售人员都可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川石课堂软件测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值