fragment NONE
Posted in 2014
A table (IDS 11.50) was fragmented by expression using MONTH(aa30date), where aa30date is a CHAR(8) holding 'YYYYMMDD'. A query like aa30date='20131111' returned correct rows for the owner but zero rows for another user, whose plan showed "fragments: NONE" (no fragment scanned). Testing MONTH('20130221') returned 2 for one user but 0 for the other. The cause identified in the thread: a different DBDATE setting for the second user, so the implicit char-to-date cast in the fragmentation expression failed silently; setting DBDATE to Y4MD fixes it. Posters also noted MONTH() on a CHAR column is a bad idea (use a DATE column), and suggested the silent wrong result might warrant a PMR; Art Kagel separately flagged stale/missing statistics.
Auto-generated by DrWatson from the posts below — may be imperfect; read the full thread.
Topics: Storage & Space Management, SQL Development & Query Writing, Server Administration, Security, Permissions & Auditing, Versions, Editions & End-of-Life
Hi,
I fragmented a talbe using month function .
dbschema -d cbsbg -t aapf30 -ssDBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
{ TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size = 38 }
create table "cbsbg".aapf30
(
aa30dpnoa char(11),
aa30dpnok char(11),
aa30acid integer,
aa30date char(8),
aa30seq integer,
aa30brief char(3),
aa30abst char(52),
aa30crdcls char(4),
aa30crdno char(20),
aa30dc char(1),
aa30amt decimal(16,2),
aa30bal decimal(16,2),
aa30acno char(32),
aa30dpno char(11),
aa30stan integer,
aa30trcod char(4),
aa30oprr char(10),
aa30oprc char(10),
aa30attr char(5),
aa30enseq integer,
aa30page integer
)
fragment by expression
(MONTH (aa30date ) = 1 ) in datadbs01,
(MONTH (aa30date ) = 2 ) in datadbs02,
(MONTH (aa30date ) = 3 ) in datadbs03,
(MONTH (aa30date ) = 4 ) in datadbs04,
(MONTH (aa30date ) = 5 ) in datadbs05,
(MONTH (aa30date ) = 6 ) in datadbs06,
(MONTH (aa30date ) = 7 ) in datadbs07,
(MONTH (aa30date ) = 8 ) in datadbs08,
(MONTH (aa30date ) = 9 ) in datadbs09,
(MONTH (aa30date ) = 10 ) in datadbs10,
(MONTH (aa30date ) = 11 ) in datadbs11,
(MONTH (aa30date ) = 12 ) in datadbs12
extent size 500000 next size 500000 lock mode row;
revoke all on "cbsbg".aapf30 from "public" as "cbsbg";
create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
aa30seq) using btree in idxdbs;
create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
aa30page) using btree ;
Totally the table has about 150M rows.
I have two users, one is cbsbg ,it's the development DBA,the other is query
user which use to execute the select statement. I execute the below SQL with
both cbsbg and query user, cbsbg coult return the corrent result,but query
user show no rows returned.
select * from aapf30 where aa30date='20131111'
I capture the execute plain, and they are different .
1)quyer user:
QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
------
select * from aapf30 where aa30date='20131111'
Estimated Cost: 1186996
Estimated # of Rows Returned: 71947
1) cbsbg.aapf30: INDEX PATH
(1) Index Name: cbsbg.aalf32
Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
Index Self Join Keys (aa30acid )
Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
cbsbg.aapf30.aa30date = '20131111'
Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1 aapf30
type table rows_prod est_rows rows_scan time est_cost
-------------------------------------------------------------------
scan t1 0 71947 0 00:00.00 1186996
select month('20130221') from sysmaster:sysdual
(constant)
0
it show ids doesn't scan any fragment
2) cbsbg user:
select month('20130221') from sysmaster:sysdual
(constant)
2
QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
------
select * from aapf30 where aa30date='20131111'
Estimated Cost: 3331663
Estimated # of Rows Returned: 71947
1) cbsbg.aapf30: INDEX PATH
(1) Index Name: cbsbg.aalf32
Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
Fragments Scanned: (10) datadbs11
Index Self Join Keys (aa30acid )
Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
cbsbg.aapf30.aa30date = '20131111'
Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1aapf30
type table rows_prod est_rows rows_scan timeest_cost
-------------------------------------------------------------------
scan t1 1871947 1800:00.03 3331663
3) grantor and grantee information in catalog tables:
grantor cbsbg
grantee query
tabid 102
tabauth s--------
4) oncheck
I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is correct.
Do anybody has any suggestion on the problem? thanks for your time .
The first thing I see is that the estimated rows it 71947 while, for the
cbsbg user at least, the actual number of rows returned is 18. This is a
significant discrepancy indicating that your data distributions are either
non-existent, stale, or insufficiently detailed. Have you run the
recommended suite of update statistics from the performance guide (or run
my dostats utility) or are you depending on the distributions created with
you indexed the table?
I know that doesn't answer the direct question of why the cbsbg and query
user should get different query plans for the same query, but it's a start
...
Art
Art S. Kagel, Principal Consultant
ASK Database Management
Blog: http://informix-myview.blogspot.com/
Disclaimer: Please keep in mind that my own opinions are my own opinions
and do not reflect on the IIUG, nor any other organization with which I am
associated either explicitly, implicitly, or by inference. Neither do
those opinions reflect those of other individuals affiliated with any
entity with which I am affiliated nor those of the entities themselves.
On Fri, Jan 17, 2014 at 9:23 AM, CHUAN LU <luchuan@cn.ibm.com> wrote:
> Hi,
>
> I fragmented a talbe using month function .
> dbschema -d cbsbg -t aapf30 -ss> DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
>
> { TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size =
> 38 }
> create table "cbsbg".aapf30
> (
>
> aa30dpnoa char(11),
>
> aa30dpnok char(11),
>
> aa30acid integer,
>
> aa30date char(8),
>
> aa30seq integer,
>
> aa30brief char(3),
>
> aa30abst char(52),
>
> aa30crdcls char(4),
>
> aa30crdno char(20),
>
> aa30dc char(1),
>
> aa30amt decimal(16,2),
>
> aa30bal decimal(16,2),
>
> aa30acno char(32),
>
> aa30dpno char(11),
>
> aa30stan integer,
>
> aa30trcod char(4),
>
> aa30oprr char(10),
>
> aa30oprc char(10),
>
> aa30attr char(5),
>
> aa30enseq integer,
>
> aa30page integer
> )
> fragment by expression
>
> (MONTH (aa30date ) = 1 ) in datadbs01,
>
> (MONTH (aa30date ) = 2 ) in datadbs02,
>
> (MONTH (aa30date ) = 3 ) in datadbs03,
>
> (MONTH (aa30date ) = 4 ) in datadbs04,
>
> (MONTH (aa30date ) = 5 ) in datadbs05,
>
> (MONTH (aa30date ) = 6 ) in datadbs06,
>
> (MONTH (aa30date ) = 7 ) in datadbs07,
>
> (MONTH (aa30date ) = 8 ) in datadbs08,
>
> (MONTH (aa30date ) = 9 ) in datadbs09,
>
> (MONTH (aa30date ) = 10 ) in datadbs10,
>
> (MONTH (aa30date ) = 11 ) in datadbs11,
>
> (MONTH (aa30date ) = 12 ) in datadbs12
> extent size 500000 next size 500000 lock mode row;
>
> revoke all on "cbsbg".aapf30 from "public" as "cbsbg";>
> create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
>
> aa30seq) using btree in idxdbs;
> create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
>
> aa30page) using btree ;
> Totally the table has about 150M rows.
>
> I have two users, one is cbsbg ,it's the development DBA,the other is query
> user which use to execute the select statement. I execute the below SQL
> with
> both cbsbg and query user, cbsbg coult return the corrent result,but query
> user show no rows returned.
>
> select * from aapf30 where aa30date='20131111'>
> I capture the execute plain, and they are different .
>
> 1)quyer user:
> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
> ------
> select * from aapf30 where aa30date='20131111'>
> Estimated Cost: 1186996
> Estimated # of Rows Returned: 71947
> 1) cbsbg.aapf30: INDEX PATH
>
> (1) Index Name: cbsbg.aalf32
> Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
> Index Self Join Keys (aa30acid )
> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> cbsbg.aapf30.aa30date = '20131111'
>
> Query statistics:
> -----------------
> Table map :
> ----------------------------
> Internal name Table name
> ----------------------------
> t1 aapf30
> type table rows_prod est_rows rows_scan time est_cost
> -------------------------------------------------------------------
> scan t1 0 71947 0 00:00.00 1186996
>
> select month('20130221') from sysmaster:sysdual
>
> (constant)
>
> 0
> it show ids doesn't scan any fragment
> 2) cbsbg user:
> select month('20130221') from sysmaster:sysdual
>
> (constant)
>
> 2
> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
> ------
> select * from aapf30 where aa30date='20131111'>
> Estimated Cost: 3331663
> Estimated # of Rows Returned: 71947
> 1) cbsbg.aapf30: INDEX PATH
>
> (1) Index Name: cbsbg.aalf32
> Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
> Fragments Scanned: (10) datadbs11
> Index Self Join Keys (aa30acid )
> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> cbsbg.aapf30.aa30date = '20131111'
>
> Query statistics:
> -----------------
> Table map :
> ----------------------------
> Internal name Table name
> ----------------------------
> t1aapf30
> type table rows_prod est_rows rows_scan timeest_cost
> -------------------------------------------------------------------
> scan t1 1871947 1800:00.03 3331663
>
> 3) grantor and grantee information in catalog tables:
>
> grantor cbsbg
> grantee query
> tabid 102
> tabauth s--------
>
> 4) oncheck
>
> I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
> correct.
>
> Do anybody has any suggestion on the problem? thanks for your time .
>
>
>
>
*******************************************************************************
> Forum Note: Use "Reply" to post a response in the discussion forum.
>
>
--001a113429c0b4f5cb04f02ba047
Hi,
Why is aa30date a char(8) and not a date? The month() function operates on
data type date. You are requiring the DB to cast a char(8) to a date which
will depend on DBDATE from the environment that is running the SQL.
George.
From: "CHUAN LU" <luchuan@cn.ibm.com>
To: ids@iiug.org,
Date: 01/17/2014 08:24 AM
Subject: fragment NONE [32241]
Sent by: ids-bounces@iiug.org
Hi,
I fragmented a talbe using month function .
dbschema -d cbsbg -t aapf30 -ssDBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
{ TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size =
38 }
create table "cbsbg".aapf30
(
aa30dpnoa char(11),
aa30dpnok char(11),
aa30acid integer,
aa30date char(8),
aa30seq integer,
aa30brief char(3),
aa30abst char(52),
aa30crdcls char(4),
aa30crdno char(20),
aa30dc char(1),
aa30amt decimal(16,2),
aa30bal decimal(16,2),
aa30acno char(32),
aa30dpno char(11),
aa30stan integer,
aa30trcod char(4),
aa30oprr char(10),
aa30oprc char(10),
aa30attr char(5),
aa30enseq integer,
aa30page integer
)
fragment by expression
(MONTH (aa30date ) = 1 ) in datadbs01,
(MONTH (aa30date ) = 2 ) in datadbs02,
(MONTH (aa30date ) = 3 ) in datadbs03,
(MONTH (aa30date ) = 4 ) in datadbs04,
(MONTH (aa30date ) = 5 ) in datadbs05,
(MONTH (aa30date ) = 6 ) in datadbs06,
(MONTH (aa30date ) = 7 ) in datadbs07,
(MONTH (aa30date ) = 8 ) in datadbs08,
(MONTH (aa30date ) = 9 ) in datadbs09,
(MONTH (aa30date ) = 10 ) in datadbs10,
(MONTH (aa30date ) = 11 ) in datadbs11,
(MONTH (aa30date ) = 12 ) in datadbs12
extent size 500000 next size 500000 lock mode row;
revoke all on "cbsbg".aapf30 from "public" as "cbsbg";
create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
aa30seq) using btree in idxdbs;
create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
aa30page) using btree ;
Totally the table has about 150M rows.
I have two users, one is cbsbg ,it's the development DBA,the other is query
user which use to execute the select statement. I execute the below SQL
with
both cbsbg and query user, cbsbg coult return the corrent result,but query
user show no rows returned.
select * from aapf30 where aa30date='20131111'
I capture the execute plain, and they are different .
1)quyer user:
QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
------
select * from aapf30 where aa30date='20131111'
Estimated Cost: 1186996
Estimated # of Rows Returned: 71947
1) cbsbg.aapf30: INDEX PATH
(1) Index Name: cbsbg.aalf32
Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
Index Self Join Keys (aa30acid )
Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
cbsbg.aapf30.aa30date = '20131111'
Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1 aapf30
type table rows_prod est_rows rows_scan time est_cost
-------------------------------------------------------------------
scan t1 0 71947 0 00:00.00 1186996
select month('20130221') from sysmaster:sysdual
(constant)
0
it show ids doesn't scan any fragment
2) cbsbg user:
select month('20130221') from sysmaster:sysdual
(constant)
2
QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
------
select * from aapf30 where aa30date='20131111'
Estimated Cost: 3331663
Estimated # of Rows Returned: 71947
1) cbsbg.aapf30: INDEX PATH
(1) Index Name: cbsbg.aalf32
Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
Fragments Scanned: (10) datadbs11
Index Self Join Keys (aa30acid )
Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
cbsbg.aapf30.aa30date = '20131111'
Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1aapf30
type table rows_prod est_rows rows_scan timeest_cost
-------------------------------------------------------------------
scan t1 1871947 1800:00.03 3331663
3) grantor and grantee information in catalog tables:
grantor cbsbg
grantee query
tabid 102
tabauth s--------
4) oncheck
I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
correct.
Do anybody has any suggestion on the problem? thanks for your time .
*******************************************************************************
Forum Note: Use "Reply" to post a response in the discussion forum.
Hmmmm.... weird... Do you have the same setting for DBDATE for both users?
As someone else pointed out I find it odd the MONTH(CHAR(8)) works...
Regards.
On Fri, Jan 17, 2014 at 2:23 PM, CHUAN LU <luchuan@cn.ibm.com> wrote:
> Hi,
>
> I fragmented a talbe using month function .
> dbschema -d cbsbg -t aapf30 -ss> DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
>
> { TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size =
> 38 }
> create table "cbsbg".aapf30
> (
>
> aa30dpnoa char(11),
>
> aa30dpnok char(11),
>
> aa30acid integer,
>
> aa30date char(8),
>
> aa30seq integer,
>
> aa30brief char(3),
>
> aa30abst char(52),
>
> aa30crdcls char(4),
>
> aa30crdno char(20),
>
> aa30dc char(1),
>
> aa30amt decimal(16,2),
>
> aa30bal decimal(16,2),
>
> aa30acno char(32),
>
> aa30dpno char(11),
>
> aa30stan integer,
>
> aa30trcod char(4),
>
> aa30oprr char(10),
>
> aa30oprc char(10),
>
> aa30attr char(5),
>
> aa30enseq integer,
>
> aa30page integer
> )
> fragment by expression
>
> (MONTH (aa30date ) = 1 ) in datadbs01,
>
> (MONTH (aa30date ) = 2 ) in datadbs02,
>
> (MONTH (aa30date ) = 3 ) in datadbs03,
>
> (MONTH (aa30date ) = 4 ) in datadbs04,
>
> (MONTH (aa30date ) = 5 ) in datadbs05,
>
> (MONTH (aa30date ) = 6 ) in datadbs06,
>
> (MONTH (aa30date ) = 7 ) in datadbs07,
>
> (MONTH (aa30date ) = 8 ) in datadbs08,
>
> (MONTH (aa30date ) = 9 ) in datadbs09,
>
> (MONTH (aa30date ) = 10 ) in datadbs10,
>
> (MONTH (aa30date ) = 11 ) in datadbs11,
>
> (MONTH (aa30date ) = 12 ) in datadbs12
> extent size 500000 next size 500000 lock mode row;
>
> revoke all on "cbsbg".aapf30 from "public" as "cbsbg";>
> create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
>
> aa30seq) using btree in idxdbs;
> create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
>
> aa30page) using btree ;
> Totally the table has about 150M rows.
>
> I have two users, one is cbsbg ,it's the development DBA,the other is query
> user which use to execute the select statement. I execute the below SQL
> with
> both cbsbg and query user, cbsbg coult return the corrent result,but query
> user show no rows returned.
>
> select * from aapf30 where aa30date='20131111'>
> I capture the execute plain, and they are different .
>
> 1)quyer user:
> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
> ------
> select * from aapf30 where aa30date='20131111'>
> Estimated Cost: 1186996
> Estimated # of Rows Returned: 71947
> 1) cbsbg.aapf30: INDEX PATH
>
> (1) Index Name: cbsbg.aalf32
> Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
> Index Self Join Keys (aa30acid )
> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> cbsbg.aapf30.aa30date = '20131111'
>
> Query statistics:
> -----------------
> Table map :
> ----------------------------
> Internal name Table name
> ----------------------------
> t1 aapf30
> type table rows_prod est_rows rows_scan time est_cost
> -------------------------------------------------------------------
> scan t1 0 71947 0 00:00.00 1186996
>
> select month('20130221') from sysmaster:sysdual
>
> (constant)
>
> 0
> it show ids doesn't scan any fragment
> 2) cbsbg user:
> select month('20130221') from sysmaster:sysdual
>
> (constant)
>
> 2
> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
> ------
> select * from aapf30 where aa30date='20131111'>
> Estimated Cost: 3331663
> Estimated # of Rows Returned: 71947
> 1) cbsbg.aapf30: INDEX PATH
>
> (1) Index Name: cbsbg.aalf32
> Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
> Fragments Scanned: (10) datadbs11
> Index Self Join Keys (aa30acid )
> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> cbsbg.aapf30.aa30date = '20131111'
>
> Query statistics:
> -----------------
> Table map :
> ----------------------------
> Internal name Table name
> ----------------------------
> t1aapf30
> type table rows_prod est_rows rows_scan timeest_cost
> -------------------------------------------------------------------
> scan t1 1871947 1800:00.03 3331663
>
> 3) grantor and grantee information in catalog tables:
>
> grantor cbsbg
> grantee query
> tabid 102
> tabauth s--------
>
> 4) oncheck
>
> I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
> correct.
>
> Do anybody has any suggestion on the problem? thanks for your time .
>
>
>
>
*******************************************************************************
> Forum Note: Use "Reply" to post a response in the discussion forum.
>
>
--
Fernando Nunes
Portugal
http://informix-technology.blogspot.com
My email works... but I don't check it frequently...
--047d7b3436d2b7591704f02c8f4e
Yes... You have the wrong setting for DBDATE on the user who cannot see the
data... You need to set it to "Y4MD". Otherwise the engine will not be able
to parse the fragmentation expression. It should give an error in my
opinion... but Informix really tries hard to work even when it can't...
If anyone find this is wrong behavior, please open a PMR. My first
impression would be that MONTH should not be allowed on non DATE columns...
but it accepts it.And then it breaks when the environment is wrong.
The problem can be easily reproduced.
Regards
On Fri, Jan 17, 2014 at 3:54 PM, Fernando Nunes <domusonline@gmail.com>wrote:
> Hmmmm.... weird... Do you have the same setting for DBDATE for both users?
> As someone else pointed out I find it odd the MONTH(CHAR(8)) works...
> Regards.
>
> On Fri, Jan 17, 2014 at 2:23 PM, CHUAN LU <luchuan@cn.ibm.com> wrote:
>
> > Hi,
> >
> > I fragmented a talbe using month function .
> > dbschema -d cbsbg -t aapf30 -ss> > DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
> >
> > { TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size =
> > 38 }
> > create table "cbsbg".aapf30
> > (
> >
> > aa30dpnoa char(11),
> >
> > aa30dpnok char(11),
> >
> > aa30acid integer,
> >
> > aa30date char(8),
> >
> > aa30seq integer,
> >
> > aa30brief char(3),
> >
> > aa30abst char(52),
> >
> > aa30crdcls char(4),
> >
> > aa30crdno char(20),
> >
> > aa30dc char(1),
> >
> > aa30amt decimal(16,2),
> >
> > aa30bal decimal(16,2),
> >
> > aa30acno char(32),
> >
> > aa30dpno char(11),
> >
> > aa30stan integer,
> >
> > aa30trcod char(4),
> >
> > aa30oprr char(10),
> >
> > aa30oprc char(10),
> >
> > aa30attr char(5),
> >
> > aa30enseq integer,
> >
> > aa30page integer
> > )
> > fragment by expression
> >
> > (MONTH (aa30date ) = 1 ) in datadbs01,
> >
> > (MONTH (aa30date ) = 2 ) in datadbs02,
> >
> > (MONTH (aa30date ) = 3 ) in datadbs03,
> >
> > (MONTH (aa30date ) = 4 ) in datadbs04,
> >
> > (MONTH (aa30date ) = 5 ) in datadbs05,
> >
> > (MONTH (aa30date ) = 6 ) in datadbs06,
> >
> > (MONTH (aa30date ) = 7 ) in datadbs07,
> >
> > (MONTH (aa30date ) = 8 ) in datadbs08,
> >
> > (MONTH (aa30date ) = 9 ) in datadbs09,
> >
> > (MONTH (aa30date ) = 10 ) in datadbs10,
> >
> > (MONTH (aa30date ) = 11 ) in datadbs11,
> >
> > (MONTH (aa30date ) = 12 ) in datadbs12
> > extent size 500000 next size 500000 lock mode row;
> >
> > revoke all on "cbsbg".aapf30 from "public" as "cbsbg";> >
> > create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
> >
> > aa30seq) using btree in idxdbs;
> > create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
> >
> > aa30page) using btree ;
> > Totally the table has about 150M rows.
> >
> > I have two users, one is cbsbg ,it's the development DBA,the other is
> query
> > user which use to execute the select statement. I execute the below SQL
> > with
> > both cbsbg and query user, cbsbg coult return the corrent result,but
> query
> > user show no rows returned.
> >
> > select * from aapf30 where aa30date='20131111'> >
> > I capture the execute plain, and they are different .
> >
> > 1)quyer user:
> > QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
> > ------
> > select * from aapf30 where aa30date='20131111'> >
> > Estimated Cost: 1186996
> > Estimated # of Rows Returned: 71947
> > 1) cbsbg.aapf30: INDEX PATH
> >
> > (1) Index Name: cbsbg.aalf32
> > Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
> > Index Self Join Keys (aa30acid )
> > Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> > cbsbg.aapf30.aa30date = '20131111'
> >
> > Query statistics:
> > -----------------
> > Table map :
> > ----------------------------
> > Internal name Table name
> > ----------------------------
> > t1 aapf30
> > type table rows_prod est_rows rows_scan time est_cost
> > -------------------------------------------------------------------
> > scan t1 0 71947 0 00:00.00 1186996
> >
> > select month('20130221') from sysmaster:sysdual
> >
> > (constant)
> >
> > 0
> > it show ids doesn't scan any fragment
> > 2) cbsbg user:
> > select month('20130221') from sysmaster:sysdual
> >
> > (constant)
> >
> > 2
> > QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
> > ------
> > select * from aapf30 where aa30date='20131111'> >
> > Estimated Cost: 3331663
> > Estimated # of Rows Returned: 71947
> > 1) cbsbg.aapf30: INDEX PATH
> >
> > (1) Index Name: cbsbg.aalf32
> > Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
> > Fragments Scanned: (10) datadbs11
> > Index Self Join Keys (aa30acid )
> > Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> > cbsbg.aapf30.aa30date = '20131111'
> >
> > Query statistics:
> > -----------------
> > Table map :
> > ----------------------------
> > Internal name Table name
> > ----------------------------
> > t1aapf30
> > type table rows_prod est_rows rows_scan timeest_cost
> > -------------------------------------------------------------------
> > scan t1 1871947 1800:00.03 3331663
> >
> > 3) grantor and grantee information in catalog tables:
> >
> > grantor cbsbg
> > grantee query
> > tabid 102
> > tabauth s--------
> >
> > 4) oncheck
> >
> > I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
> > correct.
> >
> > Do anybody has any suggestion on the problem? thanks for your time .
> >
> >
> >
> >
>
>
*******************************************************************************
> > Forum Note: Use "Reply" to post a response in the discussion forum.
> >
> >
>
> --
> Fernando Nunes
> Portugal
>
> http://informix-technology.blogspot.com
> My email works... but I don't check it frequently...
>
> --047d7b3436d2b7591704f02c8f4e
>
>
>
>
*******************************************************************************
> Forum Note: Use "Reply" to post a response in the discussion forum.
>
>
--
Fernando Nunes
Portugal
http://informix-technology.blogspot.com
My email works... but I don't check it frequently...
--089e0111d7327efa8b04f02cec02
Month is expecting a date but I suspect that there is an implicit cast in the
mix - I would expect to work - probably month(char::date)
Cheers
Paul
Paul Watson
Oninit www.oninit.com
+1 913 387 7529
On Jan 17, 2014, at 10:20, "Fernando Nunes" <domusonline@gmail.com> wrote:
> Yes... You have the wrong setting for DBDATE on the user who cannot see the
> data... You need to set it to "Y4MD". Otherwise the engine will not be able
> to parse the fragmentation expression. It should give an error in my
> opinion... but Informix really tries hard to work even when it can't...
>
> If anyone find this is wrong behavior, please open a PMR. My first
> impression would be that MONTH should not be allowed on non DATE columns...
> but it accepts it.And then it breaks when the environment is wrong.
> The problem can be easily reproduced.
> Regards
>
> On Fri, Jan 17, 2014 at 3:54 PM, Fernando Nunes <domusonline@gmail.com>wrote:
>
>> Hmmmm.... weird... Do you have the same setting for DBDATE for both users?
>> As someone else pointed out I find it odd the MONTH(CHAR(8)) works...
>> Regards.
>>
>> On Fri, Jan 17, 2014 at 2:23 PM, CHUAN LU <luchuan@cn.ibm.com> wrote:
>>
>>> Hi,
>>>
>>> I fragmented a talbe using month function .
>>> dbschema -d cbsbg -t aapf30 -ss>>> DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
>>>
>>> { TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index size =
>>> 38 }
>>> create table "cbsbg".aapf30
>>> (
>>>
>>> aa30dpnoa char(11),
>>>
>>> aa30dpnok char(11),
>>>
>>> aa30acid integer,
>>>
>>> aa30date char(8),
>>>
>>> aa30seq integer,
>>>
>>> aa30brief char(3),
>>>
>>> aa30abst char(52),
>>>
>>> aa30crdcls char(4),
>>>
>>> aa30crdno char(20),
>>>
>>> aa30dc char(1),
>>>
>>> aa30amt decimal(16,2),
>>>
>>> aa30bal decimal(16,2),
>>>
>>> aa30acno char(32),
>>>
>>> aa30dpno char(11),
>>>
>>> aa30stan integer,
>>>
>>> aa30trcod char(4),
>>>
>>> aa30oprr char(10),
>>>
>>> aa30oprc char(10),
>>>
>>> aa30attr char(5),
>>>
>>> aa30enseq integer,
>>>
>>> aa30page integer
>>> )
>>> fragment by expression
>>>
>>> (MONTH (aa30date ) = 1 ) in datadbs01,
>>>
>>> (MONTH (aa30date ) = 2 ) in datadbs02,
>>>
>>> (MONTH (aa30date ) = 3 ) in datadbs03,
>>>
>>> (MONTH (aa30date ) = 4 ) in datadbs04,
>>>
>>> (MONTH (aa30date ) = 5 ) in datadbs05,
>>>
>>> (MONTH (aa30date ) = 6 ) in datadbs06,
>>>
>>> (MONTH (aa30date ) = 7 ) in datadbs07,
>>>
>>> (MONTH (aa30date ) = 8 ) in datadbs08,
>>>
>>> (MONTH (aa30date ) = 9 ) in datadbs09,
>>>
>>> (MONTH (aa30date ) = 10 ) in datadbs10,
>>>
>>> (MONTH (aa30date ) = 11 ) in datadbs11,
>>>
>>> (MONTH (aa30date ) = 12 ) in datadbs12
>>> extent size 500000 next size 500000 lock mode row;
>>>
>>> revoke all on "cbsbg".aapf30 from "public" as "cbsbg";>>>
>>> create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
>>>
>>> aa30seq) using btree in idxdbs;
>>> create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
>>>
>>> aa30page) using btree ;
>>> Totally the table has about 150M rows.
>>>
>>> I have two users, one is cbsbg ,it's the development DBA,the other is
>> query
>>> user which use to execute the select statement. I execute the below SQL
>>> with
>>> both cbsbg and query user, cbsbg coult return the corrent result,but
>> query
>>> user show no rows returned.
>>>
>>> select * from aapf30 where aa30date='20131111'>>>
>>> I capture the execute plain, and they are different .
>>>
>>> 1)quyer user:
>>> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
>>> ------
>>> select * from aapf30 where aa30date='20131111'>>>
>>> Estimated Cost: 1186996
>>> Estimated # of Rows Returned: 71947
>>> 1) cbsbg.aapf30: INDEX PATH
>>>
>>> (1) Index Name: cbsbg.aalf32
>>> Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
>>> Index Self Join Keys (aa30acid )
>>> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
>>> cbsbg.aapf30.aa30date = '20131111'
>>>
>>> Query statistics:
>>> -----------------
>>> Table map :
>>> ----------------------------
>>> Internal name Table name
>>> ----------------------------
>>> t1 aapf30
>>> type table rows_prod est_rows rows_scan time est_cost
>>> -------------------------------------------------------------------
>>> scan t1 0 71947 0 00:00.00 1186996
>>>
>>> select month('20130221') from sysmaster:sysdual
>>>
>>> (constant)
>>>
>>> 0
>>> it show ids doesn't scan any fragment
>>> 2) cbsbg user:
>>> select month('20130221') from sysmaster:sysdual
>>>
>>> (constant)
>>>
>>> 2
>>> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
>>> ------
>>> select * from aapf30 where aa30date='20131111'>>>
>>> Estimated Cost: 3331663
>>> Estimated # of Rows Returned: 71947
>>> 1) cbsbg.aapf30: INDEX PATH
>>>
>>> (1) Index Name: cbsbg.aalf32
>>> Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
>>> Fragments Scanned: (10) datadbs11
>>> Index Self Join Keys (aa30acid )
>>> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
>>> cbsbg.aapf30.aa30date = '20131111'
>>>
>>> Query statistics:
>>> -----------------
>>> Table map :
>>> ----------------------------
>>> Internal name Table name
>>> ----------------------------
>>> t1aapf30
>>> type table rows_prod est_rows rows_scan timeest_cost
>>> -------------------------------------------------------------------
>>> scan t1 1871947 1800:00.03 3331663
>>>
>>> 3) grantor and grantee information in catalog tables:
>>>
>>> grantor cbsbg
>>> grantee query
>>> tabid 102
>>> tabauth s--------
>>>
>>> 4) oncheck
>>>
>>> I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
>>> correct.
>>>
>>> Do anybody has any suggestion on the problem? thanks for your time .
>
*******************************************************************************
>>> Forum Note: Use "Reply" to post a response in the discussion forum.
>>
>> --
>> Fernando Nunes
>> Portugal
>>
>> http://informix-technology.blogspot.com
>> My email works... but I don't check it frequently...
>>
>> --047d7b3436d2b7591704f02c8f4e
>
*******************************************************************************
>> Forum Note: Use "Reply" to post a response in the discussion forum.
>
> --
> Fernando Nunes
> Portugal
>
> http://informix-technology.blogspot.com
> My email works... but I don't check it frequently...
>
> --089e0111d7327efa8b04f02cec02
>
>
>
*******************************************************************************
> Forum Note: Use "Reply" to post a response in the discussion forum.
It does... And it's good. The bad part is that when DBDATE is wrong, it
doesn't complain... silently fails and gives no rows. If you try an INSERT
it complains. I think this is not very consistent and leads to confusion.
I'd prefer to see the same error as you get on an INSERT.
Regards.
On Fri, Jan 17, 2014 at 5:15 PM, Paul Watson <paul@oninit.com> wrote:
> Month is expecting a date but I suspect that there is an implicit cast in
> the
> mix - I would expect to work - probably month(char::date)
>
> Cheers
> Paul
>
> Paul Watson
> Oninit www.oninit.com
> +1 913 387 7529
>
> On Jan 17, 2014, at 10:20, "Fernando Nunes" <domusonline@gmail.com> wrote:
>
> > Yes... You have the wrong setting for DBDATE on the user who cannot see
> the
> > data... You need to set it to "Y4MD". Otherwise the engine will not be
> able
> > to parse the fragmentation expression. It should give an error in my
> > opinion... but Informix really tries hard to work even when it can't...
> >
> > If anyone find this is wrong behavior, please open a PMR. My first
> > impression would be that MONTH should not be allowed on non DATE
> columns...
> > but it accepts it.And then it breaks when the environment is wrong.
> > The problem can be easily reproduced.
> > Regards
> >
> > On Fri, Jan 17, 2014 at 3:54 PM, Fernando Nunes
> <domusonline@gmail.com>wrote:
> >
> >> Hmmmm.... weird... Do you have the same setting for DBDATE for both
> users?
> >> As someone else pointed out I find it odd the MONTH(CHAR(8)) works...
> >> Regards.
> >>
> >> On Fri, Jan 17, 2014 at 2:23 PM, CHUAN LU <luchuan@cn.ibm.com> wrote:
> >>
> >>> Hi,
> >>>
> >>> I fragmented a talbe using month function .
> >>> dbschema -d cbsbg -t aapf30 -ss> >>> DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC7
> >>>
> >>> { TABLE "cbsbg".aapf30 row size = 220 number of columns = 21 index
> size =
> >>> 38 }
> >>> create table "cbsbg".aapf30
> >>> (
> >>>
> >>> aa30dpnoa char(11),
> >>>
> >>> aa30dpnok char(11),
> >>>
> >>> aa30acid integer,
> >>>
> >>> aa30date char(8),
> >>>
> >>> aa30seq integer,
> >>>
> >>> aa30brief char(3),
> >>>
> >>> aa30abst char(52),
> >>>
> >>> aa30crdcls char(4),
> >>>
> >>> aa30crdno char(20),
> >>>
> >>> aa30dc char(1),
> >>>
> >>> aa30amt decimal(16,2),
> >>>
> >>> aa30bal decimal(16,2),
> >>>
> >>> aa30acno char(32),
> >>>
> >>> aa30dpno char(11),
> >>>
> >>> aa30stan integer,
> >>>
> >>> aa30trcod char(4),
> >>>
> >>> aa30oprr char(10),
> >>>
> >>> aa30oprc char(10),
> >>>
> >>> aa30attr char(5),
> >>>
> >>> aa30enseq integer,
> >>>
> >>> aa30page integer
> >>> )
> >>> fragment by expression
> >>>
> >>> (MONTH (aa30date ) = 1 ) in datadbs01,
> >>>
> >>> (MONTH (aa30date ) = 2 ) in datadbs02,
> >>>
> >>> (MONTH (aa30date ) = 3 ) in datadbs03,
> >>>
> >>> (MONTH (aa30date ) = 4 ) in datadbs04,
> >>>
> >>> (MONTH (aa30date ) = 5 ) in datadbs05,
> >>>
> >>> (MONTH (aa30date ) = 6 ) in datadbs06,
> >>>
> >>> (MONTH (aa30date ) = 7 ) in datadbs07,
> >>>
> >>> (MONTH (aa30date ) = 8 ) in datadbs08,
> >>>
> >>> (MONTH (aa30date ) = 9 ) in datadbs09,
> >>>
> >>> (MONTH (aa30date ) = 10 ) in datadbs10,
> >>>
> >>> (MONTH (aa30date ) = 11 ) in datadbs11,
> >>>
> >>> (MONTH (aa30date ) = 12 ) in datadbs12
> >>> extent size 500000 next size 500000 lock mode row;
> >>>
> >>> revoke all on "cbsbg".aapf30 from "public" as "cbsbg";> >>>
> >>> create unique index "cbsbg".aalf31 on "cbsbg".aapf30 (aa30acid,
> >>>
> >>> aa30seq) using btree in idxdbs;
> >>> create index "cbsbg".aalf32 on "cbsbg".aapf30 (aa30acid,aa30date,
> >>>
> >>> aa30page) using btree ;
> >>> Totally the table has about 150M rows.
> >>>
> >>> I have two users, one is cbsbg ,it's the development DBA,the other is
> >> query
> >>> user which use to execute the select statement. I execute the below SQL
> >>> with
> >>> both cbsbg and query user, cbsbg coult return the corrent result,but
> >> query
> >>> user show no rows returned.
> >>>
> >>> select * from aapf30 where aa30date='20131111'> >>>
> >>> I capture the execute plain, and they are different .
> >>>
> >>> 1)quyer user:
> >>> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 20:56:49)
> >>> ------
> >>> select * from aapf30 where aa30date='20131111'> >>>
> >>> Estimated Cost: 1186996
> >>> Estimated # of Rows Returned: 71947
> >>> 1) cbsbg.aapf30: INDEX PATH
> >>>
> >>> (1) Index Name: cbsbg.aalf32
> >>> Index Keys: aa30acid aa30date aa30page (Serial, fragments: NONE)
> >>> Index Self Join Keys (aa30acid )
> >>> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> >>> cbsbg.aapf30.aa30date = '20131111'
> >>>
> >>> Query statistics:
> >>> -----------------
> >>> Table map :
> >>> ----------------------------
> >>> Internal name Table name
> >>> ----------------------------
> >>> t1 aapf30
> >>> type table rows_prod est_rows rows_scan time est_cost
> >>> -------------------------------------------------------------------
> >>> scan t1 0 71947 0 00:00.00 1186996
> >>>
> >>> select month('20130221') from sysmaster:sysdual
> >>>
> >>> (constant)
> >>>
> >>> 0
> >>> it show ids doesn't scan any fragment
> >>> 2) cbsbg user:
> >>> select month('20130221') from sysmaster:sysdual
> >>>
> >>> (constant)
> >>>
> >>> 2
> >>> QUERY: (OPTIMIZATION TIMESTAMP: 01-17-2014 19:27:16)
> >>> ------
> >>> select * from aapf30 where aa30date='20131111'> >>>
> >>> Estimated Cost: 3331663
> >>> Estimated # of Rows Returned: 71947
> >>> 1) cbsbg.aapf30: INDEX PATH
> >>>
> >>> (1) Index Name: cbsbg.aalf32
> >>> Index Keys: aa30acid aa30date aa30page (Serial, fragments: 10)
> >>> Fragments Scanned: (10) datadbs11
> >>> Index Self Join Keys (aa30acid )
> >>> Lower Index Filter: cbsbg.aapf30.aa30acid = cbsbg.aapf30.aa30acid AND
> >>> cbsbg.aapf30.aa30date = '20131111'
> >>>
> >>> Query statistics:
> >>> -----------------
> >>> Table map :
> >>> ----------------------------
> >>> Internal name Table name
> >>> ----------------------------
> >>> t1aapf30
> >>> type table rows_prod est_rows rows_scan timeest_cost
> >>> -------------------------------------------------------------------
> >>> scan t1 1871947 1800:00.03 3331663
> >>>
> >>> 3) grantor and grantee information in catalog tables:
> >>>
> >>> grantor cbsbg
> >>> grantee query
> >>> tabid 102
> >>> tabauth s--------
> >>>
> >>> 4) oncheck
> >>>
> >>> I use query user to run the "oncheck -pT cbsbg:aapf30", the ouput is
> >>> correct.
> >>>
> >>> Do anybody has any suggestion on the problem? thanks for your time .
> >
>
>
*******************************************************************************
> >>> Forum Note: Use "Reply" to post a response in the discussion forum.
> >>
After setting "export DBDATE=Y4MD/", it work fine. great. thanks.