indexes neglected performance all rounder

36
© 2013 by Markus Winand Indexes The neglected performance all-rounder 1 2013-03-28Thu

Upload: mohdsajjad25

Post on 23-May-2017

238 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Indexes Neglected Performance All Rounder

© 2013 by Markus Winand

Indexes

The neglectedperformance all-rounder

12013-03-28Thu

Page 2: Indexes Neglected Performance All Rounder

About Markus Winand

Tuning developers to SQL performance.

Training & co: http://winand.at/

Geeky homepage/blog: http://use-the-index-luke.com/

Book: “SQL Performance Explained” (English and German)

22013-03-28Thu

Page 3: Indexes Neglected Performance All Rounder

NewTranslated by: Guillaume Lelarge (of Dalibo)

32013-03-28Thu

Page 4: Indexes Neglected Performance All Rounder

© 2013 by Markus Winand

The Problem

Improper Index Use

42013-03-28Thu

Page 5: Indexes Neglected Performance All Rounder

The Problem: Improper Index Use

“A very common cause of performance problems is lack of proper indexes or the

use of queries that are not using existing indexes.”

—Buda Consultinghttp://www.budaconsulting.com/Portals/52677/docs/top_5_tech_brief.pdf

52013-03-28Thu

Page 6: Indexes Neglected Performance All Rounder

The Problem: Improper Index Use

“A very common cause of performance problems is lack of proper indexes or the

use of queries that are not using existing indexes.”

—Buda Consultinghttp://www.budaconsulting.com/Portals/52677/docs/top_5_tech_brief.pdf

62013-03-28Thu

Page 7: Indexes Neglected Performance All Rounder

Quantifying the Problem

Percona White Paper:

Reasons of performance problemsthat caused production downtime:

38% bad SQL

15% schema and indexing

http://www.percona.com/files/white-papers/causes-of-downtime-in-mysql.pdf

72013-03-28Thu

Page 8: Indexes Neglected Performance All Rounder

Quantifying the Problem

Survey by sqlskills.com:

Root causes of the last few SQLServer performance problems:

27% T-SQL

19% Poor indexing

http://www.sqlskills.com/blogs/paul/survey-what-are-the-most-common-causes-of-performance-problems/

82013-03-28Thu

Page 9: Indexes Neglected Performance All Rounder

Quantifying the Problem

Craig S. Mullins (strategist and researcher):

„As much as 75% of poor relational performance is caused by "bad" SQL and application code.”

Noel Yuhanna (Forrester Research):

„The key difficulties surrounding performancecontinue to be poorly written SQL statements,

improper DBMS configuration and a lack of clear understanding of how to tune databases to solve

performance issues.”

92013-03-28Thu

Page 10: Indexes Neglected Performance All Rounder

Quantifying the Problem

My observation:

~50% of SQL performance problemsare caused by improper index use

102013-03-28Thu

Page 11: Indexes Neglected Performance All Rounder

© 2013 by Markus Winand

The Root Cause

Admins are Indexing

112013-03-28Thu

Page 12: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

How did we useindexes before SQL?

122013-03-28Thu

Page 13: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Index use was intrinsically tied to the queries.

132013-03-28Thu

Page 14: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Example: dBase

