Interpreting Performance Results – Part 1
I was recently asked by a blog visitor what i do with my jmeter performance results, and how i fill those bottlenecks. I think one of my last experiences is the best answer, and is also a good starting point in discussing the subject.
So, the facts are: we have the performance results, the nice looking graphs telling us lots of values. How do you tell there’s a performance bottleneck based on these results, and, more important, how do you fill the bottleneck?
I will use one of the tests i have last performed in order to answer this question. This testplan works with 30 Virtual Users, logging in, joining a particular session, and doing some things afterwards (irelevant for the purpose of this discussion)
Let’s see the test results for this relatively small load :
Like i said, after loggin in, the users join a specific session. The business case behind the Join Session request, requires several DB transactions (mainly selects, collecting history information about the user joining the session)
The red part displays the following information: the 50% line, 60% line, 70% line, 80% line, 90% line, where the last column (the grey one) displays the average number of business transactions / second.
I will repeat the definition of the 90 % line, so it is clear for everyone reading this post. The 90 % line is the maximum response time that 90 % of all business transactions receive. In other words, 90 % of the users receive a response time of 10,3 seconds, or better.
Well, 10 seconds for a request of this kind shows a problem with the DB transactions. Therefore, the next step was enabling the eclipse persistence logging, and doing a detailed analysis of all SQL querys run against the database in one “join session” business transaction. Once i filtered this information, i grouped the querys, and run them one by one against the database, also enabling the explain plan (oracle db)
This is how i found three querys running on unindexed large tables, consuming a lot of CPU Time on the DB server. Enabling indexes on those tables dramatically improved the response times for the “join session” transaction:
As you can see, the response time improved from 10 seconds to less than 100 milliseconds.
Well, this is just one example of how i use JMeter results to detect and solve performance problems. More complicated stuff will come. I hope that by this i have answered Nirali’s question.
Cheers and have a good day