我有两张桌子- Things和History。假设Things有一个列Id作为主键,另一个列LastUpdated是某种时间戳值。LastUpdated列上有一个索引。还有其他专栏,但我认为不应该有太大的相关性。我有两个来自我的ASP.NET MVC应用程序的业务工作流。
SELECT [Columns] FROM Things WHERE LastUpdated > @LastUpdated。此查询在连接w/o事务或事务范围上触发。Things上有一个Id,然后是使用Id的UPDATE Things。第二个事务在History表中插入行。这两个事务都使用具有TransactionScope隔离级别的Read Committed进行控制。我正在尝试用这样的场景来标记性能
Things表中的5000行环境:带有Server 2016 LocalDB引擎的My机器(核心LocalDB,8GB)。
我观察到的是,随着History表中行数的增加,#1和#2的性能下降是可以理解的,因为它实际上更新了历史表。然而,我感到困惑的是,为什么#1会急剧下降。例如,在history表中,对于250 K行,#2时间从空数据库中的大约10 ms下降到大约65 ms,而#1次从大约10 ms下降到200 ms。注意,Things表有固定的行数(5000)。我所能想到的唯一解释是由于在磁盘IO上的争论。
我就在这儿吗?是否有任何方法来验证这一点(例如,使用)?
发布于 2017-11-22 12:43:57
我不能花太多时间在这个问题上,但正如我所怀疑的那样,表面上的原因是磁盘I/O争用。我将历史表移动到不同机器上的另一个数据库。现在,历史表中的行数不再影响#1计时,无论历史表中的行数如何,它或多或少保持不变(6-7%的方差)。
https://stackoverflow.com/questions/47305855
复制相似问题