Microsoft SQL Server Administration for SAP Performance Monitoring and Tuning
2 Overview
3 Database Performance Analysis
4
5
6 Cache and CPU Tuning Poor SQL statements? Cache hit ratio > 95%? 2 * CPU idle > CPU busy? OS paging? All CPUs available for SQL Server? Tune poor statements Increase server main memory Add CPU(s) to server Increase CPUs for SQL Server + Yes No ? Yes No
7 Database Configuration affinity mask awe enabled cost threshold for parallelism max degree of parallelism fillfactor index create memory lightweight pooling Locks / open objects / connections Max/Min server memory
8 Database Configuration max worker threads min memory per query network packet size / protocol priority boost query governor cost limit query wait recovery interval set working set size
9 Server Parameters
10 I/O System Tuning Slow RAID identified? Avg. disk queue length > 2 * phys. Disks in RAID RAID 5 and mostly write queue? Check all logical disks with NT perfmon Switch to RAID 0+1 Decrease max async I/O Yes No ? Yes Peak I/O on I/O bus < 133 MB/sec Add / speed up I/O bus Peak I/O on RAID < 40 MB/sec No Yes Add RAID + move disks Yes Check disk + controller No
11 Server Configuration DisklayoutDisklayout ParametersettingsParametersettings HardwareconfigurationHardwareconfiguration Main memory CPUCPU DisksDisks Poor database configuration configuration Poor configuration Cache hit ratio SQL Server CPU utilization DB error log High I/O times Operating system paging CPU utilization Disk response times >95% 2 * idle > busy (SQL Server) Select 1 row via prim. key > 10 ms 2 * idle > busy (total) Wait queue and low transfer rate Page in > 100 MB / h
12 Isolation level Scan type (Range, Table, Probe) # of rows in scan # of rows/page Locking strategy (Table, Page, Row) Operation type (scan, update) Dynamic Locking
13 To lock a fine granule must place intent locks at higher granules T1: IX T1: X T2: IS T2: S Table PagePagePage RowRowRow Multi-Granular Locking
14 ModeDescription SShare - used for reading XExclusive - typically used for writing UUpdate - used to evaluate prior to writing ISIntent Share - share locking at finer level IXIntent Exclusive - X locking at finer level SIXShare Intent Exclusive Lock Modes Standard multi-granular lock modes
15 Resource Type Resource Specific Data Database ID HOW does SQL lock ? How do you identify a lock? Lock “resource” Table “Authors” Page 23 Row with Key = “23812” Lock manager knows nothing about resource format; it simply does a “memcmp()” Lock resource format:
16 Example resource formats: Table: Page: RowID: Key: Object ID 2:3286 File#: Page# 2:328:119 File# : Page# : Slot on Page :2: Object ID : IndexId : 6byte Hash Resource type Database ID Lock Resource Format
17 New Lock Hints Granularity Hints ROWLOCK, PAGLOCK,TABLOCK ISOLEVEL Hints HOLDLOCK, NOLOCK READCOMMITTED, REPEATABLEREAD, SERIALIZABLE, READUNCOMMITTED [All New]
18 New Lock Hints READPAST Useful for implementing work queues UPDLOCK Select for update Deadlock due to select for update Starving lock waits LOCK_TIMEOUT(not a hint) Application response time
19 Concurrency issue analysis sp_who, sysprocesses sp_locks SQL Profiler sp_indexoption Deadlock DBCC inputbuffer Kill Lock waits Latches
20 Time 1. Work process 2. Work process 3. Work process 4. Work process Acquires MARA Lock A long period of processing Commit Update MARA Working... WAITING! Update MARA Requests MARA Lock Acquires MARA Lock Commit Working... WAITING! Update MARA Requests MARA Lock Acquires MARA Lock WAITING... Update MARA Requests MARA Lock MARA Locked by: WP 1WP 2WP 3 Lockwait Situations
21 Monitoring Lockwaits R/3 Lock Monitor
22 Process info from SQL Enterprise Manager
23 Locks from SQL Enterprise Manager
24 Locks from SQL Enterprise Manager
25 ST04 Detailed Analysis
26 Top Largest Tables
27 Top Largest Updated Tables
28 ST05
29 Table Analysis
30 Table Statistics
31 Selectivity
32 Density
33 DBCC Showcontig
34 Performance History
35 System Tables
36 System Procedures
37 Name Cache Stats
38 Stats on SPs
39 Stats on SPs
40 Stats on SPs
41 Stats on SPs
42 Stats on SPs
43 Query issues Unnecessary results Select with no where clause Select * instead of selecting few columns Queries not qualified properly Poorly written queries Missing index Old statistics Incorrect optimization Index Tuning Wizard
44 Choosing index Space utilized by index Index maintenance overhead To cluster or not Bookmark lookup Range scan(OLTP Vs OLAP) Index columns Short & with high selectivity Often used in many statements Covered Multi index query
45 Monitoring Query execution Analyze query execution plan Analyze the right plan - connection settings spid, blocked, waittype, cpu physical_io, memusage, open_tran from sysprocesses Execution plan, read, write, duration in SQL Profiler
46 Monitoring Query execution Stats I/o Stats time Write your own trace Expected time / threshold Worktable Scan Vs Seek
47 Query execution Query Hints Join, Index, Lock, Processing Distributed query execution TOP / SET ROWCOUNT FASTFIRSTROW IN / OR and subquery Selecting with alias
48 Using stored procedures Cached execution plan Recompiled when stats changes Warning: Wrong Parameter to stored proc Binding parameter by position Set nocount sp_executesql Auto-parameterization in SQL7 sp_recompile
49 Table statistics Auto update stats Rowmodctr and StatVersion Fullscan and sampling Auto column stats Explicit update stats Explicit column stats sp_autostats Queue / log table sp_recompile
50 Tuning Expensive SQL Statements Poor statement DDIC info SQL Explain Where used list Is there a suitable index? Good Optimizer decision? Inefficient coding? Update statistics Re-code Yes No Index statistics up to date? No Re-code or change index Yes Statistics page Autoupdate stats on? Switch on auto updstats Yes No
51 Lab Improve the slow running report Use ST05 Stats on SPs(ST04) And other methods
52 Summary Write module summary