sqlserver2005的奇怪查询性能

sqlserver2005的奇怪查询性能,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我注意到我的数据库存在一些性能问题。此类查询(仅作为示例): …以不同的读取和持续时间随机执行。ObjectId是外键,上面有索引 使用SQL Profiler,我发现有时结果是:5次读取,0个持续时间,但在另一种情况下:5次读取,200个持续时间。如此大的持续时间是偶然发生的 我使用WCF的分布式事务。当我是当时唯一的用户时,我得到了这样的结果,所以它可能不是锁或其他东西 这种行为的原因是什么:读取次数少,但查询持续时间长?由于每次查询都完全相同,读取次数也相同,因此很可能是由于锁定。有时,另

我注意到我的数据库存在一些性能问题。此类查询(仅作为示例):

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

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

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


这种行为的原因是什么:读取次数少,但查询持续时间长?

由于每次查询都完全相同,读取次数也相同,因此很可能是由于锁定。有时,另一个查询正在执行,可能会锁定需要访问的记录。等待锁释放将导致减速

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


这并不是问题的迹象,只是对您所看到的差异的解释。

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

在数据库中启用读取提交的快照:

ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON;

这将奇迹般地将默认读取提交隔离下发生的读取更改为快照读取,而快照读取不会受到锁的阻碍。有关详细信息,请参阅,包括启用快照读取导致的运行时资源使用情况。

首先,使用SQL profiler记录XML查询计划并进行比较
ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON;