实体框架核心压力测试缓慢

时间:2018-09-23 13:20:17

标签: multithreading asp.net-core jmeter stress-testing entity-framework-core-2.1

  • 我用EF内核构建了一个.net core 2.1应用程序。
  • 我已使用事务读取未提交的隔离级别。
  • 我构建异步API并创建一个简单的ef查询异步(获取第一个用户的5个字段,而不引用其他表)。 [查询用户] [1]
  • 当我创建单个请求时,查询会花费很短的时间
  • 当我用10个线程进行压力测试时,加速:5,永远循环(使用jmeter),查询时间是相同的
  • 但是,当我使用jmeter(100个线程,加速时间:20s,永远循环)对api进行压力测试时,某些查询会花费很短的时间,有些查询会花费很长时间(也许5s,10s,25s)。 ..),另一个查询抛出连接超时异常

  • 我该怎么办?

  

问题已解决:花了几天时间进行调查,我尝试了此解决方案,并且效果很好。因此,如果您有其他提高性能的解决方案,请在此告诉我。

  • 创建数据库连接是耗时的昂贵过程。您可以指定要创建的最小连接池,并在应用程序的生存期内保持打开状态。然后将这些重用于每个数据库调用。
  • 应使用事务隔离级别“读取未提交”
  • 应针对一个请求对多个操作使用相同的数据库连接
  • 所有API,方法都应为Async方法,请确保不要将Async与Sync混用。

    非常感谢!

1 个答案:

答案 0 :(得分:0)

首先使用JMeter,以NON GUI模式运行测试,以确保没有错误的结果并遵循最佳实践,请参阅:

一旦确认问题是真实的,请检查多项内容:

  • 没有N + 1个选择问题(查询循环)
  • 检索到的数据的粒度,您是否要检索太多数据
  • 通过查看数据库发出的SQL查询的性能?
  • 泳池大小

查看一些有趣的博客: