欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

总结一下要影响SQLSERVER锁的申请和释放行为要考虑的因素

程序员文章站 2024-01-22 14:38:16
...

要影响SQLSERVER锁的申请和释放行为要考虑的因素 1、事务隔离级别的选定 事务隔离级别越高,隔离度就越高,并发度也就越差。如果选择了比较高的隔离级别,SQL不可避免地要申请更多的锁,持有的时间也会增加。 所以在设计应用的时候,一定要和用户谈好,尽量

要影响SQLSERVER锁的申请和释放行为要考虑的因素

1、事务隔离级别的选定
事务隔离级别越高,隔离度就越高,并发度也就越差。如果选择了比较高的隔离级别,SQL不可避免地要申请更多的锁,持有的时间也会增加。

所以在设计应用的时候,一定要和用户谈好,尽量选择默认的隔离级别(read committed)

2、事务的长短和事务的复杂度
事务的长度和复杂度决定论这个事务在SQL内部会持续多长时间,也能决定SQL会同时在多少张表和索引上申请和持有锁。事务越简单,就越不

容易发生阻塞和死锁。所以这也必须和用户商量好,尽量避免在一个事务里做很多事情

3、从应用整体并发度考虑,单个事务一次处理的数据量不能过多
应用的性能,不单要衡量单个连接的处理速度,也要衡量在并发处理的情况下,整体的平均速度怎么样。从连接个体来讲,可能在一个事务里把

数据一次都处理掉比较快。但是如果处理的数据量很大,就会影响到其他连接同时访问同一对象。所以,如果一个应用的并发要求比较高,

就一定要严格控制单个事务处理的数据量。如果有什么事务操作需要访问或修改表格内的大量数据,最好调整到并发用户比较少的时候运行。

4、针对语句在表格上设计合适的索引
合适的索引能使SQL在读取尽可能少的数据量的前提下,把需要处理的数据找到。如果没有合适的索引,SQL在做select,update,delete的时候,

会申请比要处理的目标数据量多得多的锁,从而导致阻塞或死锁。这种情形可以通过加索引的方式提高并发度。同时,SQL在做update,insert,delete

的时候,会对有关联的所有索引都做修改,在她们上面申请锁。从这个角度讲,索引越多,产生的锁的数目也就越多,阻塞和死锁的几率也就会越高。

总结:

数据库设计员需要做的是要确保有足够的索引,防止语句做全表扫描,但是也要去掉那些对语句运行贡献不大的索引。不能随便往表格上加索引