Just what is Performance?  I don't mean a formal definition of Performance - 
through it would probably involve things like measurements and elapsed 
time and resources used and units of work completed.  And I don't mean 
Performance Tuning - which is a reactive action to a perceived problem. 
 I'm on about how you design Performance into a new application or 
database.  As a proactive action when designing and building a new 
database based application.  What do you do differently compared to if 
you did not care about Performance and simply ignored it?
I 
believe a "Performance Based Design" has to think about how the 
application will be used.  One of my personal sayings about performance 
is that computer systems and applications do absolutely nothing until 
end users submit some work for them to do.  The application sits there 
waiting for another request to be submitted.  So the performance of the 
application totally depends on the work the application is trying to do,
 which in turn depends on what the end users are doing.  I don't believe
 Performance can exist in isolation from an Application, much like Data 
without a Program to process it is not much use to anyone.
Which 
means that designing with Performance in mind is really about clearly 
documenting how the application will be used, so that those use cases 
can feed into the final design, and be used to review the application 
once implemented.  From a database point of view, this not only means 
finding out all the data items and the relationships between them - 
fairly standard database design type stuff - but also establishing which
 data items will be accessed more frequently than others.
Generally
 I agree with the argument about "premature performance optimization", 
where someone tries to immediately optimize part of the first design for
 best possible performance, without knowing whether it is a critical 
part of the application or not.  A good design will be good enough 
(Agile principles too I believe), while being deliberately designed to 
allow changes in the future.  Performance bottlenecks can be redesigned 
and rewritten when they are identified as real bottlenecks, and not 
before.
Keeping your options open within your design is important
 in being able to achieve good performance.  Inflexible designs do not 
leave any room for improvement, without major modifications and 
rewrites.
Instrumenting the application is another very important
 thing to factor in.  Building in performance measurement to your 
application will set you up to be able to identify any bottlenecks, and 
to turn nebulous "slowness" as perceived by end users into real numbers -
 both before and after any performance improvements you have made.  It 
can also provide an audit trail of performance over time and can be used
 to show whether response time is indeed increasing, and whether the 
workload of transactions submitted has also increased.
Thursday, 31 May 2012
Subscribe to:
Post Comments (Atom)
 

No comments:
Post a Comment