为什么所有突然计算的列开始减慢性能?

时间:2017-06-28 16:47:13

标签: performance tsql sql-server-2012 database-administration

用户可以在上午10点之前运行报告。在相同的报告变得非常缓慢之后,有时用户只是没有耐心等待。经过一些故障排除后,我计算了导致延迟的列。它是使用函数的计算列以产生结果。

大约在同一时间我又抱怨慢跑报告,这总是很好。经过一些故障排除后,我发现导致延迟的列:

where (Amount - PTD) <> 0

同样,Amount列是计算列。

所以我的问题是:

为什么所有突然计算的列始终是报告的一部分,开始显着降低性能?即使没有人使用数据库。

上午10点左右会发生什么事?

如果我将这些列保留下来会有什么不利之处?

谢谢

1 个答案:

答案 0 :(得分:1)

你在这里没有提供很多细节 - 所以我只能回答一般问题。

因此,总的来说 - 数据库性能往往是由瓶颈决定的。查询可能在具有1条记录,10条记录,1000条记录,100000条记录的表上正常运行 - 然后在100001条记录中,它突然变慢。这是因为你已超出系统中的某些边界 - 例如,数据不再适合内存。

确定这些瓶颈非常困难,甚至更难预测 - 但请关注perfmon,看看你的CPU,磁盘i / o和内存统计数据在做什么。

计算列本身不太可能成为问题 - 但在&#34;中使用&#34;如果您没有该列的索引,则声明(特别是使用其他计算)可能会很慢。在您的示例中,您可以为(Amount - PTD)创建另一个计算列,并在该列上创建索引。