applicatieplatform congres 12 & 13 maart peter ter braake trainsql
TRANSCRIPT
Applicatieplatform congres12 & 13 maart
Peter ter BraakeTrainSQL
De praktijk
DBAGebruiker
Hij doet het niet
Hij is traag
Performance Optimization Model
Server TuningServer Tuning
LockingLocking
IndexingIndexing
Query OptimizationQuery Optimization
Schema DesignSchema Design
Schema design
• Slecht ontwerp = slechte performance !
• Normaliseren / Denormaliseren– Generaliseren / specialiseren
• Ster (Snowflake)• File / Filegroups
– Hardware (SAN, RAID)• Partitioning• Views, sprocs, functions• SQL Server 2008:
– Filestream– Sparse columns– Compression
DB
App(s)
Workload
Symptomen
• Veel IO• Hoog memory verbruik• Hoog CPU gebruik• Veel locking
WAITS
Performance Optimization Model
Server TuningServer Tuning
LockingLocking
IndexingIndexing
Query OptimizationQuery Optimization
Schema DesignSchema Design
What Is Query Logical Flow?
From&
Join
Where
Order By
SelectResult
Set
HavingGrouping
and Aggregation
RowsResult
SetResult
Set
Non-aggregate query
Aggregate query
Order By
The Query Logical Flow DiagramThe Query Logical Flow Diagram
Cost Based OptimizationStatistics
Query plans
• Data Retrieval operators:– Table scan– Index scan– Index seek– Row ID Lookup
• Join operators– Nested Loop Join– Merge Join– Hash Join
Query optimization• Favor set-based logic • Test query variations• Avoid query hints• Use correlated subqueries
– EXISTS i.p.v. join• Avoid user-defined functions in WHERE clause• Use table-valued functions as derived tables• Avoid unnecessary GROUP BY columns
– Gebruik subquery als mogelijk• Use CASE expressions• Divide joins into temporary tables
– DW / partitioning?
Index architecture
• Heap– Ongesorteerd, ongestructureerd
• Clustered index– Gesorteerd, B-Tree, leaf level bevat volledige
records– Telefoonboek
• Nonclustered index– Gesorteerd, B-Tree, leaf level bevat verwijzingen– Studieboek
Tools
• Management Studio:– Execution plans– Set statistics IO– Set statistics time– Client Statistics
• DMV– Sys.dm_???
• Sys.dm_db_index_physical_stats• Sys.dm_exec_query_plan• …
DEMOShow execution plan
Indexing
• Index strategie bepaald door– Grote database– Verdeling data– Workload (type queries en aantal gebruikers)
• Standard reports• Performance Dashboard (Missing indexes)• Profiler• Database Engine Tuning Advisor
Tips
• Gebruik Covering indexes– Vanaf SQL Server 2005: INCLUDE keyword– Vanaf SQL Server 2008: filtered index
• Grote tabellen:– Partitioning– Gebruik temp tables
• Vergelijk queries met Show Execution Plan• Database Engine Tuning Advisor• Sys.dm_db_missing_index_columns
Performance Optimization Model
Server TuningServer Tuning
LockingLocking
IndexingIndexing
Query OptimizationQuery Optimization
Schema DesignSchema Design
Concurrency
A - AtomicityC - ConsistencyI - IsolationD - Durability
Locking and Blocking
• Locks– Shared– Exclusive
• Locking hints– ReadPast– Nolock– …
• Isolation Levels– Read Committed– Read Uncommitted– Repeatable Read– Serializable– Snapshot
– Read Committed Snapshot
Symtomen en tools
• Deadlocks• Time outs• Slechte respons tijden• Non consistent reads
• Current Activity Monitor• Standard reports (server + database level)• Performance dashboard (waits)• Performance monitor• Profiler
DEMOLocking
Tips
• Check Wait stats on blocking• Overweeg Snapshot isolation
– Let op TempDB– READ_COMMITTED_SNAPSHOT– SNAPSHOT
• Voorkom deadlocks, benader objecten in vaste volgorde
Performance Optimization Model
Server TuningServer Tuning
LockingLocking
IndexingIndexing
Query OptimizationQuery Optimization
Schema DesignSchema Design
Tools
• Zeggen helemaal niets zonder referentiekader (= baseline)
• Gevaar schuilt in overkill• Eerst denken, dan verifiëren / uitsluiten
Tools
• SSMS, execution plans• Current Activity Monitor• Standard Reports• Performance Dashboard Reports• Dynamic Management Views / Functions• Performance Monitor• Profiler• Database Tuning Advisor• SQL Server 2008:
– Performance Data Collector
Enkele Disk IO countersObject Counter Waarde Opmerkingen
Physical Disk Avg Disk Reads/sec < 8 > 20 is slecht, < 20 is ok, < 12 is beter, < 8 is
beste
Physical Disk Avg Disk Writes/sec
< 8 or < 1
Zonder cache: > 20 is slecht, < 20 is ok, < 12 is beter, < 8 is beste
Met cache > 4 is slecht, < 4 is ok, < 2 is beter, < 1 is beste
Physical Disk % Disk Time < 90 Tijd dat disk bezig met read/write
Physical Disk Avg. Disk Queue Length < 2 Aantal read/write requests dat gemiddeld in
de wacht staat. Kleiner dan 2 per spindle
Physical Disk Current Disk Queue Length < 2 Aantal read/write requests dat nu in de wacht
staat. Kleiner dan 2 per spindle
Enkele Memory countersObject Counter Waarde Opmerkingen
Memory Page Faults / sec < ? Aantal reads dat niet in de buffer cache gevonden wordt
Memory Available Mbytes > 100 Beschikbare physical memory in computer voor processen
SQL Server: Memory Manager
Memory Grants Pending ~0 Aantal processen dat wacht op geheugen
SQL Server: Memory Manager
Page Life Expectancy >=300
Aantal seconde dat een page in het geheugen blijft zonder gebruikt te worden voordat hij
wordt geflushedSQL Server: Buffer
ManagerFree List Stalls/sec < 2 Frequentie waarmee verzoeken voor buffers
moeten wachten wegens gebrek aan buffers
SQL Server: Buffer Manager
Page reads/sec(Page
writes/sec))< ?
Zo klein mogelijk houden (meer cache, betere indexen, efficientere queries, beter db
ontwerp)
Operating SystemObject Counter Waarde Opmerkingen
Paging %Usage <70% % van de pagefile dat momenteel gebruikt wordt
Processor % Processor Time <= 80% Hoe hoger, hoe groter de kans op
wachttijden.
Processor % Privilege Time< 30% van
% Processor
TimeTijd gebruikt voor Kernel requests zoals IO
Process(sqlservr) % Processor Time < 80% Tijd besteed aan SQL Server
System Processor Queue Length < 4 < 12 per CPU is ok, < 8 is beter, < 4 is beste
Enkele SQL Server CountersObject Counter Waarde Opmerkingen
:Access Methods Forwarded Records/sec < 10 Forwarding pointer gebruikt: < 10 per 100
batch requests/sec.
:Access Methods Page Splits/sec < 20 Aantal Page splits: < 20 per 100 batch requests/sec.
:DatabasesLog
Growths/sec; Percent Log used
< 1 and <80%, resp
Beheer proactief
:SQL Statistics Batch Requests/sec ? Eigen baseline: > 1000 is veel.
:SQL StatisticsCompilations/
sec;Recompilations/sec
? < 10% of batch requests/sec; Recompilations < 10% of compilations/sec
:Locks Deadlocks/sec < 1 Profiler, code aanpassen.
Tip:
• SQL Server 2008 introduceert Resource Governor– Resources toekennen op basis van connection
information via • Classifier Function• Resource Groups• Resource Pools
• Alleen indien nodig
Wat nog mist …
• … is het belangrijkste van allemaal …• … want 80 zegt mij helemaal niets …• … zonder referentie!
• BASELINE
Wat is Performance Data Collector?
• Framework om diagnostische informatie te – Verzamelen– Op te slaan– Analyseren
• Bestaat uit tools voor– Verzamelen van data zonder hoge kosten– Opslaan van de gegevens– Reporting
• Ingebouwd in Server, aanspreekbaar door API’s– Ter vervanging van third party monitoring tools, want
flexibeler?
Componenten• Data Provider
– Informatiebron zoals T-SQL queries, SQL Trace, PerfMon counters, logs, …
• Collector Type– Package die informatie haalt uit een Data Provider
• Collection Item– Instantie van een Collector Type– Bepaalt input (welke counters, kolommen, …) met welke frequentie
• Collection Set– Logische groepering van Collection Items– Definiëren via .NET API of T-SQL
• Management Data Warehouse
Built-in collection sets
• Disk Usage– Disk usage voor alle databases
• Query Activity– Interessante queries (per cpu, time, IO)– Caches sys.dm_exec_query_stats
• Server Activity– Wait states, memory, performance counters
Management Data Warehouse
• 3 schema’s– Core – Organizing and Identifying collected data– Snapshot – Store data for system data collectors– Custom_snapshot – Store data for 3rd party data
collectors• Groeit (bij standaard gebruik) met 250 – 350
MB per dag!• Plaats op aparte server
Zelf collection sets maken:• USE MSDB• EXEC dbo.sp_syscollector_create_collection_set• EXEC dbo.sp_syscollector_create_collection_item
@name=N'CPU pressure check', @parameters= N’ <xml definition> ’,
@collection_item_id=@collection_item_id_4 OUTPUT,@frequency=5,@collection_set_id=@collection_set_id_1,
@collector_type_uid=@collector_type_uid_3 • …• EXEC sp_syscollector_start_collection_set
DEMOPerformance Data Collector
Performance Optimization Model
Server TuningServer Tuning
LockingLocking
IndexingIndexing
Query OptimizationQuery Optimization
Schema DesignSchema Design
BASELINE
Pro Actief Beheer
De praktijk
DBAGebruiker
Hij doet het niet
Hij is traag
wel
nooit
Bedankt
Peter ter [email protected]