SQL Server Performance Analysis


Published on

Les comparto la presentación utilizada en la charla sobre optimización de desempeño de SQL Server.


Eduardo Castro Martinez

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

SQL Server Performance Analysis

  1. 1. Ing. Eduardo Castro, PhDecastro@grupoasesor.nethttp://ComunidadWindows.org
  2. 2. Session Objectives: Get familiar with database performance tuning tools, especially what SQL Server 2008 offers Understand methodology of database performance bottleneck analysis Learn features/improvements of SQL Server 2008 that help improve performance
  3. 3. Target the most challenging and innovativeSQL Server applications10+ TB DW, 3k/tran/s OLTP, Large 500GB+ Cubes, Competitive migrations,Complex deployments, Server Consolidation (1000+)Invest in large scale, referenceable SQL Server projectsacross the world Provide SQLCAT technical & project experience Conduct architecture and design reviews covering performance, operation, scalability and availability Offer use of HW lab in Redmond with direct access to SQL Server development team
  4. 4. Performance Tuning ToolsI/O BottleneckCPU BottleneckMemory Bottleneck
  5. 5. System Performance Monitor (Perfmon)SQL Profiler TraceDynamic Management Views/FunctionsDBCC commandsSQLDiag (Shipped with SQL 2005/2008)SQLIO, SQLIOSimKernRateDebugging tools (Windbg, DebugDiag,…)More…
  6. 6. Data Collector & Management DataWarehouse (MDW)Extended EventsActivity MonitorNew DMVs/DMFs
  7. 7. MDW Host MDW Client Workstation Target Server Snapshot Data dcexec.exe Management Studio SSIS Pkgs CacheCollection Set MDW Metadata Files ReportsJob Metadata SQL Agent msdb
  8. 8. Time lineNavigation controlResource usage
  9. 9. Highly scalable with low overheadFuture of SQL tracing
  10. 10. Built-in system_health sessionselect event_session_id, name, startup_state fromsys.server_event_sessionsSession definition examplecreate event session session_error on server ADD EVENT sqlserver.error_reported (action (sqlserver.sql_text, sqlserver.tsql_stack, sqlserver.client_app_name) where error = 50001) ADD target package0.ring_buffer with (max_dispatch_latency = 1 seconds)goalter event session session_error on server state = start;go
  11. 11. Memory allocation tracking sys.dm_os_memory_brokers sys.dm_os_memory_nodesReqource Governor sys.dm_resource_governor_configuration sys.dm_resource_governor_resource_pools sys.dm_resource_governor_workload_groupsQuery performance (hash value for query and plan) sys.dm_exec_query_stats Sys.dm_exec_requests sys.dm_exec_procedure_stats sys.dm_exec_trigger_statsMore…
  12. 12. Bottleneck – A point or component of aprocess where throughput is the slowest.Understanding where time is spentElapsed Time = Running + WaitingKey is the waiting - what type of wait(s)?
  13. 13. Monitor and identify I/O bottleneck Resource Monitor & Performance Monitor MDW DMV & Extended EventsWhat is driving high I/O load? Inefficient query plan Too much data to read/write Slow I/O subsystem
  14. 14. File level I/O throughput and diskresponse time
  15. 15. RuntimePerformance monitoring System ReportsWhat counters to look at?
  16. 16. Physical Disk Object: Avg. Disk Queue Length Avg. Disk Sec/Read Avg. Disk Sec/Write %Disk Time Disk Transfers/Sec Avg. Disk Bytes/Read Avg. Disk Bytes/Write Disk Read Bytes/Sec Disk Write Bytes/SecSQL Server Buffer Manager Object: (memorypressure could cause I/O pressure) Buffer Cache hit ratio Page Life Expectancy Checkpoint pages/sec Lazywrites/sec
  17. 17. Page I/O waitsin Buffer poolWriteLog and LogBuffer waits
  18. 18. High I/O Latch sys.dm_os_wait_stats Wait Time sys.dm_exec_requestspending/stalled sys.dm_io_pending_io_requests I/O sys.dm_io_virtual_file_stats ERRORLOG This is 15 second delay in IOwarnings of I/O completion way too delays slow
  19. 19. sqlos package sqlserver package• async_io_requested • physical_page_read• async_io_completed • physical_page_write• wait_info • file_read• wait_info_external • file_write • long_io_detected 2009-04-13 18:30:10.170 spid5s SQL Server has encountered 1 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [T:tempdbtemplog.ldf] in database [tempdb] (2). The OS file handle is 0x0000000000000670. The offset of the latest long I/O is: 0x000007eecac000 king longer than 15 seconds to complete on file [e:myslowdb.mdf] in database [myslowdb] (1). The OS file handle is 0x00000438. The offset of the latest long IO is: 0x000000513ce000
  20. 20. Look if there is memory pressureFurther narrow down to what queries aregenerating the I/O workload. Tune thesequeries.Explore data compression to reduce I/OloadUpgrade storage hardware
  21. 21. Compress tables/indexes to reducedatabase sizeCompression ratio depends on schema &data distribution (avg 50-60%)Reduce query runtime I/O (increase cpu)Identify compression candidates sp_estimate_data_compression_savings sys.dm_db_index_operational_stats
  22. 22. Sustained %Processor Time > 80% Performance Monitor/Task Manager MDW Server Activity Report DMV & Extended EventsWhat is driving high CPU? Recompilations Cursors Inefficient query plans More…
  23. 23. Resource • Monitor it LiveMonitor/Task ManagerPerformance Monitor • Watch Live or Log Counters counters you likeSystem Data Collector • Formatted Perfmon Reports counter based reportWindows Performance • Dig deeper using ETW Toolkit (XPerf)
  24. 24. Processor object: %Privileged Time %Processor Time New in SQL Server 2008 for Resource %User Time Governor featureProcess object (SQL Server): %Privileged Time %Processor Time %User TimeSQL Server:Workload Group Stats CPU usage % Max request cpu timeSQL Server:Resource Pool Stats CPU usage % CPU usage target %
  25. 25. SQL Server:SQL Statistics Batch requests/sec SQL Compilations/sec SQL Re-Compilations/secSQL Server:Cursor Manager by TypeSQL Server:Cursor Manager Total Concurrent processing of multiple cursors could be cpu intensive
  26. 26. Total CPU waitsCPU cyclesthat did the real work Wait in runnable queue Threadvoluntarily yields
  27. 27. sys.dm_exec_query_statsSys.dm_exec_sessions sys.dm_exec_requests sys.dm_exec_procedure_stats Sys.sysprocesses sys.dm_exec_trigger_stats cpu_time cpu_time total_worker_time cpu total_scheduled_tim e total_elapsed_time total_elapsed_time Backward compatibility view Sql_handle/query_h total_elapsed_time query_hash ash
  28. 28. sqlos package sqlserver package•scheduler_monitor_non_yielding_ring_buffer_recorded •sql_statement_completed•spinlock_backoff •sp_statement_completed•Wait_info •cursor_manager_cursor_end•wait_info_external •checkpoint_end Extended Event can track individual statement level events like Profiler does with minimal impact - ADD EVENT sqlserver.sql_statement_completed (action (sqlserver.sql_text) WHERE duration > 0), ADD EVENT sqlserver.sp_statement_completed (action (sqlserver.sql_text) WHERE duration > 0) select top 10 CONVERT(xml, event_data).value((/event/data/value)[4],int) as cpu
  29. 29. High cpu doesn’t necessarily mean it’s aproblem.Drill down to specific workload and queriesthat drive cpu usage. Tune them.Use Resource Governor to protect highpriority workloadsUpgrade hardware
  30. 30. Resource Governor allocate cpu/memory to prioritized workloads based on connection string parameters Mixed workloads: OLTP, Reporting, MaintenanceSoft Numa Node configuration (soft numa node and cpu affinity) Network Configuration (soft numa node and tcp port)
  31. 31. Monitor and identify memory pressure Performance Monitor/Task Manager MDW Server Activity Report DMV & Extended EventsWhat is eating up my memory? External or internal memory pressure Inefficient query plan (hashing, sorting,…)
  32. 32. AWE 32-bit uses AWE to cache data/index pages 64-bit uses AWE to implement “Locked pages in memory” Environment Virtual Address Max physical Space memory 32-bit on 32-bit OS 2 GB 64 GB 32-bit on 64-bit OS (Wow) 4 GB 64 GB 64-bit on 64-bit OS 8 TB 2 TB
  33. 33. Perfmon is golden tool to identify memorypressureMemory object: Available K/M bytes Commit Limit Paging File %Usage (Peak) Page reads/secProcess object: Private bytes Virtual bytes Working set
  34. 34. SQL Server Memory Manager object: Connection Memory Lock Memory Somebody is waiting on Optimizer Memory memory Memory Grants Pending …SQL Server Buffer Manager object: Buffer cache hit ratio Checkpoint pages/sec Free list stalls/sec Free pages Lazy writes/sec Page life expectancy How long will the page Stolen pages live? Target pages Total pagesSQL Server Plan Cache objectSQL Server Resource Pool Stats object
  35. 35. Query execution waits on memory for sorting, hashing,…
  36. 36. DBCC MEMORYSTATUSsys.dm_os_sys_memory system_memory_state_desc a good indicator of available physical memorysys.dm_os_process_memory process_physical_memory_low = 1 indicates low physical memory. memory_utilization_percentage value below 100% indicates external memory pressure.sys.dm_os_memory_clerks
  38. 38. sqlos package sqlserver package• page_heap_memory_allocated • sort_memory_grant_adjustment• page_heap_memory_freed • plan_cache_cache_hit• memory_node_oom_ring_buffer_recorded • plan_cache_cache_attempt • cursor_manager_cursor_memory_usage 2009-04-14 09:27:15.43 spid62 Failed allocate pages: FAIL_PAGE_ALLOCATION 1
  39. 39. Check memory configuration – sp_configureExternal memory pressure – Identify whatother processes are competingInternal memory pressure – Identify whichSQL component is main consumerWorkload/query tuning (sorting, hash join…)Resource GovernorHardware upgrade
  40. 40. Focus on methodology – no guessCorrelate data points from multiple toolsPerformance tuning is iterative process –bottleneck could moveResource contention impacts each other Lack of memory -> high cpu & I/O Slow I/O -> tempdb contention …
  41. 41. Ing. Eduardo Castro, PhDecastro@grupoasesor.net
  42. 42. “Troubleshooting Performance Problems in SQL Server2008” http://msdn.microsoft.com/en-us/library/dd672789.aspx