Entity framework core stress testing is slow

810 views Asked by At
  • I build a .net core 2.1 application with EF core.

  • I have use Transaction with read uncommitted isolation level.

  • I build the async API and create a simple ef query async (get 5 fields of first user, not reference to other table). [query user][1]

  • When i create a single request, the query take small time

  • When i stress test with 10 threads, ramp-up: 5, loop forever (using jmeter), the query time is same

  • However, when i stress test to the api using jmeter (100 threads, ramp-up: 20s, loop forever), some query take small time, some query take large time (maybe 5s, 10s, 25s ...), another query throw connection timeout exception

  • what should i do?

Issue resolved: Take some days to investigating, i tried with this solution and it's working well. So, i will share it on this post, if you have other solutions to increase the performance, pls tell me about it.

  • Creating database connections is an expensive process that takes time. You can specify that you want a minimum pool of connections that should be created and kept open for the lifetime of the application. These are then reused for each database call.

  • Should use transaction isolation level "Read Uncommitted"

  • Should use the same Database Connection for multiple operations on one request

  • All APIs, methods should be Async method, make sure do not mixing Async with Sync.

    Thanks all !!!

1

There are 1 answers

1
UBIK LOAD PACK On

First using JMeter, run your test in NON GUI mode to ensure you don't have wrong results and follow best-practices, see:

Once you confirmed issues are real, check multiple things:

  • No N+1 Select issue (loops of queries)
  • Granularity of retrieved data, are you retrieving too much data
  • performances of SQL queries issued by looking at DB ?
  • Pool size

See some interesting blogs: