Applicatieplatform congres 12 & 13 maart Peter ter Braake TrainSQL.

Post on 13-May-2015

215 views 0 download

Transcript of Applicatieplatform congres 12 & 13 maart Peter ter Braake TrainSQL.

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 BraakeTrainSQL@live.nl