Thursday, October 18, 2012

Where to focus your effort regarding software performance and availability

In order to work effectively we need to focus our efforts on certain areas of the system.
Normally, we make a choice based on risk analysis (e.g. which component have strict requirements/SLA, which components have new technology) and benefit (features which yield product differentiation). In this blog we will see 2 another insights from the literatures.


Meijer et. al. argued that to improve performace the most important area is the application/query design/implementation  (e.g. avoid select * & cartesian product) . Furthermore, the next focus candidates are (in order of important): database design (e.g. normalization/denormalization, indexes), hardware (e.g. disk defragmentation), database-engine tuning (e.g. SQL Server) and OS-tuning (e.g. shared memory parameters).

So before spending much time digging to SQL database optimization, better to inspect your query first.

High availability

Marcus & Stern argued that for high availability, the most important area is the System Administration Design/Practices e.g. keep it simple, reuse config, separate environtment (prod,test,dev), SLA, pareto, plan, change control, single point of failure, etc.

Surprisingly there are many areas which are more important than services/application design (in order of important): backup, disk/storage management, networking, environment (UPS / backup electricity, cooling, data center racks), client/people/process management.

Please see my software review checklists and database design checklists / guidelines:

Source: Steve's blogs

Any comments are welcome :)


Blueprints for High Availability by Marcus & Stern

Improving .NET Application Performance and Scalability by Meier

No comments: