SQL Server EF核心行删除性能

时间:2019-03-14 17:10:07

标签: sql-server entity-framework database-performance

我有一个简单的3列表来跟踪未完成的计算。第一列是链接到客户表的整数外键。第二个是日期,第三个是优先级标志。该表的主键是客户端FK和日期的组合。

此表用于计算队列,因此会产生很多流失。但是,我注意到的是,使用此表本身有时要比排队的实际计算要慢。具体来说,当它有大约1000行并且计算被短路时,从队列中仅删除一行并调用SaveChanges平均需要三秒钟。

随着该表的不断添加和删除,这三秒钟很快就累了。而且必须串行执行以确保按正确的顺序处理队列。删除三列表上的一行似乎是非常漫长的时间。

我猜这应该归咎于组合键...?但是我不确定,我还是MS SQL和EF Core的新手。谁能指出我正确的方向来进行分析以找出瓶颈?

1 个答案:

答案 0 :(得分:1)

首先,我将通过Visual Studio(Debug > Performance Profiler)对应用程序进行性能分析,以查看问题的实际出处:

  1. 如果您发现对SQL的调用实际上很慢,我将继续检查哪些命令实际发送到了SQL Server,其中哪些命令花费了很长时间。对ExpressProfiler使用SQL Server Profiler extensionAzure Data Studio或SQL Server Management Studio。由于忽略了维护(如碎片索引等),这也可能导致SQL性能下降。
  2. 您可能还会发现问题实际上出在EF逻辑中,例如,变更跟踪器试图找出要更新的实体。在这种情况下,您将需要找到一种避免特定问题的方法(例如,每次删除后都不要保存,使用SQL命令手动删除行,使用Dapper而不是EF等)。

我希望这些想法可以帮助您解决问题。祝你好运;-)