Professional Documents
Culture Documents
Optimizer Statistics
CPU & IO
Index
Table
Column
System
PROMO_ID
PROMO_NAME
PROMO_DATE
GB HJ HJ
1 2
Promo_1 Promo_1
15-NOV-98 31-DEC-98
PROMO_PK Index
PROMOTIONS Table
Execution plan
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
10
Controlled by ESTIMATE_PRECENT parameter From 11g onwards use default value AUTO_SAMPLE_SIZE
New hash based algorithm Speed of a 10% sample Accuracy of 100% sample
11
AUTO_SAMPLE_SIZE
00:02:21.86 00:02:38.11 00:02:39.31
10% SAMPLE
00:02:31.56 00:02:49.49 00:02:38.55
100% SAMPLE
00:08:24.10 00:07:38.25 00:07:37.83
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
13
Index statistics are automatically gathered during creation and maintained by GATHER_TABLE_STATS and include
Number of leaf blocks Branch Levels Clustering factor
14 Copyright 2011, Oracle and/or its affiliates. All rights reserved.
16
17
18
19
Monitoring Histograms
Information on Histograms found in USER_HISTOGRAMS
Bucket 16 is missing because buckets 15 & 16 had the same endpoint value
20
Popular value means values that are the endpoint for two or more buckets Formula used is:
Number of endpoint buckets X number of rows in the table total number of buckets
21
Non-popular value means values that are the endpoint for only one bucket or are not an endpoint at all Formula used is:
DENSITY X number of rows in the table
NOTE: Density from 10.2.0.4 is calculated on the fly based on histogram information
and is not the value show in USER_HISTOGRAMS
22
23
24
25
26
If the value of bind B1 is AD_VP at hard parse then an index range scan will be selected because only 2 rows returned
27
If the value of bind B1 is CLERK at hard parse then an Full Table Scan will be selected because 5 rows returned
28
29
B1 = AD_VP
ENUM
101
102
JOB
AD_VP
AD_VP
31
32
33
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
34
Expression statistics
Expression statistics useful when a column is used as part of a complex expression in where clause predicate
Can be manually or automatically created Automatically maintained when statistics are gathered on the table
35 Copyright 2011, Oracle and/or its affiliates. All rights reserved.
color = 'RED;
MODEL 530xi COLOR RED Vehicles Table Make Model
BMW BMW BMW PORSCHE MERC MERC 530xi 530xi 530xi 911 SLK C320
Color
RED BLACK SILVER RED RED SLIVER
36
make = BMW;
MODEL 530xi 530xi 530xi COLOR RED BLACK SLIVER Vehicles Table Make Model
BMW BMW BMW PORSCHE MERC MERC 530xi 530xi 530xi 911 SLK C320
Color
RED BLACK SILVER RED RED SLIVER
37
make = BMW;
MODEL 530xi 530xi 530xi COLOR RED BLACK SLIVER Vehicles Table Make Model
BMW BMW BMW PORSCHE MERC MERC 530xi 530xi 530xi 911 SLK C320
Color
RED BLACK SILVER RED RED SLIVER
39
Optimizer doesnt know how function affects values in the column Optimizer guesses the cardinality to be 1% of rows
SELECT count(*) FROM customers; COUNT(*) 55500
40
41
Extended Statistics
Automatic Column Group Creation 1. Start column group usage capture
Switches
on
monitoring
for
300
seconds
or
the
next
5
minutes.
An
statement
executed
will
be
monitored
for
columns
used
in
the
where
and
group
by
clauses
42
Extended Statistics
Automatic Column Group Creation 2. Run your workload
Actual
number
of
rows
returned
by
this
query
932.
OpJmizer
underesJmates
because
it
assumes
each
predicate
will
reduce
num
rows
43
Extended Statistics
Automatic Column Group Creation 2. Run your workload
Actual
number
of
rows
returned
by
this
query
145.
OpJmizer
overesJmates
because
it
assumes
no
relaJonship
between
country
and
state
44
Extended Statistics
Automatic Column Group Creation 3. Check we have column usage information for our table
SQL> SELECT dbms_stats.report_col_usage(user, 'customers') FROM dual; EQ
means
column
was
used
in
equality
predicate
in
query
1 COLUMN USAGE REPORT FOR SH.CUSTOMERS 1. COUNTRY_ID : EQ FILTER
means
columns
used
together
as
lter
predicates
rather
than
join
etc.
2. CUST_CITY : EQ Comes
from
query
1 3. CUST_STATE_PROVINCE : EQ 4. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID) : FILTER 5. (CUST_STATE_PROVINCE, COUNTRY_ID) : GROUP_BY GROUP_BY
columns
used
in
group
by
expression
in
query
2
45
Extended Statistics
Automatic Column Group Creation 4. Create extended stats for customers based on usage
SQL> SELECT dbms_stats.create_extended_stats(user, 'customers') FROM dual;
EXTENSIONS FOR SH.CUSTOMERS 1. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID): SYS_STUMZ$C3AIHLPBROI#SKA58H_N created 2. (CUST_STATE_PROVINCE, COUNTRY_ID) : SYS_STU#S#WF25Z#QAHIHE#MOFFMM_ created
Column group statistics will now be automatically maintained every time you gather statistics on this table
46 Copyright 2011, Oracle and/or its affiliates. All rights reserved.
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
47
49
Partitioned Table
Partition 1 Oct 1st 2011
:
Partition 4 Oct 4th 2011 Partition 5 Oct 5th 2011
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
51
52
53
54
Each individual partition will have statistics gathered one after the other The statistics gather procedure on each individual partition operates in parallel BUT the statistics gathering procedures wont happen concurrently
55
56
A separate statistics gathering job is created for each table and each partition in the schema Level 1 contain statistics gathering jobs for all non-partitioned tables and a coordinating job for each partitioned table Level 2 contain statistics gathering jobs for each partition in the partitioned tables
57 Copyright 2011, Oracle and/or its affiliates. All rights reserved.
The number of concurrent gathers is controlled by the parameter job_queue_processes In this example it is set to 3 Remember each concurrent gather operates in parallel
58
Sysaux Tablespace
60
6. Global stats generated by aggregating the original partition synopsis with the new one
Global
StaJsJc
5. Retrieve synopsis for 4. Gather partition partitions each of the other statistics for new partition from Sysaux
Sysaux Tablespace
61
Agenda
How to gather statistics What basic statistics to collect Additional types of statistics When to gather statistics Statistics gathering performance When not to gather statistics
62
64
66
Monday Oct 3rd 12:30 PM" Wednesday Oct 5th 10:15 AM " Thursday Oct 6th 12:00 PM"
Oracle Optimizer: Prevent Suboptimal " Execution Plans" " Hands-on-Lab! Oracle Optimizer: Best Practices for Managing Optimizer Statistics"
Maria Colgan"
Senior Principal Member of Technical Staff" Oracle"
Maria Colgan"
Senior Principal Member of Technical Staff" Oracle"
Oracle Database Optimizer: Tips for " Preventing Suboptimal Execution Plans"
Maria Colgan"
Senior Principal Member of Technical Staff" Oracle"
Mohamed Zait"
67 Copyright 2011, Oracle and/or its affiliates. All rights reserved.
Architect" Oracle"
Q&A
68
69