Professional Documents
Culture Documents
Application Development
Contact: smlsql@comcast.net
Ibm.com
(630) 399-3330
WWW.SMLSQL.COM
SQL Performance
DB2 Engine Components
Predicate Processing Intelligence
Optimizer Details
SQL Performance Rules
DB2 EngineSQL
Components
Execution
Result
Work
Files
SQL
Optimizer
Stage 2 z/OS
Residual LUW
Catalog
Meta Data
RID
Pool
Stage 1 z/OS
Sargable LUW
Dynamic Statement
Cache
Buffer Pool
Directory
Access Plans
Buffer Manager
Data
Index
RIDs
DB2 V8 Enhancements
8K 16K 32K Pages
64 Bit Addressing
Result
Optimizer
Work
Files
Parallel Sort
Stage 1 Unlike Data Types
IS NOT NULL
IS NOT DISTINCT FROM
SQL
2M Statement Length
Multi-row FETCH
Multi-row INSERT
SELECT INTO w/ ORDER BY
Common Table Expressions
Recursive SQL
IS NOT DISCTINCT FROM
Scalar Fullselect
GROUP BY Expression
Dynamic Scrollable Cursors
INSERT with SELECT
Multiple DISTINCT Clauses
Sequences
Stage 2
Catalog
Meta Data
Top & Bottom NUDS
RID
Pool
Directory
Stage 1
Dynamic
Access Plans
Statement
More Hybrid Joins
Buffer Pool
Cache
Buffer Manager
Data
Index
RIDs
SMLI 2009
TRUNCATE
MERGE
SELECT FROM UPDATE/DELETE
EXCEPT, INTERSECT
OLAP Expressions
ORDER BY /
FETCH FIRST in Subselect
DB2 9 WOW!
In Memory
GLOBAL TEMP TABLES
Views
Table Expressions
Work
Files
Sparse Indexes
for more Work Files
Faster Sorts for GROUP BY
DISTINCT, ORDER BY
SQL
Result
Histogram Statistics
Optimizer
Stage 2
Meta Data
In Memory
RID
Pool
Stage 1Dynamic
Statement
Buffer Pool
Cache
Buffer Manager
Data
Catalog
Index
RIDs
Global Optimization
Directory
Access Plans
More Parallelism
Page Range Index Screening
For Partitioned Indexes
Index on Expression
7
Stage 2
4K
Stage 1
Buffer Pool
Buffer Manager
Data
Index
Indexable Stage 1
Predicates
Predicate Type
Stage 1 Predicates
Indexable
Stage 1
COL = value
COL = noncol expr
COL IS NULL
COL op value
COL op noncol expr
COL BETWEEN value1 AND
value2
COL BETWEEN noncol expr1
AND noncol expr2
COL LIKE 'pattern'
COL IN (list)
COL LIKE host variable
T1.COL = T2.COL
T1.COL op T2.COL
COL=(non subq)
COL op (non subq)
COL op ANY (non subq)
COL op ALL (non subq)
COL IN (non subq)
COL = expression
(COL1,...COLn) IN (non subq)
(COL1, COLn) = (value1,
valuen)
T1.COL = T2.colexpr
COL IS NOT NULL
COL IS NOT DISTINCT FROM
value
COL IS NOT DISTINCT FROM
noncol expression
COL IS NOT DISTINCT FROM
col expression
COL IS NOT DISTINCT FROM
non subq
T1.COL IS NOT DISTINCT
FROM T2.COL
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Predicate Type
COL <> value
COL <> noncol expr
COL NOT BETWEEN value1
AND value2
COL NOT BETWEEN noncol
expr1 AND noncol expr2
COL NOT IN (list)
COL NOT LIKE ' char'
COL LIKE '%char'
COL LIKE '_char'
T1.COL <> T2.COL
T1.COL1 = T1.COL2
COL <> (non subq)
COL IS DISTINCT FROM
Indexable
Stage 1
N
N
N
Y
Y
Y
N
N
N
N
N
N
N
N
Y
Y
Y
Y
Y
Y
Y
Y
1.
2.
3.
4.
V7 may
promote
join
Between
Predicate Type
value BETWEEN COL1 AND COL2
COL BETWEEN COL1 AND COL2
COL BETWEEN expression1 AND expression2
value NOT BETWEEN COL1 AND COL2
T1.COL1 op T1.COL2
T1.COL1 <> T1.COL2
COL = ANY (non subq)
COL = ALL (non subq)
COL <> ANY (non subq)
COL <> ALL (non subq)
COL NOT IN (non subq)
COL = (cor subq)
Indexable
Stage 1
Stage 1
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
10
Predicate Type
Not made
Indexable,
.
.
V7 just
rewrites
the query
to a join
Indexable
Stage 1
Stage 1
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
11
1.
2.
3.
4. Stage 2
Root Page
C1.C2.C3
TOKEN_NR.
O O O
ROLE_CD
Non-Leaf Page
O O O
Non-Leaf Page
O O
Non-Leaf Page
O O O O
2
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
13
Bad BETWEENs
WHERE 0001-01-01 BETWEEN
B.SCND_ALOC_EFF_DATE AND
B.SCND_ALOC_END_DATE
Should be:
A.COL2 = abracadabra
A.COL1 IN (:hv1, :hv2, :hv3)
A.COL4 > :hvcol4
A.COL3 > :hvcol3
A.COL5 LIKE %SON
Sheryl M. Larsen, Inc. 2000-2008
Ties
Matter!
15
16
COLCARDF
>=100,000,000
>=10,000,000
>=1,000,000
>=100,000
>=10,000
>=1,000
>=100
>=2
=1
<=0
COLCARD
>=100,000,000
1/100,000,000
>=10,000,000
1/10,000,000
>=1,000,000
1/1,000,000
>=100,000
1/100,000
>=10,000
1/10,000
>=1,000
1/1,000
>=100
1/100
>=0
1/3
17
6.
7.
8.
18
Inner and Outer Joins, Table Expressions, Subqueries, GROUP BY, Complex
Correlation, Global Temporary Tables, CASE, 100+ Built-in Functions including
SQL/XML, Limited Fetch, Insensitive Scrollable Cursors, UNION Everywhere,
MIN/MAX Single Index Support, Self Referencing Updates with Subqueries, Sor
Avoidance for ORDER BY, and Row Expressions 2M Statement Length, GROUP
BY Expression, Sequences, Scalar Fullselect, Materialized Query Tables,
Common Table Expressions, Recursive SQL, CURRENT PACKAGE PATH,
VOLATILE Table Support, Star Join Sparse Index, Qualified Column names,
Multiple DISTINCT clauses, ON COMMIT DROP, Transparent ROWID Column,
call from trigger, statement isolation, FOR READ ONLY KEEP UPDATE LOCKS,
SET CURRENT SCHEMA, client special registers, long SQL Object names,
SELECT FROM INSERT, UPDATE, DELETE, MERGE, INSTEAD OF TRIGGER,
Native SQL Procedure Language, BIGINT, file reference variables, XML, FETCH
FIRST & ORDER BY IN subselect and fullselect, caseless comparisons,
INTERSECT, EXCEPT, not logged tables, DECIMAL FLOAT, XQuery,TRUNCATE
OLAP Functions, Session variables, OmniFind, Spatial, ROLE
19
Inner and Outer Joins, Table Expressions, Subqueries, GROUP BY, Complex
Correlation, Global Temporary Tables, CASE, 100+ Built-in Functions including
SQL/XML, Limited Fetch, Insensitive Scroll Cursors, UNION Everywhere, MIN/MAX
Single Index, Self Referencing Updates with Subqueries, Sort Avoidance for
ORDER BY, and Row Expressions, 2M Statement Length, GROUP BY Expression,
Sequences, Scalar Fullselect, Materialized Query Tables, Common Table
Expressions, Recursive SQL, CURRENT PACKAGE PATH, VOLATILE Tables, Star
Join Sparse Index, Qualified Column names, Multiple DISTINCT clauses, ON
COMMIT DROP, Transparent ROWID Column, Call from trigger, statement
isolation, FOR READ ONLY KEEP UPDATE LOCKS, SET CURRENT SCHEMA,
Client special registers, long SQL object names, SELECT from INSERT, UPDATE
or DELETE, INSTEAD OF TRIGGER, Native SQL Procedure Language, BIGINT, file
reference variables, XML, FETCH FIRST & ORDER BY in subselect & fullselect,
caseless comparisons, INTERSECT, EXCEPT, not logged tables, OmniFind,
spatial, range partitions, data compression, session variables, DECIMAL FLOAT,
optimistic locking, ROLE, TRUNCATE, index & XML compression, created temps,
inline LOB, administrative privileges, implicit cast, date/time changes, currently
committed, moving sum & average, index include columns, row and column
access control, time travel query
Updateable UNION in Views, GROUPING SETS, ROLLUP, CUBE, more Built-in
Functions, SET CURRENT ISOLATION, multi-site join, MERGE, MDC, XQuery, XML
enhancements, additional data type (array, row, cursor), global variables, even more
21
vendor syntax, temp table compression, MODULEs
DB2 11 SQL Standard SQL support (not exhaustive, some features may be missing)
DB2 11 for z/OS and DB2 10.5 Linux, Unix & Windows
z
c
o
m
m
o
n
l
u
w
Multi-row INSERT, FETCH & multi-row cursor UPDATE, Dynamic Scrollable Cursors, GET DIAGNOSTICS, Enhanced
UNICODE SQL, join across encoding schemes, IS NOT DISTINCT FROM, VARBINARY, FETCH CONTINUE, SELECT
FROM MERGE, MERGE, routine versioning, transparent archive query
Inner and Outer Joins, Table Expressions, Subqueries, GROUP BY, Complex Correlation, Global
Temporary Tables, CASE, 100+ Built-in Functions including SQL/XML, Limited Fetch, Insensitive
Scroll Cursors, UNION Everywhere, MIN/MAX Single Index, Self Referencing Updates with
Subqueries, Sort Avoidance for ORDER BY, and Row Expressions, 2M Statement Length, GROUP
BY Expression, Sequences, Scalar Fullselect, Materialized Query Tables, Common Table
Expressions, Recursive SQL, CURRENT PACKAGE PATH, VOLATILE Tables, Star Join Sparse
Index, Qualified Column names, Multiple DISTINCT clauses, ON COMMIT DROP, Transparent
ROWID Column, Call from trigger, statement isolation, FOR READ ONLY KEEP UPDATE LOCKS,
SET CURRENT SCHEMA, Client special registers, long SQL object names, SELECT from
INSERT, UPDATE or DELETE, INSTEAD OF TRIGGER, SQL PL in routines, BIGINT, file reference
variables, XML, FETCH FIRST & ORDER BY in subselect & fullselect, caseless comparisons,
INTERSECT, EXCEPT, MERGE not logged tables, OmniFind, spatial, range partitions, data
compression, DECFLOAT, optimistic locking, ROLE, TRUNCATE, index & XML compression,
created temps, inline LOB, administrative privileges, implicit cast, increased timestamp precision,
currently committed, moving sum & average, index include columns, row and column access
controls, time travel query, GROUPING SETS, ROLLUP, CUBE, global variables, Text Search
functions, accelerated tables, DROP COLUMN, array data type, XML enhancements
Updateable UNION in Views, more Built-in Functions, SET CURRENT ISOLATION, multi-site join, full MERGE,
MDC, XQuery, additional data type (row, cursor), even more vendor syntax, temp table compression, MODULEs
Name: __________________
Level
Before:_______
After:________
Assessment = YOU CAN FULLY UNDERSTAND THE FEATURE AND PROPER USE OF:
WHERE clauses, BETWEEN, LIKE, IN(list), =, >=, >, <, <=, <>, NOT IN(list),
NOT LIKE, NOT BETWEEN, DISTINCT
Table joins (inner, outer, full), UNION, UNION ALL, CONCAT, static CURSORs,
FOR UPDATE OF, ROW_NUMBER, EXCEPT, INTERCEPT
10
Codes effective and efficient SQL applying performance rules and knows
when to use each SQL feature appropriately
24
Performance!
Host variables force the optimizer to guess
IBM optimizer researchers and developers
provide extremely good guesses
Occasionally (2-7% of queries) they guess
wrong
Have no fear, changing the optimizers mind
is easier than you think
Sheryl M. Larsen, Inc. 2000-2011
25
26
No Operation
Fetch
Fake Filter
27
Tuning Tools
Anti-Joins
Extreme Experiments
Index Changes
MQT Design
Sheryl M. Larsen, Inc. 2000-2011
28
29
Step 1
Learn the DB2 Access Paths
www.smlsql.com
www.ca.com/ Google Sheryl Larsen
31
Partition Scan
Without Index
Nested Loop
Hybrid Join:
Hybrid
Type C or
Type N
NonMatching
Index Access
Star Join:
Merge
Scan
Cartesian
or
Pair-wise
List Prefetch
Table Scan
Star Scan
Merge
Direct Row
32
Variations of Index
Accesses
One Fetch
IN(list) Index Access
Multidimensional Index
Access
List Prefetch
Root Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
33
One Fetch
SELECT MAX(C3)
FROM T1
WHERE C1 = L
ANDType
C2 2=Index
99
SELECT MIN(C1)
FROM T1
1
Leaf Page
o o oo oo
Non-Leaf Page
O O O
Leaf Page
o o oo oo
Root Page
C1.C2.C3
O O O
Non-Leaf Page
O O
Leaf Page
o o oo o o
Leaf Page
o o oo oo
Leaf Page
o o oo oo
Non-Leaf Page
O O O O
Leaf Page
o o oo o o
Leaf Page
o o oo oo
Leaf Page
o o oo oo
Leaf Page
o o o o o o
34
1
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Root Page
C1.C2.C3
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
35
C1.C2.C3
O O O
Non-Leaf Page
O O O
1
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
2
Sheryl M. Larsen, Inc. 2000-2011
36
C1.C2.C3
O O O
1
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
2
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
37
C1.C2.C3
O O O
1
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
1
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
1
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
38
List Prefetch
WHERE C1 > 50
AND C2 = :hv
1
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
COL1 Index
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
4
39
WHERE C2 = :hv
COL2 Index
COL1 Index
1
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
2
Leaf Page
o o o o o o
Root Page
O O O
C1
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Root Page
O O O
C2
Non-Leaf Page
O
O
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
AND/OR
3
40
41
Partitioning Index
Clustered
C1 Parts
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
42
CORP
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
40,60) AND
TICKET_PREFIX = A
AND CUST_NAME
LIKE %CAMB%
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
43
WHERE TOKEN_NR
BETWEEN ? AND ? AND
TICKET_PREFIX = A
AND LAST_NM
LIKE LAR%
TOKEN_NR
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
44
BETWEEN ? AND ?
AND LAST_NM > 99
3 AND ROLE_CD = ?
TOKEN_NR
Parts
Partitioning Index
Clustered
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
45
Partitioning by TOKEN_NR
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
46
old
Partition/Cluster
Partition/Cluster
by Date
Partition/Cluster
by Date
Partition/Cluster
by Date
Partition/Cluster
by Date
Partition/Cluster
by Date
by TOKEN_NR
BP03
TOKEN_NR BETWEEN ? AND ?
AND LAST_NM_LIKE ?
New
Partition by Date
Partition
by Date
Cluster
by Custid
Partition
by Date
Cluster
by Custid
Partition
by
Date
Cluster by Custid
Partition
Cluster by
by TOKEN_NR
Custid
Cluster by LAST_NM
Sheryl M. Larsen, Inc. 2000-2011
47
Partitioning by Date
1
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Clustered by
Customer 1
2
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Type 2 Index
Root Page
O O O
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
3
Sheryl M. Larsen, Inc. 2000-2011
Leaf Page
o o o o o o
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
48
can be parallel
If
Segmented
Partitioned
Limited Partitioned
In Memory Data Cache
49
Table Scan
WHERE C1 BETWEEN
:lowest AND :highest
50
1
Part 1
Part 2
Part 3
Part 4
Part 5
Part 6
Part 7
Part 8
51
1
Part 1
Part 3
Part 4
Part 16
Part 17
Part 18
52
53
WHERE
T1.ORDER >
222
AND
T1.ID = T2.ID
AND
T2.COLOR IN
(BLUE,
YELLOW,
GREEN)
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Inner Index
Non-Leaf Page
O O O
Leaf Page
o o o o o o
ID.COLOR index
Root Page
O O O
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
54
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
COL2 Index
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Filtered outer
Non-Leaf Page
O
O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
R
I
D
S
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
6
5
Sheryl M. Larsen, Inc. 2000-2011
55
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
COL2 Index
Root Page
O O O
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O
O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
3
4
Sheryl M. Larsen, Inc. 2000-2011
56
WHERE
T1.C1 = T2.CA AND
T1.C2 = T2.CB AND
T1.C3 = T2.CC
57
1
2
3
Inner Index
Big/Fact
Table Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
5
Sheryl M. Larsen, Inc. 2000-2008
58
Type 2 Index
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Root Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Root Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Type 2 Index
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Root Page
O O O
Non-Leaf Page
O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Type 2 Index
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
Leaf Page
o o o o o o
4
5
8
9
59
2.
3.
1
DIRECT_ID
AMX
DIRECT_ID
DIRECT_ID
DIRECT_ID
60
Partition Scan
Without Index
Nested Loop
Hybrid Join:
Type
C or
Hybrid
Type N
NonMatching
Index Access
Star Join:
Cartesian
or
Merge
Scan
Pair-wise
List Prefetch
Table Scan
Merge
Star Scan
Direct Row
61
Step 2
Interpret the Optimizers
Decisions
62
Determine If Tuning Is
Necessary
63
Using EXPLAIN
EXPLAIN PLAN SET QUERYNO = n FOR ..;
SELECT * FROM PLAN_TABLE ORDER BY ..;
Q
No
Qblock Step
No
No
Meth
Access
Type
Match
Cols
Pre
Fetch
Join
Type
IX
Only
IX
Name
IX22
Y
F
L
IX27
IX42
IXF1
N
64
Using EXPLAIN
SORTN
UJOG
SORTC
UJOG
Page
Col
Range Func
NNNN
NNYN
NNNN
NNNN
NYNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
NNNN
Corr
Name
Qblock
Type
Opt
Hint
Hint
Used
TS
Remark
s
AB
SELECT
GG
GG
Good 1
CD
UPDATE
NN
Bad 1
EF
INSERT
XX
DELECT
+0
GA
NCOSUB
XX
Bogus 3
SL
CORSUB
XX
Extra >
ML
DELCUR
KL
UPDCUR
parens
TL
SELUPD
help
R
R
SS
XX
SS
65
Learning EXPLAIN
66
Using
DSN_STATEMENT_TABLE
Explain
Time
Stmt
Type
Cost
Cat
PROCMS
PROCSU
Reason
Time
Stamp
SEL
UPD
A or
B
Milli
seconds
Service
Units
For Cat
B
Host varibles
Cardinality
UDF
Triggers
RI
Sheryl M. Larsen, Inc. 2000-2011
67
Service Units
http://www-03.ibm.com/servers/eserver/zseries/srm/
zSeries 990
Processor Model
STIDP Type
#C
P
SU/SEC
SRMsec/RealSec
2084-301
2084
301
21857.9235
508.1298
2084-302
2084
302
20752.2698
508.1298
2084-303
2084
303
20075.2823
508.1298
2084-304
2084
304
19559.9022
508.1298
68
Service Units
IBM System z10
Processor Model
STIDP Type
STSI Model
Name
#CP
SU/SEC
SRMsec/RealSec
2097-401
2097
401
11291.4608
262.6049
2097-402
2097
402
10680.9079
262.6049
2097-501
2097
501
24427.4809
568.1815
2097-502
2097
502
23021.5827
568.1815
2097-503
2097
503
22222.2222
568.1815
2097-701
2097
701
47619.0476
1106.1941
2097-702
2097
702
44692.7374
1106.1941
2097-703
2097
703
43010.7527
1106.1941
2097-704
2097
704
41666.6667
1106.1941
69
EXPLAIN
# of Matching
Columns
70
smlsql@comcast.co
dave@davebeulke.com
N = New/Inner Sort
Sort C = Outer/Composite Sort
SNU SNJ SNO SNG SCU SCJ SCO SCG PF QB_TYPE STMT_TYPE T_TP PR JT
+---------+---------+---------+---------+---------+---------+---------+------N
N
N
N
N
N
N
N
L
NCOSUB
SELECT
T
N
N
N
NO
NG N
N
N
S
NCOSUB
SELECT
T
U
N
N
N
Nr
Nr
N
N
N
S
NCOSUB
SELECT
T
J
n
N
N
N
Nd
No
N
N
N Limited
NCOSUB
SELECT
Partition
Scan? T
o
N
N
N
Ne
Nu
N
N
N
S
NCOSUB
SELECT
T
i
i
N
N
N
Nr
Np
N
N
N
S
NCOSUB
SELECT
T
q
n
N
N
N
N
N
N
N
N
NCOSUB
SELECT
T
u
N
N
N
N
N
N
NCOSUB
SELECT
T
B NB N
e
N
N
N
N
N
N
N
NCOSUB
SELECT
T
y N
y
PrefetchT
N
N
N
N
N
N
N
N
NCOSUB
SELECT
N
N
N
N
N
N
N
N
NCOSUB
SELECT
Type T
N
N
N
N
N
N
N
N
NCOSUB
SELECT
T
N
N
N
N
N
N
N
N
CORSUB
SELECT
T
N = New/Inner Sort
Sort C = Outer/Composite Sort
Processor
Service Units
smlsql@comcast.com
dave@davebeulke.com
72
Step 3
Fetch Top CPU Consumers
73
Tuning SQL
FIND
---------+---------+--PROGNAME
PROCSU
---------+---------+--EXPNPROG
121,059,664
EXPNPROG
21,059,664
ONESECPG
79,664
SUBSECPG
9,664
CHEEPPRG
64
FREEPROG
4
74
smlsql@comcast.co
dave@davebeulke.com
PROCSU is
To Expensive to Calculate!
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
2,147,483,647
Copyright Sheryl Larsen 2011
75
smlsql@comcast.co
Step 4
Learn Traditional and Extreme
Tuning Techniques
76
77
78
SELECT S.QTY_SOLD
, S.ITEM_NO
, S.ITEM_NAME
FROM SALE S
WHERE S.ITEM_NO > :hv
ORDER BY ITEM_NO
79
80
No Op Example CONCAT
SALES_ID.MNGR.REGION Index
MNGR Index
SELECT S.QTY_SOLD
, S.ITEM_NO
, S.ITEM_NAME
FROM SALE S
WHERE S.SALES_ID > 44
AND S.MNGR = :hv-mngr
AND S.REGION BETWEEN
:hvlo AND :hvhi
ORDER BY S.REGION
.
FROM SALE S
WHERE S.SALES_ID > 44
AND S.MNGR = :hv-mngr
AND S.REGION BETWEEN
:hvlo AND :hvhi CONCAT
ORDER BY R.REGION
REGION Index
81
No Op Example - Scan
SALES_ID.MNGR.REGION Index
MNGR Index
SELECT S.QTY_SOLD
, S.ITEM_NO
, S.ITEM_NAME
FROM SALE S
WHERE S.SALES_ID > 44 +0
AND S.MNGR = :hv-mngr CONCAT
AND S.REGION BETWEEN
:hvlo AND :hvhi CONCAT
ORDER BY S.REGION
FOR FETCH ONLY
WITH UR
REGION Index
Should this be
Documented?
Sheryl M. Larsen, Inc. 2000-2011
82
REOPT
Dynamic
Statement
Cache
Fake Filtering
Fake Predicates
To encourage index access
To alter table join sequence when nothing else
works
Works by decreasing filter factor on a certain table
The filtering is fake and negligible cost
Not effective for dynamic queries if the filter contains
:host variables
84
D.DID Index
12 rows
Nested
Loop
S.SID Index
20 rows
Joins
B.BID Index
6 billion rows
85
B.BID Index
6 billion rows
Nested
D.DID Index
12 rows
Loop
Joins
S.SID Index
20 rows
86
ON 1 = 1
ON
1=1
87
88
Index
STEP1 Physical
Work
File
Buffer Pool
Data
89
SELECT Columns
FROM TABX, TABY,
(SELECT DISTINCT COL1, COL2 ..
FROM BIG_TABLE Z
WHERE local conditions) AS BIGZ
WHERE join conditions
90
Result
91
Tuning Technique
Keeps large tables
joined last
92
Performance gains
Access path changes
Encourages Nested Loop Join
Reduced processing and/or materialization
93
94
SELECT Columns
FROM TABY Y
LEFT JOIN TABX X
ON X.COL1 = Y.COL1
WHERE X.COL1 IS NULL
Anti-Join
SELECT Columns
FROM TABX X
WHERE NOT EXISTS
(SELECT *
FROM TABY Y
WHERE X.COL1 = Y.COL1)
TABX
Exceptions
TABY
Exceptions
Inner Join
SELECT Columns
FROM TABX X, TABY Y
WHERE X.COL1 = Y.COL1
95
Anti-Join
TABX
Exceptions
SELECT Columns
FROM TABX X
WHERE NOT EXISTS
(SELECT *
FROM TABY Y
WHERE X.COL1 = Y.COL1)
Indexable Stage 1
96
Step 5
Tune if Necessary
97
List Onlines
Doing
List Prefetch
WHERE
AND
AND
WHERE
AND
ACCESSTYPE = I
MATCH_COLS = 0
List Index
Scans
WHERE
AND
METHOD = 4
SORTN_JOIN = Y
List Nasty
Hybrid Joins
WHERE
ACCESSTYPE = R
WHERE
WHERE
AND
SYSPACKSTMT
WHERE
WHERE
WHERE
WHERE
List Ugly
BETWEEN
clauses
List NOTs
Check data
Types of literals
and constants
99
Step 6
Designing Optimal
Performance Structures for
One Query or a Workload
100
Non-Leaf Page
O O O
Leaf Page
o o oo oo
Leaf Page
o o oo oo
Non-Leaf Page
O O
Leaf Page
o o o o o o
Leaf Page
o o oo oo
Leaf Page
o o oo oo
Non-Leaf Page
O O O O
Leaf Page
o o o o o o
Leaf Page
o o oo oo
Leaf Page
o o oo oo
Leaf Page
o o o o o o
101
MQT strategies
Optimal
MQT strategy
102
SAM
at
Execution
103
MQT INDEX:
BOSS
MQT
CREATE TABLE ORG_LIST AS (
WITH ORG_CHART(BOSS, DIRECT_REPORT, N) AS
(SELECT BOSS, DIRECT_REPORT, 1
FROM
ORG_TABLE
WHERE
BOSS= SAM
UNION ALL
SELECT
T1.BOSS, T2.DIRECT_REPORT, N+1
FROM
ORG_CHART T2, ORG_TABLE T1
WHERE
T2.DIRECT_REPORT = T2.BOSS )
SELECT BOSS, DIRECT_REPORT, N
FROM
ORG_CHART)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY SYSTEM
ENABLE QUERY OPTMIZATION;
104
Query Speed Up
WITH ORG_CHART (BOSS, DIRECT_REPORT, N) AS
(SELECT
BOSS, DIRECT_REPORT, 1
FROM
ORG_TABLE
WHERE BOSS= BETH
UNION ALL
SELECT T1.BOSS, T2.DIRECT_REPORT, N+1
FROM
ORG_CHART T2, ORG_TABLE T1
WHERE T2.DIRECT_REPORT = T2.BOSS
AND N < 10 0,000)
SELECT BOSS, DIRECT_REPORT, N
FROM
ORG_CHART
Accessed
at
Execution
ORG_LIST
BOSS
JOHN
BETH
BETH
BETH
BETH
DIRECT
_REPORT
ADAM
JIM
SUE
MARK
SAM
N
501
634
634
635
635
105
Designing Indexes
For a Workload
106
Table/Column Usage
Tran
c1
c2
c3 c4 c5
O1
G1
O2
G2
O3
G3
=T4.C2
=:hv
>800
c6 c7 c8 c9
c10
c11
SUM
BTW by
2and C1.C2.
C3
7
AVG by
C1.C2.C3
MAX
by
C1.C2.
C3
o1
=T3.C11
=T3.C1
=:hv
>:hv
IN(list)
LIKE
:hv
tran1
q1
q2
q3
=T2.C1
=22
o1
=:hv o2
=T3.C1
tran2
q1
O1
O2
O3
q2
=:hv
O1
107
Final Ranking
Weighting Based on
Importance to the
Business
Weight
tran
1
100
4200
tran2
q1
10
q2
9900
q3
3
0
0
O4200
1
4200
G4200
1
W
O4200
O4200
S
w
S
S
S 4200
2
3
4200 4200 4200 4200 4200
4200
G4200
G
w
2
3
4200 4200
w
w
s 10
s10
w 10
w
w10
o10
1
9900
w 10 o2 10
o1
s
w
w
9900 9900 9900 9900
Frequency * Weight
Sheryl M. Larsen, Inc. 2000-2011
108
Determining Weight
Copy
Remove
109
Grand Total
By Table, by Operation
Total
Activity
c1
c2
c3
c4 c5
O1 55980
G1 4790
O2 2220
O6 70
W 3920
O2 55980 O3 55980 S
G2 4790 G3 4790 660
W 400
W3
O1
8740
S 8740
w
22090
c6
c7
c8
O2
3940
S 480
S 4000 S 8390
W 7640 W 2020
Use
110
Summary
111
112