Developers had to......use indexes explicitly when searching: !"#$%&'"($#)$*+!#,&+-"$$$.%&'$/%&+&'

...take care of index maintenance: !"#$%&'"($#)$*+!#,&+-"0$%'(1$$$$+22"&'

142013-03-28Thu

Page 15: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

SQL is an abstraction that only defines the logical view.

The actual SQL implementation takes care of everything else.

152013-03-28Thu

Page 16: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Indexes

Backup & recovery

Storage management

Bugs & patches

Tuning parameters

Transactions

ConstraintsViews

Tables

Data manipulation

Queries

SQL (language) SQL databases (software)

High Availability

162013-03-28Thu

Page 17: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Indexes

Backup & recovery

Storage management

Bugs & patches

Tuning parameters

Transactions

ConstraintsViews

Tables

Data manipulation

Queries

SQL databases (software)Developers

High Availability

162013-03-28Thu

Page 18: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Indexes

Backup & recovery

Storage management

Bugs & patches

Tuning parameters

Transactions

ConstraintsViews

Tables

Data manipulation

Queries

Developers Administrators

High Availability

162013-03-28Thu

Page 19: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

Indexing is considered a system tuning task that belongs to the administrators responsibilities.

172013-03-28Thu

Page 20: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

A misconception that causes new problems:

182013-03-28Thu

Page 21: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

A misconception that causes new problems:

DBAs don’t know the queries

Have to “reverse engineer” the app to get the queries.

It is time consuming and almost always incomplete.

182013-03-28Thu

Page 22: Indexes Neglected Performance All Rounder

The Root Cause: DBAs are Indexing

A misconception that causes new problems:

DBAs don’t know the queries

Have to “reverse engineer” the app to get the queries.

It is time consuming and almost always incomplete.

DBAs can’t changethe queries

Can make the indexmatch the query.

Can’t make the querymatch the index!

182013-03-28Thu

Page 23: Indexes Neglected Performance All Rounder

© 2013 by Markus Winand

The Solution

Indexing is aDevelopment Task

192013-03-28Thu

Page 24: Indexes Neglected Performance All Rounder

The Solution: It’s a Dev Task

Indexes

Backup & recovery

Storage management

Tuning parameters

Transactions

ConstraintsViews

Tables

Data manipulation

Queries

Developers Administrators

Must match!

High Availability

Bugs & patches

202013-03-28Thu

Page 25: Indexes Neglected Performance All Rounder

Another Problem: It’s not Taught

Indexes are not part of the SQL literature because they are not part of the SQL language (standard).

11 SQL books analyzed: less than 1% of the pages are about indexes (70 out of 7330 pages).

Examples:Oracle SQL by Example: 2.0% (19/960)Beginning DBs with PostgreSQL: 0.8% (5/664)Learning SQL: 3.3% (11/336 — highest rate in class)

212013-03-28Thu

Page 26: Indexes Neglected Performance All Rounder

Another Problem: It’s not Taught

Proper index usage is sometimes covered in tuning books but is always buried between hundreds of

pages of HW, OS and DB parameterization.

14 database administration books analyzed: 5.1% of the pages are about indexes (307 of 6069 pages).

Examples:Oracle Performance Survival Guide: 5.2% (38/730)High Performance MySQL: 8% (55/684)PostgreSQL 9 High Performance: 5.8% (27/468)

222013-03-28Thu

Page 27: Indexes Neglected Performance All Rounder

Another Problem: It’s not Taught

Consequence:People don’t know how touse indexes properly.

Results of the 3-minute online quiz:http://use-the-index-luke.com/3-minute-test

5 questions: each about a specific index usage pattern.Non-representative!

232013-03-28Thu

Page 28: Indexes Neglected Performance All Rounder

3-Minute Quiz: Indexing Skills

Q1: Good or Bad? (Function use)

345675$89:5;$#<*,%'($=9$#<*$>!"#$%&'()*+?@A5B537$#"(#0$'+#",C)*D-&

$$E4=F$#<*

$/G545$,-%./012!"#$%&'()*+0$HIIIIH?$J$H1KL1H@

0% 25% 50% 75% 100%

242013-03-28Thu

Page 29: Indexes Neglected Performance All Rounder

3-Minute Quiz: Indexing Skills

Q2: Good or Bad? (Indexed Top-N, no IOS)CREATE INDEX tbl_idx ON tbl (a, date_col);A5B537$%'0$+0$'+#",C)*

$$E4=F$#<*

$/G545$+$J$ML

$=4:54$NI$'+#",C)*$:5A3

$3454,67@

0% 25% 50% 75% 100%

252013-03-28Thu

Page 30: Indexes Neglected Performance All Rounder

3-Minute Quiz: Indexing Skills

Q3: Good or Bad? (Column order)CREATE INDEX tbl_idx ON tbl (a, b);

SELECT id, a, b FROM tbl WHERE a = $1 AND b = $2;

SELECT id, a, b FROM tbl WHERE b = $1;

0% 25% 50% 75% 100%

50%

262013-03-28Thu

Page 31: Indexes Neglected Performance All Rounder

3-Minute Quiz: Indexing Skills

Q4: Good or Bad? (Indexing LIKE)CREATE INDEX tbl_idx ON tbl (text varchar_pattern_ops);

SELECT id, text FROM tbl WHERE text LIKE '%TERM%';

0% 25% 50% 75% 100%

272013-03-28Thu

Page 32: Indexes Neglected Performance All Rounder

3-Minute Quiz: Indexing Skills

Q5: Good or Bad? (equality vs. ranges)CREATE INDEX tbl_idx ON tbl (date_col, state);SELECT id, date_col, state FROM tbl WHERE date_col >= CURRENT_DATE - INTERVAL '5' YEAR AND state = 'X';

0% 25% 50% 75% 100%

0%

282013-03-28Thu

Page 33: Indexes Neglected Performance All Rounder

The Neglected All-Rounder

Everybody knows indexing is important for performance,

still nobody takes the time to learn and apply it properly.

292013-03-28Thu

Page 34: Indexes Neglected Performance All Rounder

The Neglected All-Rounder

Index details are hardly known.! “Details” like column-order or equality vs. range

conditions must be learned and understood.

Only one index capability is used: finding data quickly! Indexes have three capabilities (powers):

finding data, clustering data, and sorting data.

Indexing is done from single query perspective.!Should be done from application perspective

(considering all queries). It’s a design task!

302013-03-28Thu

Page 35: Indexes Neglected Performance All Rounder

The Neglected All-Rounder

Are you just adding indexes

or

are you designing indexes?

312013-03-28Thu

Page 36: Indexes Neglected Performance All Rounder

http://Use-The-Index-Luke.com/

322013-03-28Thu