What is your first step in solving performance issues in an existing application? Yeah, You answer me that I must be proactive in performance modeling. But we live in real world, we can't prepare ourselves for future performance issues, in advance. Assume our customer is not satisfied about application performance, what is our first step to identify the exact point of performance issue. I think the first step is thinking structurally and modeling the application in performance perspective. The following is the initial list for thinking structurally to model the points that affects the performance of the application (I assume you have a LOB application that was deployed 3-tier):
· Database Server - Data Tier
o RDBMS
§ Physical File Design
§ Example: Spreading filegroups in different physical hard drives.
§ Logical Database Design
§ Denormalization
§ Partitioning
§ Vertical Table Design
§ Horizontal Table
§ Considering performance when mapping inheritance to relation
§ Single Table Inheritance vs. Concrete Table Inheritance vs. Class Table Inheritance
§ Query Tunings
§ Order of Join operations
§ Database Engine Settings
§ The amount of memory is available to the database engine
§ OS Setting
o Hardware Settings
· Application Server - Application Tier
o Data Access Layer
§ Database Provider (Database Middleware)
§ ODBC vs. OLEDB
§ Data Access Method
§ Considering Batch Update
§ Consider using Bulk Copy
§ Connected vs. Disconnected Methods
§ In-Memory Data Structure
§ Array vs. Collections
o Business Layer
§ Activity Logging Method
§ Sync Logging vs. Async Logging
§ Business Calculation
§ Workflow engine performance consideration
o Service Layer
§ Entity Translator
§ Serialization Method
§ Binary vs. SOAP vs. JSON vs. Custom
· Client - Presentation Tier
o Service Discovering
o Control Rendering
o Data Caching (in Client Proxy)