RE: Three billion logical reads?
- From: David Aldridge <david@xxxxxxxxxxxxxxxxxx>
- To: "Koppelaars, Toon" <T.Koppelaars@xxxxxxxxxxxxxxxxxxxx>, oracle-l@xxxxxxxxxxxxx
- Date: Fri, 26 Oct 2007 05:22:11 -0700 (PDT)
Thanks Toon, comments in-line below.
"Koppelaars, Toon" <T.Koppelaars@xxxxxxxxxxxxxxxxxxxx> wrote:
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}
David,
Your formula assumes only one block access to each of the twelve other
tables, in case of there being a matching record.
DA: Yes.
« outer joins against non-unique indexex »
This means those twelve tables are all child-tables to the 80 million table?
DA: No, just a badly designed/implemented CRM system :)
So there can be more than one matching record? Then you need to account for
the clustering factor too: and factor that in into your formula (currently
assuming only one block access for matching record(s?)).
DA: Actually that's true in one case, as two of joins are actually self-joins
to the same 80 million row table, once to get potential parents (0 or 1 match)
and once to get potential children (0 .. n matches). There may be a number of
table block access required for the children but I'm looking more for a
best-case scenario so i'm underestimating where there is doubt.
« outer joined to many smaller tables »
This sounds like the twelve tables are ?lookup? tables to the 80 million
table? (i.e. the 80 million table is the child table, like in a star schema).
DA: Yes, mostly thay are, sometimes they are not.
There is some contradiction here...
Are there any predicates against those twelve other tables?
DA: No.
Could you give us the query?
It's very simple in form, with no predicates and just outer joins. It's an
extract from a CRM system as part of an out-of-the-box ETL process. The
rojected columns do require table access and can't be read from the indexes, so
where a record is founf a table access is required in all cases ...
SELECT <column(s) from each table>
FROM
80mill_row_tab a,
80mill_row_tab b,
80mill_row_tab c,
smaller_tab01 d,
...
smaller_tab10 x
where
a.par_col = b.id(+) and
a.chi_col = c.id(+) and
a.col3 = d.col and
...
a.col10 = x.col(+)
Toon
---------------------------------
From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On
Behalf Of David Aldridge
Sent: vrijdag 26 oktober 2007 13:45
To: oracle-l@xxxxxxxxxxxxx
Subject: Three billion logical reads?
Part 1: If I have a table of 80 million records and I outer join that to
twelve other tables, and the tables are accessed with nested loop outer joins
against non-unique indexes having a blevel of 3, and if there is only a 50%
(say) chance of there being a matching record in those tables, then is the
number of logical reads to perform the join equal to something in the order of:
80,000,000*12*(3+.5)
?
In other words, around 3.3 billion logical reads? Or do I need more coffee
this morning?
Part 2: What would you say is a reasonable ballpark time for a logical
read, on a decently equipped server with SAN storage? Millisecond? Less?
Background: I'm stuck in version 9 with large tabes outer-joined to many
smaller tables -- no inut join swapping and hence no (reasonably efficient)
hash outer joins.
- References:
- RE: Three billion logical reads?
- From: Koppelaars, Toon
Other related posts:
- » Three billion logical reads?
- » RE: Three billion logical reads?
- » RE: Three billion logical reads?
- RE: Three billion logical reads?
- From: Koppelaars, Toon