SQL Server EF核心行删除性能

问题描述 投票:0回答:1

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

此表用于计算队列,因此它会看到大量的流失。然而,我注意到,使用此表本身有时比它的队列实际计算速度慢。具体来说,当它有大约1000行,并且计算被短路时,从队列中只删除一行并调用SaveChanges平均需要3秒。

随着这个表不断被添加和删除,这三秒钟加起来很快。并且必须以连续方式完成,以确保以正确的顺序处理队列。这似乎是一个非常长的时间来删除三列表上的单行。

我猜这个复合键应该归咎于......?但我不确定,我是MS SQL和EF Core的新手。任何人都可以指出我正确的方向来分析这个以确定瓶颈吗?

sql-server entity-framework database-performance
1个回答
1
投票

我将首先通过Visual Studio(Debug > Performance Profiler)分析应用程序以查看问题的实际位置:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.