在SQL Server数据库中减少锁使用
webmaster 在 2009-09-27 17:45 提交
在 SQL SERVER 数据库中减少锁使用
锁的使用是导致性能的一个重要因素,过多地锁可能导致性能的严重下降,甚至出现死锁的现象。同时,锁在任何具有多个用户的数据库应用程序中都是不可避免的。但从另一方面来说,如果应用程序出现大量锁,您可以采取相应措施。
除了重新设计系统之外,首选的措施就是评估索引编制策略。如果您的应用环境中存在聚簇索引,请确保它们在 8K 大小页面上存储数据,并彼此远离。甚至于还需要确保"填充因子"(和Pad Index)均设置为非默认值,可能是 75% 到 80%,这样可以在数据页之间插入更多空间。作为辅助措施,请确保您的事务获得最少量的必需锁。同时尽量限制对通配符(例如 SELECT * FROM...)的使用,尤其是限制 INSERT、UPDATE 和 DELETE 事务保持打开和未提交状态的时间。
其次,可通过使用 SET DEADLOCK_PRIORITY 命令设置一个事务或一组事务总是低优先级(或总是高优先级)。
最后,您可变更给定连接的默认锁定行为,具体途径包括使用 SET TRANSACTION ISOLATION LEVEL 命令,或使用诸如 NOLOCK 的查询提示来修改单个查询的行为以按查询进行变更。如果您没有慎重考虑变更 SQL Server 数据库固有行为所带来的后果,建议您不要执行此操作。
Taxonomy upgrade extras: