sql-server - SQL Server EF Core 行删除性能
问题描述
我有一个简单的 3 列表来跟踪待处理的计算。第一列是链接到客户表的整数外键。第二个是日期,第三个是优先级标志。表的主键是客户端 FK 和日期的组合。
该表用于计算队列,因此它看到了很多流失。然而,我注意到的是,使用这个表本身有时比它作为队列的实际计算要慢。具体来说,当它有大约 1000 行并且计算短路时,从队列中仅删除一行并调用 SaveChanges 平均需要 3 秒。
随着这张桌子不断地被添加和移除,这三秒钟很快就加起来了。并且必须连续完成以确保以正确的顺序处理队列。删除三列表中的单行似乎需要非常长的时间。
我猜复合键是罪魁祸首......?但我不确定,而且我是 MS SQL 和 EF Core 的新手。谁能指出我正确的方向来分析这个以确定瓶颈?
解决方案
我将首先通过 Visual Studio ( Debug > Performance Profiler
) 分析应用程序,以查看问题实际出在哪里:
- 如果您发现对 SQL 的调用实际上很慢,我将继续检查哪些命令实际发送到 SQL 服务器以及哪些命令需要这么长时间。使用ExpressProfiler、Azure Data Studio的SQL Server Profiler 扩展或 SQL Server Management Studio。这也可能导致 SQL 性能不佳,因为忽略了维护,例如碎片索引等。
- 您可能还会发现问题实际上出在 EF 逻辑中,例如,更改跟踪器试图找出要更新的实体。在这种情况下,您将需要找到一种方法来避免特定问题(例如,每次删除后不要保存,使用 SQL 命令手动删除行,使用 Dapper 而不是 EF 等)。
我希望这些想法可以帮助您解决问题。祝你好运 ;-)
推荐阅读
- vue.js - Axios PUT 对 DRF Api 的请求通过,但未更新
- aws-cdk - 如何在 aws cdk 中使用自定义资源将文件上传到 s3 存储桶
- highcharts - Highcharts 8 - 在窗口调整大小时更改图表类型
- flutter - 如何确定 Flutter Web 应用是在手机还是 PC 上运行?
- algorithm - 如何正确编号两个字母字符?
- javascript - MongooseError [CastError]:模型“residence”的路径“_id”的值“5f37f59e549a291510f1c0dd”转换为 ObjectId 失败
- php - 从 Laravel 6 升级到 Laravel 7 的问题
- macos - Brew 安装 Octave - 权限被拒绝
- c++ - cpp中元素删除后的迭代器
- flutter - TextStyle.dart 引发的异常断言失败:第 936 行 pos 12: 'a == null || b == 空 || a.inherit == b.inherit': 不正确