the bad one into your crop - sql tuning analysis for dbas

57

Upload: others

Post on 13-Mar-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 2/57

The Bad One Into Your Crop - SQL Tuning Analysis for DBAs

Martin Klier

Performing Databases GmbHMitterteich / Germany

Die Schlechten ins Kröpfchen - SQL Analyse für DBAs

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 3/57

Speaker

● Martin Klier● Solution Architect and

Database Expert

● My focus– Performance Optimization– High Availability– Architecture DBMS

● Linux since 1997● Oracle Database since 2003

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 4/57

Speaker

● Meet & Greet

● Contact: [email protected]

● Weblog: http://www.usn-it.de (English)

RegionalgruppenFachkonferenzen

Las Vegas, April 2017

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 5/57

Performing Databases

● Experts for Database Technology

– Concept– Planning & Sizing– Licensing– Implementation and Troubleshooting

● Get in touch

– Performing Databases GmbHWiesauer Straße 2795666 Mitterteich, GERMANY

– Web: http://www.performing-databases.com– Twitter: @PerformingDB

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 6/57

● Design

● Licensing

● Implementation

● Tuning

● Troubleshooting

● Service

● Upgrade

● Migration

International

http://www.performing-databases.com

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 7/57

Warm-Up

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 8/57

simplicity

simplemeans

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 9/57

awesome

awfulis the new

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 10/57

knowing

proofmatters

matters more

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 11/57

Basics

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 12/57

TEMP

Oracle Architecture (simplified)

Listener:1521

PMON

SGA

ServerServer

Buffer Cache

Shared Pool

Log Buffer

ARCnSMON

LGWR

DBWn

PGAs

CKPT

Server

Online

Redo

Logs

ArchivedRedoLogs

Tablespace Undo Tbs.

Blocks

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 13/57

Reading

TEMP

Listener:1521

SGA

PGAs

Server

Tablespace

Blocks

Sort,Hash,Merge

Shared Pool

select ... ;

Buffer Cache

„Buffer“

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 14/57

ParsingSQL

SyntaxSemantic

Optimizer

Execution

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 15/57

ParsingSQL

SyntaxSemantic

Optimizer

Execution

Library Cache

#?LC

Check !

Cursor

# Plan

# = 'select * from emp where id=:a'

= „Hard Parse“

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 16/57

Cursor SharingSQL

SyntaxSemantic

Execution

Library Cache

Cursor

#?#

LCCheck

Plan

= „Soft Parse“

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 17/57

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 18/57

Soft ParseSQL

SyntaxSemantic

Execution

Library Cache

Cursor

#?#

LCCheck

Plan

SessionCachedCursors

Server

###

PGA

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 19/57

Session Cached CursorsSQL

SyntaxSemantic

Execution

Library Cache

Cursor

#?

#

LCCheck

Plan

Server

###

PGA

= „Very Soft Parse“?

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 20/57

Statistics FeedbackSQL

SyntaxSemantic

Execution

Library Cache

Cursor

#

LCCheck

Plan

Statistics-(ex. Cardinality-)Feedback

BINDAWARE

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 21/57

Child Cursor PlansSQL

SyntaxSemantic

Execution

Library Cache

Cursor

#

LCCheck

PlanBINDAWARE Parent

Cursor

#

Optimizer

#?

!

= „Hard Parse“

C 1K

C 1B

C 1M

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 22/57

Adaptive Cursor SharingSQL

SyntaxSemantic

Execution

Library Cache

LCCheck

BINDAWARE

+ SENSITIVEParent

Cursor

#

Optimizer

#?

= „Harder Soft Parse“

C 1K

BindPeek

Selectivity

C 1B

C 1M

# = 'select * from emp where id=:a'

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 23/57

Adaptive Cursor Sharing

Repeat all over:

● Execution

● Feedback statistics

● Hard Parse once

● Add new Child Cursor (reason „Feedback Stats“)

● Harder Soft Parse => Selectivity of bind

● Re-use Child Cursor

● Buffer in PGA (Session Cached Cursors)

● Re-use Session Cached Cursor

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 24/57

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 31/57

Analysis

