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:
Posts (Atom)