How to Fix Performance Problems
Performance of a system can easily be improved, with a little planning and experience/skills
But there is a asymptotic aspect of improving performance, you eventually get less bang (small % increase in performance metric) to the time spend doing so
Thus avoid major spending too much time optimising, unless it is required (SLA)
Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution
performance is a part of usability, and often it must eventually be considered more carefully.
Be aware when optimising, locally it might be slower on your machines compared to production
The benchmarks used or how they are collated might not be accurate
The compiler might do it's own optimisations after several repetitions
Just measuring, will influence the performance too
How
Need to analyse the system
Need metrics
Need evidence
Need to be able to replay this area of optimisation, to test your fix works
Need to find the bottlenecks
places where most of the resources are consumed
No need to focus on optimising anything if it counts for a small % of computation time.
Focus on the big rocks first, the easy wins
To do this, you will need tools, llike a profiler or other apps
logs will also help too
Focus on things that will improve the system at least 2x for that metric
Or some big factor
Any change that is made, will require testing, which needs to be factored in
Is the change to hard to test (or measure)?
Well designed systems, especially if modular will contain the performance issue in the module (segratated section) and can just focus on that
May allow you to redesign that module instead, as better allocatio of time
Might be the case, that all the easy wins do not help attian your performance goal
This can lead to doing the hard and time consuming stuff
It might be better to redesign system in this case
Less time to improve system and/or much better performance improvements
Examples
Using a database connection pool, instead of connecting to database everytime per call
Using indexes in databases for common column looks up
Using caching for non changing data (or hardly changing data)
unnecessary I/O in inner loops
leaving in debugging statements that are no longer needed
Too many logs
unnecessary memory allocation
inexpert use of libraries
Last updated
Was this helpful?