2011-02-28 48 views
2

我注意到我的数据库的一些性能问题。这样的查询(仅举例):奇怪的查询性能的SQL Server 2005

SELECT * 
    FROM ActionHistory 
WHERE ObjectId = @id" 

...随机地以不同的读取和持续时间执行。 ObjectId是外键,带有索引。

用我发现的SQL事件探查器,有时结果是:5次读取,0持续时间,但在另一种情况下:5次读取,200持续时间。如此大的持续时间偶然发生。

我使用WCF的分布式事务。当我是当时唯一的用户时,我得到了这样的结果,所以它可能不会成为锁或其他东西。

这种行为的原因是什么:低读取,但查询时间长?

+1

首先,使用SQL分析器记录XML查询计划并比较它们 – oryol 2011-02-28 16:44:26

回答

0

由于查询每次完全一样,且读数相同,所以很可能是由于锁定。有时候另一个查询正在执行,并且可能会锁定需要访问的记录。等待锁定被释放将导致放缓。

使用SQL事件探查器比较查询的开始/停止时间,可以识别可能导致锁定的重叠查询。

这不是一个问题的表示,只是解释你所看到的差异。

1

一般来说,分布式事务是非常昂贵的。尝试在您的环境中禁用分布式事务以查看是否改变了任何内容。

0

数据库启用读提交快照:

ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON; 

这将奇迹般地改变你读下默认读提交的隔离发生到快照读取,它不会被锁阻碍。有关详细信息,请参阅Choosing Row Versioning-based Isolation Levels,其中包括启用快照读取所导致的运行时资源使用情况。