mssql sqlserver rowlock使性能降低


摘要:
下文讲述rowlock在sqlserver中锁定行记录,导致性能慢的情况分析,下文将举例分析:
实验环境:sqlserver 2008 R2


SET STATISTICS IO, TIME ON
SELECT *
FROM  A
INNER JOIN B ON  A.keyId = B.keyId
INNER JOIN C ON  A.keyId = C.keyId
WHERE c.info = '测试' OR A.keyId = 888
GO
--- 运行此脚本,查看sql脚本的运行时间
 SQL Server执行时间:
CPU时间= 281毫秒,已用时间= 1226毫秒。
-----------------------------------------------------------
---使用rowlock运行此脚本
SET STATISTICS IO, TIME ON
SELECT *
FROM  A with(rowLock)
INNER JOIN B ON  A.keyId = B.keyId
INNER JOIN C ON  A.keyId = C.keyId
WHERE c.info = '测试' OR A.keyId = 888
GO
--------
SQL Server执行时间:
CPU时间= 344毫秒,已用时间= 1442毫秒。


通过以上脚本,我们可以发现使用rowlock后,运行脚本所消耗的时间长,通过查阅相关资料,
我们发现sqlserver引擎更偏向于使用”页级锁和表级锁”,如果使用rowlock,会导致sql脚本的运行性能下降。