我有一个SQL Server 2000实例,它在一组4或5个表上运行多个并发select语句。 通常,在这些查询期间服务器的性能变得极度下降。 只要查询的其他运行时间,查询可能会占用10倍的时间,并且在对象资源pipe理器中获取表列表或运行sp_who等简单操作可能需要几分钟的时间。
我已经尽力找出这些问题的原因,而我发现的唯一性能指标是平均锁存等待时间。 我读过超过1秒钟的等待时间是不好的,在大量使用的情况下,我的距离在20到75秒之间。
所以我的问题是,这可能是什么问题? SQL不应该能够处理单个表上的多个select而不会损失太多的性能? 任何人都可以build议某处去从这里调查这个问题?
谢谢您的帮助。
取决于locking。 大多数人完全忘记的是关心锁。 标准连接设置完整的读取锁(可重复读取),可能会用尽资源。
如果你只读,只读一次,使用一种方式标记的连接和一个sql语句营销方式不离开任何锁。
将适用于大多数asp.net页面 – 你读,目前的页面…没有必要locking这个操作,只有当你开始写作。
如果应用程序确实只是对该表执行读取操作,则阻塞应该不成问题。 我会:
SQL Server 2000使用locking机制来升级锁以涵盖越来越多的模式 – 也就是说,你可以开始locking一个表的页面,但是当你locking更多的行时,这个锁会很快被提升到一个完整的表锁。 对于某些types的查询,这绝对会导致性能下降。
以至于MS在更高版本中更改了locking机制,使其更像是Oracles行级locking。