DB2 - Problem description
| Problem IC84192 | Status: Closed |
COLUMN GROUP STATISTICS NOT ALWAYS APPLIED TO CYCLE OF 3 OR MORE JOINS | |
| product: | |
DB2 FOR LUW / DB2FORLUW / A10 - DB2 | |
| Problem description: | |
Column Group Statistics (CGS) might not be considered by the DB2
optimizer when accounting for statistical correlation in a cycle
of 3 or more tables due to inconclusive parent and child
determination. For the optimizer to correct for statistical
correlation using CGS, one table must have a column cardinality
that is greater than or equal to the other table for all
columns involved in the CGS, and it must have a high2key/low2key
range for each column that is inclusive of the other table.
For non-cyclic joins, these conditions are not critical;
however, when 3 or more tables are involved in a cycle of joins,
if these conditions are not met for 1 pair of tables in the
cycle, the optimizer might end up correcting for statistical
correlation for some of the joins, and not others. This can
lead the optimizer to favour a join between the tables that have
not had their cardinality corrected.
For example, consider the query:
select * from T1, T2, T3 where T1.C1 = T2.D1 and
T1.C1 = T3.E3 and T2.D1 = T3.E1 and T1.C2 = T2.D2 and T1.C2 =
T3.E3 and T2.D2 = T3.E3
with statistics for the 3 tables and their columns as follows:
Table.Column Col Card Hi2Key Lo2Key
T1.C1 100 99 1
T1.C2 10 9 1
T2.D1 50 74 26
T2.D2 4 7 4
T3.E1 40 89 41
T3.E3 5 4 1
In the example, T1 has a higher column cardinality and inclusive
Hi2Key, Lo2Key when comparing T1.C1 = T2.D2 and T1.C1 = T3.E3,
and when comparing T1.C2 = T2.D2 and T1.C2 = T2.E2. The problem
is observed when comparing T2.D1 = T3.E1 and T2.D2 = T3.D3 where
the column cardinalities and the {Hi2Key, Lo2Key} range are
conflicting. Under these conditions, the optimizer will not
account for statistical correlation for the T2/T3 join, leading
to the optimizer potentially favouring this join.
The fix is activated using the DB2 environment variable:
DB2_CORRELATED_PREDICATES='FORCE_CGS' | |
| Problem Summary: | |
****************************************************************
* USERS AFFECTED: *
* All DB2 for LUW users with complex joins *
****************************************************************
* PROBLEM DESCRIPTION: *
* Column Group Statistics (CGS) might not be considered by the *
* DB2 *
* optimizer when accounting for statistical correlation in a *
* cycle *
* of 3 or more tables due to inconclusive parent and child *
* determination. For the optimizer to correct for statistical *
* correlation using CGS, one table must have a column *
* cardinality *
* that is greater than or equal to the other table for all *
* columns involved in the CGS, and it must have a *
* high2key/low2key *
* range for each column that is inclusive of the other table. *
* *
* For non-cyclic joins, these conditions are not critical; *
* however, when 3 or more tables are involved in a cycle of *
* joins, *
* if these conditions are not met for 1 pair of tables in the *
* cycle, the optimizer might end up correcting for statistical *
* correlation for some of the joins, and not others. This can *
* lead the optimizer to favour a join between the tables that *
* have *
* not had their cardinality corrected. *
* *
* For example, consider the query: *
* *
* select * from T1, T2, T3 where T1.C1 = T2.D1 and *
* T1.C1 = T3.E3 and T2.D1 = T3.E1 and T1.C2 = T2.D2 and T1.C2 *
* = *
* T3.E3 and T2.D2 = T3.E3 *
* *
* with statistics for the 3 tables and their columns as *
* follows: *
* *
* Table.Column Col Card Hi2Key Lo2Key *
* T1.C1 100 99 1 *
* T1.C2 10 9 1 *
* T2.D1 50 74 26 *
* T2.D2 4 7 4 *
* T3.E1 40 89 41 *
* T3.E3 5 4 1 *
* *
* In the example, T1 has a higher column cardinality and *
* inclusive *
* Hi2Key, Lo2Key when comparing T1.C1 = T2.D2 and T1.C1 = *
* T3.E3, *
* and when comparing T1.C2 = T2.D2 and T1.C2 = T2.E2. The *
* problem *
* is observed when comparing T2.D1 = T3.E1 and T2.D2 = T3.D3 *
* where *
* the column cardinalities and the {Hi2Key, Lo2Key} range are *
* conflicting. Under these conditions, the optimizer will not *
* account for statistical correlation for the T2/T3 join, *
* leading *
* to the optimizer potentially favouring this join. *
* *
* The fix is activated using the DB2 environment variable: *
* DB2_CORRELATED_PREDICATES='FORCE_CGS' *
****************************************************************
* RECOMMENDATION: *
* Upgrade the DB2 for Linux Unix and Windows server to Version *
* 9.5 Fixpack 10 or higher. *
**************************************************************** | |
| Local Fix: | |
| available fix packs: | |
DB2 Version 10.1 Fix Pack 1 for Linux, UNIX, and Windows | |
| Solution | |
Upgrade the DB2 for Linux Unix and Windows server to Version 9.5 Fixpack 10 or higher. | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 13.06.2012 05.11.2012 05.11.2012 |
| Problem solved at the following versions (IBM BugInfos) | |
9.5., 9.5.FP10 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 10.1.0.1 |
|
| 10.5.0.1 |
|