云服务器网:购买云服务器和VPS必上的网站!

MSSQL下没法产生同享锁

有时在MSSQL下,由于某些缘由,产生的锁会变成独占锁而没法产生同享锁,造成甚么后果呢?
首先,甚么是同享锁?当数据库资源被某个事务持有,其他的事务可以访问被持有的资源,但不能更改它时,就会产生同享锁。同享锁把锁定的资源与其他事务同享,并能够针对同一资源进行并

有时在MSSQL下,由于某些缘由,产生的锁会变成独占锁而没法产生同享锁,造成甚么后果呢?

首先,甚么是同享锁?当数据库资源被某个事务持有,其他的事务可以访问被持有的资源,但不能更改它时,就会产生同享锁。同享锁把锁定的资源与其他事务同享,并能够针对同一资源进行并发读取操作。

MSSQL在运行进程中,如果某个事务持有了一个资源,其他事务需要访问同一资源时,没法产生同享锁,而是被迫产生独占锁,这样的后果就是其他事务就不能进行读取操作,只能排队等候前面的事务释放资源才能进行操作,从而将系统效力急剧降落。

解决这一问题,可使用以下代码:

BEGIN TRANSACTION

SELECT * FROM 表名

按需要添加 WITH (ROWLOCK, READPAST)

COMMIT TRANSACTION

此代码可以确保获得同享锁,而不是独占锁。上述代码后面多加一句 WITH (ROWLOCK, READPAST),表示使用同享锁和跳过当前正在使用同享锁的行,这样可以有效把行锁变成页锁,避免锁定多行,简化事务的处理,提升了系统的性能。

另外,也能够使用索引,比如 CREATE nonclustered INDEX index_test ON 表名(列名1,列名2),这样SQL Server会隐式提供读取数据的同享锁,这样可以替换上面的代码,可以极大减少 SELECT语句的并提问题。

总之,在MSSQL下没法产生同享锁时,可以通过上述方式,提高数据库的运行效力,终究使得系统更稳定。

本文来源:https://www.yuntue.com/post/103558.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注