【发布时间】:2019-02-27 04:57:46
【问题描述】:
-
我用 EF 内核构建了一个 .net core 2.1 应用程序。
-
我使用了带有未提交读取隔离级别的事务。
-
我构建了异步 API 并创建了一个简单的 ef 查询异步(获取第一个用户的 5 个字段,而不是引用其他表)。 [查询用户][1]
-
当我创建一个请求时,查询需要很短的时间
-
当我用 10 个线程进行压力测试时,ramp-up:5,永远循环(使用 jmeter),查询时间是相同的
-
但是,当我使用 jmeter 对 api 进行压力测试时(100 个线程,加速:20s,永远循环),一些查询需要很短的时间,一些查询需要很长时间(可能是 5s、10s、25s ...) ,另一个查询抛出连接超时异常
-
我该怎么办?
问题已解决:需要几天时间进行调查,我尝试使用此解决方案,它运行良好。所以,我将在这篇文章中分享它,如果您有其他提高性能的解决方案,请告诉我。
-
创建数据库连接是一个耗费时间的昂贵过程。您可以指定要在应用程序的生命周期内创建并保持打开的最小连接池。然后将这些用于每个数据库调用。
-
应该使用事务隔离级别“Read Uncommitted”
-
应该对一个请求的多个操作使用相同的数据库连接
-
所有的API,方法都应该是Async方法,注意不要把Async和Sync混在一起。
谢谢大家!!!
【问题讨论】:
-
对答案有任何反馈吗?如果可以,它应该被接受和投票,以便对社区有所帮助。谢谢
标签: multithreading asp.net-core jmeter stress-testing entity-framework-core-2.1