DB2 - Problem description
| Problem IC91458 | Status: Closed |
A QUERY MIGHT RETURN INCORRECT RESULTS OR TRAP DURING OPTIMIZATI ON IN QRW PHASE IN FUNCTION SQLNR_OR_PREDS_OPT, IN 9.7 FIXPACK 8 | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
| Problem description: | |
An impacted query might return the wrong results if it has the
OR predicate with two sub-terms. One predicate sub-term is "colX
IN (<literal1>, ...<literalN>)", and the other is "colX NOT IN
(<literal1>, ...<literalN>)". The symptom is that the optimized
statement section inside the db2exfmt plan file contains the
"colX IN (<literal1> sub-term, ...<literalN>)" but misses the
"colX NOT IN (<literal1>, ...<literalN>)" sub-term.
Furthermore, the impacted query also might return wrong results
if it has the following OR predicate with two sub-terms: one
sub-term is "colX LIKE <patternexp>", and the other is "colX NOT
LIKE <patternexp>". The symptom experienced by this issue is
that the optimized statement section inside the db2exfmt plan
file contains the "colX LIKE <patternexp>" sub-term, but misses
the "colX NOT LIKE <patternexp>" sub-term.
A query might trap when the query contains a compound-predicate
that meets the following conditions:
- the compound-predicate takes the form (pred1 OR (pred2 OR
pred3))
- pred1 and pred2 are exactly matched, or pred1 subsumes pred2
(For example, c1 in (1,2,3) subsumes c1 in (1,2))
When both conditions are satisfied, a query compilation might
trap and the call stack will show the sqlnr_or_preds_opt
function.
This only occurs in the 9.7 fix pack 8 release of the DB2
product.
On a Linux platform a trap with SEGV might occur, with the trap
file showing:
0x00002AAAAD5CF043 sqloEDUCodeTrapHandler
0x00002AAAABA681E6 _ZNK9sqlnq_pid2opEv
0x00002AAAAD3C9BBA _Z17sqlnr_or_pred_optP9sqlnq_pidP3locRb
0x00002AAAAD3C9ECF _Z18sqlnr_or_preds_optP9sqlnq_oprP3loc +
0x00002AAAABF6090B _Z20sqlnr_qrwprep_phase2P3locPi + 0x1493
0x00002AAAABF41A01
_Z18sqlnr_prep2_actionP10sqlnr_qrwaPiP14sqlnr_progr
0x00002AAAABF5E802
_Z10sqlnr_compPiiP16sqlnr_rule_stateP10sqlnr_qrwaP1
0x00002AAAABF5E62D
_Z9sqlnr_seqPiP10sqlnr_qrwaP14sqlnr_progressP12sqln
0x00002AAAABF5E49B _Z9sqlnr_rcciP10sqlnr_qrwaPiP14sqlnr_progress
0x00002AAAABF3FCD5 _Z9sqlnr_exeP9sqlnq_qur + 0x04b9
0x00002AAAABD3E842
_Z10sqlnn_cmplP8sqeAgentP11sqlrrstrings17sqlnn_comp
...
On an AIX platform a -901 error might be observed instead of a
trap:
SQL0901N The SQL statement failed because of a non-severe
system error.
Subsequent SQL statements can be processed. (Reason "New tree
is not given".)
SQLSTATE=58004
The db2diag.log log shows:
2013-04-09-10.18.20.879038+120 I4899A840 LEVEL: Severe
PID : 25886852 TID : 1544 PROC : db2sysc 0
INSTANCE: db2v978 NODE : 000 DB : FOO
APPHDL : 0-103 APPID: *LOCAL.db2v978.130409081812
AUTHID : DB2V978
EDUID : 1544 EDUNAME: db2agent (FOO) 0
FUNCTION: DB2 UDB, relation data serv, sqlrr_dump_ffdc,
probe:300
DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA sqlcabc: 136 sqlcode: -901 sqlerrml: 21
sqlerrmc: New tree is not given
sqlerrp : SQLNQ21E
...
2013-04-09-10.18.20.921390+120 E60158A1518 LEVEL: Info
PID : 25886852 TID : 1544 PROC : db2sysc 0
INSTANCE: db2v978 NODE : 000 DB : FOO
APPHDL : 0-103 APPID:
*LOCAL.db2v978.130409081812
AUTHID : DB2V978
EDUID : 1544 EDUNAME: db2agent (FOO) 0
FUNCTION: DB2 UDB, SW- common services, sqlnn_cmpl, probe:650
MESSAGE : ZRC=0x803100AF=-2144272209=SQLNN_E_BADNEWS
"unexpected error but state is OK"
...
DATA #7 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA sqlcabc: 136 sqlcode: -901 sqlerrml: 21
sqlerrmc: New tree is not given
sqlerrp : SQLNQ21E
sqlerrd : (1) 0x801A006D (2) 0x00000000 (3)
0x00000000
(4) 0x00000000 (5) 0xFFFFFFF6 (6)
0x00000000
sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11)
sqlstate:
DATA #8 : Hex integer, 4 bytes
0x00000040
DATA #9 : String, 245 bytes
Compiler error stack for rc = -2144272209:
sqlnn_cmpl[370]
sqlnr_exe[600]
sqlnr_rcc[100]
sqlnr_seq[100]
sqlnr_comp[110]
sqlnr_prep2_action[100]
sqlnr_qrwprep_phase2[620]
sqlnr_or_preds_opt[100]
sqlnr_or_pred_opt[400]
sqlnq_pid::updated_tree[10] | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * All users running DB2 version 9.7.0.8. * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 version 9.7.0.9. * **************************************************************** | |
| Local Fix: | |
There are two ways to fix this issue: (1) Reduce the query optimization level to below 5. For example, the DB2 product set the current query optimization level to 3. (2) Manually rewrite the predicate to: - remove the exact OR sub-term select * from t where (c1 >= 1 or c1 >= 2); Or, alternatively rewrite the predicate to: - move the exact OR sub-terms to the end of the OR predicate select * from t where (c1 >= 2 or c1 >= 1 or c1 >= 1); | |
| available fix packs: | |
DB2 Version 9.7 Fix Pack 9 for Linux, UNIX, and Windows | |
| Solution | |
The problem is first fixed in DB2 version 9.7.0.9. | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 10.04.2013 16.12.2013 16.12.2013 |
| Problem solved at the following versions (IBM BugInfos) | |
9.7.0.9 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.7.0.9 |
|
| 9.7.0.9 |
|