„What's the problem?“starts with asking

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 32/57

My style

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 33/57

Analysis à la Martin

Simplify your Toolset

● AWR or Statspack

● SQL*Plus / SQLcl / SQL Developer (most recent)

● dbms_xplan.display_cursor()

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 34/57

Analysis à la Martin

Be yourself, use your

● Suspiciousness (don't believe the obvious)

● Mark-A eyeball for facts (look up thoroughly)

● Situation awareness (look beyond the horizon)

● Seat-of-your-pants-feeling and intuition (trust instinct where to look first - often true, not always)

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 35/57

Analysis à la Martin

Go down to the second

● One hour has 3600 seconds

● Transactions per Second

● IOs per Second

● SQL Execs per Second

● ...

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 36/57

Finding the culprit

Customer complains about multiple screens being slow - not all.

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 37/57

Reading a Report

We observed 60min of clock timeWe had 12 cores for 60min = 720min plus x of timeDB used only 51.89 min (nearly 100% of 1 core)

Can this be overload? Check for single-threaded problem.

Real-life example, Mar 13, 2016, Switzerland

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 38/57

Reading a Report

IO

CPU

CPU

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 39/57

Reading a Report

IO

We had 95.4 % of 51.89 min = 49.5 min CPU activity.

Why? And is it related to what hurts the user?

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 40/57

Reading a Report

Buffer Gets cause CPU loadWe have two SQLs, looking similar, causing 40% getsCheck their full SQL text Ask: Can they be related to $PROBLEM ?

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 41/57

Reading a Report

Our two Top-Get SQLs are fast

But 'd5msj…' runs >3sec - bad if interactiveAsk: Is it part of the $PROBLEM?

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 42/57

Reading a Report

Also checking

● SQL executions

● Shared memory usage / Version Count(think: Child Cursors)

● Instance Parameters

● NLS settings

● Specials (Queues etc.)

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 43/57

Elaborate

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 44/57

My #1 Tool

SELECT * FROM table(

DBMS_XPLAN.DISPLAY_CURSOR('&&SQL_ID',null,'COST,IOSTATS,LAST,ADVANCED,ADAPTIVE')

);

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 45/57

Execution Plan

Example -1-

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 46/57

Finding the CulpritReal-life example, Mar 13, 2016, Switzerland

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 47/57

Examining the Culprit

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 48/57

Improve!

Create index I_MAILING_TUNING_4on MAILING (

NLSSORT("FLAGDISPATCHNOTEPRJ",'nls_sort=''BINARY_CI'''),CLIENTIDPRJ

);

Create two-column, function based index

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 49/57

Check back

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 50/57

Improvement

Estimated Rows 824k to 4

Estimated Bytes 113M to 500

Estimated Temp 122M to 0

Estimated Time 6:48s to 0:01s

Real BG / Exec 135k to 1k

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 51/57

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 52/57

Execution Plan

Example -2-

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 53/57

ImpressionsReal-life example, Mar 23, 2016, United Kingdom

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 54/57

ExpensiveReal-life example, Mar 23, 2016, United Kingdom

5M Buffer Gets42 seconds

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 55/57

Deeper

Index Join over 3 indexes

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 56/57

Indexes

Index Join over 3 indexes+ one useless column

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 57/57

Indexes

One big 3-column index instead

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 58/57

Indexes

Same cardinalityBuffer Gets- 858

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 59/57

A long way ...Real-life example, Mar 23, 2016, United Kingdom

2 Index Joinsto

1 three-column index=

1 hour of work

42 seconds => 30 seconds

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 60/57

Do it my way

● Don't wait for the next crash - act NOW!

● Be yourself

● Simplify your Toolset

● Go down to the second

● Prove your findings

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 61/57

The Battle:Linux vs. Windows

Dierk Lenzgegen

Johannes Ahrends

Zwei Welten prallen aufeinander…

Mittwoch, 11 Uhr, St. Petersburg

@MartinKlierDBA The Bad One In Your Crop - SQL Tuning Analysis For DBAs 62/57

Q & A

Download my Presentations and Whitepapershttp://www.performing-databases.com