Performance Profile of OLTP applications
Performance and Tuning Blue Prints
We will look at different types of applications, how they use resources, and how one would approach performance tuning each. The performance profile of OLTP differs significantly from a Relational Data Warehouse or Reporting application. It is helpful to understand these differences and the objectives for high performance.
OLTP blueprint
For example, OLTP applications are characterized by high volumes of small identical transactions. These can include SELECT, INSERT, UPDATE and DELETE operations. The implications are significant in terms of database design, resource utilization and system performance.
OLTP Performance blue print objectives. There are performance problems if any of the following are true. Note: Actual value used in Value column can be debated
Resource issue Rule Description Value Source Problem Description
Database Design Rule 1 High Frequency queries having # table joins >4 Sys.dm_exec_sql_text, High Frequency queries with lots of joins may be too normalized for high OLTP scalability
Sys.dm_exec_cached_plans
Rule 2 Frequently updated tables having # indexes >3 Sys.indexes, sys.dm_db_operational_index_stats Excessive index maintenance for OLTP
Rule 3 Big IOs >1 Perfmon object Missing index, flushes cache
Table Scans SQL Server Access Methods
Range Scans Sys.dm_exec_query_stats
Rule 4 Unused Indexes index not in* * Sys.dm_db_index_usage_stats Index maintenance for unused indexes
CPU Rule 1 Signal Waits > 25% Sys.dm_os_wait_stats Time in runnable queue is
pure CPU wait.
Rule 2 Plan re-use < 90% Perfmon object OLTP identical transactions should ideally have >95% plan re-use
SQL Server Statistics
Rule 3 Parallelism: Cxpacket waits >5% Sys.dm_os_wait_stats Parallelism reduces OLTP throughput
Memory Rule 1 Avg page life expectancy < 300 (seconds) Perfmon object Cache flush, due to big read
SQL Server Buffer Manager Possible missing index
SQL Server Buffer Nodes
Rule 2 Avg page life expectancy Drops by 50% Perfmon object Cache flush, due to big read
SQL Server Buffer Manager Possible missing index
Rule 3 Memory Grants Pending >1 Perfmon object Current number of processes waiting for a workspace memory grant
SQL Server Memory Manager
IO Rule 1 Avg Disk seconds / read > 20 ms Perfmon object Reads should take 4-8ms with NO IO pressure
Physical Disk
Rule 2 Avg Disk seconds / write > 20 ms Perfmon object Writes (sequential) can be as fast as 1ms for transaction log.
Physical Disk
Rule 3 Big IOs >1 Perfmon object Missing index, flushes cache
Table Scans SQL Server Access Methods
Range Scans
Rule 4 If Top 2 values for wait stats are any of the following: Top 2 Sys.dm_os_wait_stats If top 2 wait_stats values include IO, there is an IO bottleneck
1. ASYNCH_IO_COMPLETION
2. IO_COMPLETION
3. LOGMGR
4. WRITELOG
5. PAGEIOLATCH_x
Blocking Rule 1 Block percentage > 2% Sys.dm_db_index_operational_stats Frequency of blocks
Rule 2 Block process report 30 sec Sp_configure, profiler Report of statements
Rule 3 Avg Row Lock Waits > 100ms Sys.dm_db_index_operational_stats Duration of blocks
Rule 4 If Top 2 values for wait stats are any of the following: Top 2 Sys.dm_os_wait_stats If top 2 wait_stats values include locking, there is a blocking bottleneck
1. LCK_x