630 likes | 647 Views
Managing SQL Server Performance. AtlantaMDF August 11, 2003 By Larry Ansley. Performance Maximization Plan In Only 4 Easy Steps. Denormalize Index Everything Use Full-Text Searches Liberally Get a Bigger, More Powerful System. Performance Areas Hardware. Memory CPU Storage Network.
E N D
Managing SQL ServerPerformance AtlantaMDF August 11, 2003 By Larry Ansley
Performance Maximization PlanIn Only 4 Easy Steps • Denormalize • Index Everything • Use Full-Text Searches Liberally • Get a Bigger, More Powerful System
Performance AreasHardware • Memory • CPU • Storage • Network
Performance AreasOperating System • Configuration • Version Upgrades
Performance AreasOperating System • Configuration • File Management • Version Upgrades
Performance AreasSQL Server • Configuration & Options • File Management • Version Upgrades
Performance AreasDatabases • Configuration & Options • Tables • Indexes • File Management
Performance AreasStored Procedures • Logic • Best Practices
Performance Killers • Poor indexing • Inaccurate statistics • Excessive fragmentation • Non-reusable execution plans • Frequent recompilation • Excessive blocking and deadlocks • Poor query design
Performance Killers • Poor database design • Improper cursor use • Ineffective connection pooling • Improper database log configuration
Taming The Performance Killers • Planning • ER Diagrams • Data Modeling • Capacity Requirements • Procedure Case Analysis • Follow Best Practices in Development
Taming The Performance Killers • Good Record Keeping • Logs • Baselines • Audits
Performance BaselinesBenefits • Allows us to analyze resource bottlenecks • Allows us to troubleshoot by comparing system utilization patterns with pre-established baselines • Allows us to make accurate estimates in capacity planning and scheduling hardware upgrades
Performance BaselinesBenefits • Aids us in identifying low utilization periods, when we can execute administrative activities • Helps us distinguish between performance perception and reality
Performance BaselinesBaseline Tools • System Monitor (Key Resource Counters) • CPU – % Processor Time (85%) • CPU – Processor Queue Length (2) • Memory – Available Bytes (4 MB) • Memory – Pages / Sec (20) • Memory – Buffer Cache Hit Ratio ( 90%)
Performance BaselinesBaseline Tools • System Monitor (Key Resource Counters) • Disk – % Disk Time (90%) • Disk – Avg. Disk Queue Length (number of spindles + 2) • Network – % Net Utilization (30% for Ethernet) • SQL Server – User Connections
Performance BaselinesBaseline Tools • SQL Profiler • Record Traces for Major Processes • Duration, CPU, Reads, Writes
Performance Audit • System Monitor • Hardware • Operating System • SQL Server Configuration • Database Settings • Indexes • Application and Transact-SQL
Performance AuditSystem Monitor • Processor: % Processor Time • Recurring period exceeding 80% indicate CPU bottlenecks • System: Processor Queue Length • Recurring periods exceeding 2 per CPU indicate CPU bottlenecks • Consider Maximum Worker Threads setting
Performance AuditSystem Monitor • Memory: Pages / Sec • Average around 0 over 24 hours • Average over 20 indicates memory bottleneck • Memory: Available Bytes • Should be greater than 5 MB • Dedicated SQL Servers attempt to maintain 4-10 MB free • Less than 5 MB indicates a memory bottleneck
Performance AuditSystem Monitor • SQL Server Buffer: Buffer Cache Hit Ratio • For OLTP application, should exceed 90%, ideally around 99% • OLAP (Analysis Services) application work well with lower ratios • SQL Server General: User Connections • If this exceeds 255, Maximum Worker Threads setting should be increased to remain greater than user connections, thus avoiding thread sharing.
Performance AuditSystem Monitor • Physical Disk: % Disk Time • Should run less than 55% • Recurring periods (10 minutes or more) exceeding 55% indicate I/O bottlenecks • Physical Disk: Avg. Disk Queue Length • Should run less than 2 per spindle • Recurring periods exceeding 2 indicate I/O bottlenecks
Performance AuditHardware • Number of CPUs • CPU MHz • CPU L2 Cache Size • Physical Ram Amount • Total Amount of Available Drive Space on Server • Total Number of Physical Drives in Each Array
Performance AuditHardware • Hardware vs. Software Raid • RAID Level of Each Array Used • Disk Fragmentation Level • Location of Operating System • Location of SQL Server Executables • Location of Swap File • Location of tempdb Database
Performance AuditHardware • Location of System Databases • Location of User Databases • Location of Log Files • Number of Disk Controllers in Server • Type of Disk Controllers in Server • Size of Cache in Disk Controllers In Server • Is Write Cache in Disk Controller On or Off
Performance AuditHardware • Speed of Disk Drives • How Many Network Cards Are in Server • Are the Network Cards Hard-Coded for Speed/Duplex • Are the Network Cards Attached to a Switch • Are All the Hardware Drivers Up-to-Date • Is This Physical Server Dedicated to SQL Server
Performance AuditOperating System • Are the Disk Partitions NTFS 5.0 • Is “NTFS Data File Encryption and Compression” Turned Off • Is the Server Updated With the Latest Service Pack • Does the Server Have the Most Current, Microsoft-Certified Hardware Drivers
Performance AuditOperating System • Is the Windows 2000 Server Configured as a Stand-Alone Server • Are the Physical Files on the Server Overly Fragmented • Is the “Application Response” Setting Set to “Optimize Performance” for “Background Services” • Has Security Auditing Been Turned On
Performance AuditOperating System • How Large Is the Server’s PAGEFILE.SYS swap file • Have Unnecessary Services Been Turned Off • Have All Unnecessary Network Protocols Been Turned Off
Performance AuditIndexes • Have you run the Index Tuning Wizard recently • Does every table in each database have a clustered index • Are any of the columns in any table indexed more than once • Are there any indexes that are not being used in queries
Performance AuditIndexes • Are the indexes too wide • Do the tables that are joined have the appropriate indexes on the joined columns • Are the indexes unique enough to be useful • Are you taking advantage of covering indexes • How often are indexes rebuilt • What is your index fillfactor
Performance AuditTransact-SQL • Does the Transaction-SQL code return more data than needed • Are cursors being used when they don’t need to be • Are Union and Union Select properly used • Is Select Distinct being used properly • Is the Where clause Sargable • Are temp tables used when they aren’t needed
Performance AuditTransact-SQL • Are hints being properly used in queries • Are view unnecessarily being used • Are stored procedures being used whenever possible • Inside stored procedures, is Set NoCount On being used • Do any of your stored procedures start with sp_
Performance AuditTransact-SQL • Are all stored procedures owned by DBO and referred to in the form of databaseowner.objectname • Are you using constraints or triggers for referential integrity • Are transactions being kept as short as possible
Performance AuditApplications • Is the application using stored procedures, strings of T-SQL code, or using an object model, like ADO, to communicate with SQL Server • What method is the application using to communicate with SQL Server: DB-Lib, DAO, RDO, ADO, .Net • Is the application using ODBC or OLE DB to communicate with SQL Server
Performance AuditApplications • Is the application taking advantage of connection pooling • Is the application properly opening, reusing, and closing connections • Is the T-SQL code being sent to SQL Server optimized for SQL Server, or is it generic SQL • Does the application return unnecessary data
Performance AuditApplications • Is the application taking advantage of connection pooling • Is the application properly opening, reusing, and closing connections • Is the T-SQL code being sent to SQL Server optimized for SQL Server, or is it generic SQL • Does the application return unnecessary data
Performance AuditApplications • Does the application keep transaction open when the user is modifying data
Monitoring & Measuring Tools • Enterprise Manager • Query Analyzer • System Monitor • SQL Profiler • 3rd Party
Monitoring & Measuring ToolsEnterprise Manager • Management / Current Activity • Process Info (sp_who2) • Locks / Process ID (sp_lock) • Locks / Object (sp_lock) • Management / SQL Server Logs
Monitoring & Measuring ToolsQuery Analyzer • sp_who / sp_who2 • sp_lock • sp_spaceused • sp_monitor • Showplan_Text • Showplan_All • Set Statistics IO • Set Statistics Time • Set Statistics Profile