Re: same sql: different db block gets in different oracle version

2003-01-22 Thread Jonathan Lewis

Tablescans in Oracle 8 start with 4 current
gets (db block gets) on the segment header
block - in Oracle 9 tablescans start with
2 consistent gets on the segment header.

I can't tell you why you have 12 current gets
rather than 4 - but if the tests aren't identical,
the physical reads and extra current gets may
be related to delayed cleanout on a first read.



Regards

Jonathan Lewis
http://www.jlcomp.demon.co.uk

Coming soon a new one-day tutorial:
Cost Based Optimisation
(see http://www.jlcomp.demon.co.uk/tutorial.html )

Next Seminar dates:
(see http://www.jlcomp.demon.co.uk/seminar.html )

England__January 21/23
USA_(CA, TX)_August


The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/faq/ind_faq.html





-Original Message-
To: Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
Date: 22 January 2003 07:42


Hi, dba friends:

 Look at the following test result, the first one is from oracle9.2,
and the second is from the oracle 817. The table is same, and as you
see, the execution path is the same.
 But there is difference in statistics: db_block_gets, in oracle92,
it is 0, and in oracle817, it is not.
 And i noticed that in oracle8i, all sql that does only query with
execution path full scan of table/index,there will always be
db_block_gets, while in 9i, select won't make db_block_gets.
 As tom said, db_block_gets is increased when data is accessed for
update, how does this query generate this statistics?


ORA92 select count(*) from abc;

  COUNT(*)
--
 1

Execution Plan
--
   0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1)
   1 0 SORT (AGGREGATE)
   2 1 TABLE ACCESS (FULL) OF 'ABC' (Cost=6 Card=1)

Statistics
--
  0 recursive calls
  0 db block gets
 27 consistent gets
  0 physical reads
  0 redo size
379 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  0 sorts (memory)
  0 sorts (disk)
  1 rows processed

ORA817 select count(*) from abc;

  COUNT(*)
--
 1

Elapsed: 00:00:00.26

Execution Plan
--
   0 SELECT STATEMENT Optimizer=CHOOSE
   1 0 SORT (AGGREGATE)
   2 1 TABLE ACCESS (FULL) OF 'ABC'

Statistics
--
  0 recursive calls
 12 db block gets
 28 consistent gets
 24 physical reads
  0 redo size
367 bytes sent via SQL*Net to client
425 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  0 sorts (memory)
  0 sorts (disk)
  1 rows processed


Regards
zhu chao
msn:[EMAIL PROTECTED]
www.happyit.net
www.cnoug.org(China Oracle User Group)



-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Jonathan Lewis
  INET: [EMAIL PROTECTED]

Fat City Network Services-- 858-538-5051 http://www.fatcity.com
San Diego, California-- Mailing list and web hosting services
-
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).




RE: same sql: different db block gets in different oracle version

2003-01-22 Thread Sony kristanto
Check your setting parameter for db_block_gets and compare between oracle9.2
and oracle817. Is it equivalent setting parameter ?

 -Original Message-
 From: chao_ping [SMTP:[EMAIL PROTECTED]]
 Sent: Wednesday, January 22, 2003 1:54 PM
 To:   Multiple recipients of list ORACLE-L
 Subject:  same sql: different db block gets in different oracle
 version 
 
 Hi, dba friends:
   
   Look at the following test result, the first one is from oracle9.2,
 and the second is from the oracle 817. The table is same, and as you see,
 the execution path is the same.
   But there is difference in statistics: db_block_gets, in oracle92,
 it is 0, and in oracle817, it is not.
   And i noticed that in oracle8i, all sql that does only query with
 execution path full scan of table/index,there will always be
 db_block_gets, while in 9i, select won't make db_block_gets.
   As tom said, db_block_gets is increased when data is accessed for
 update, how does this query generate this statistics? 
   
   
 ORA92 select count(*) from abc; 
 
   COUNT(*) 
 -- 
  1 
 
 Execution Plan 
 -- 
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1) 
1 0 SORT (AGGREGATE) 
2 1 TABLE ACCESS (FULL) OF 'ABC' (Cost=6 Card=1) 
 
 Statistics 
 -- 
   0 recursive calls 
   0 db block gets 
  27 consistent gets 
   0 physical reads 
   0 redo size 
 379 bytes sent via SQL*Net to client 
 503 bytes received via SQL*Net from client 
   2 SQL*Net roundtrips to/from client 
   0 sorts (memory) 
   0 sorts (disk) 
   1 rows processed 
 
 ORA817 select count(*) from abc; 
 
   COUNT(*) 
 -- 
  1 
 
 Elapsed: 00:00:00.26 
 
 Execution Plan 
 -- 
0 SELECT STATEMENT Optimizer=CHOOSE 
1 0 SORT (AGGREGATE) 
2 1 TABLE ACCESS (FULL) OF 'ABC' 
 
 Statistics 
 -- 
   0 recursive calls 
  12 db block gets 
  28 consistent gets 
  24 physical reads 
   0 redo size 
 367 bytes sent via SQL*Net to client 
 425 bytes received via SQL*Net from client 
   2 SQL*Net roundtrips to/from client 
   0 sorts (memory) 
   0 sorts (disk) 
   1 rows processed 
 
 
 Regards
 zhu chao
 msn:[EMAIL PROTECTED]
 www.happyit.net
 www.cnoug.org(China Oracle User Group)
 
 
 -- 
 Please see the official ORACLE-L FAQ: http://www.orafaq.net
 -- 
 Author: chao_ping
   INET: [EMAIL PROTECTED]
 
 Fat City Network Services-- 858-538-5051 http://www.fatcity.com
 San Diego, California-- Mailing list and web hosting services
 -
 To REMOVE yourself from this mailing list, send an E-Mail message
 to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
 the message BODY, include a line containing: UNSUB ORACLE-L
 (or the name of mailing list you want to be removed from).  You may
 also send the HELP command for other information (like subscribing).
 
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Sony kristanto
  INET: [EMAIL PROTECTED]

Fat City Network Services-- 858-538-5051 http://www.fatcity.com
San Diego, California-- Mailing list and web hosting services
-
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).




Re: Re: same sql: different db block gets in different oracle version

2003-01-22 Thread chao_ping
Jonathan Lewis,
Thanks very much for your reply. Yes, in oracle 8i on sun solaris, the 
db block gets of fulltable scan is always 4block, no matter what the size of the table 
is. But in my tests in linux/817, it always show 12(8170 and 8172).I run the full scan 
again and again, but the value does not change.
And another problem is why in oracle9i, there is no db_block_gets when 
doing full segment scan.I checked asktom.oracle.com, but unable to find the answer. 
And i also tested 9.0.1 on sun solaris , when very small, db_block_gets is 6,while 
larger tables(12K records from dba_tables), db_block_gets is 12.  
Scanning the segment header caused the current mode read,is it because 
of scanning the buffer pool head and getting the cache buffer chains latch in 
exclusive mode,and the buffer head will be moved the other end lru list? why scanning 
the other data block does not cause the current read? Sorry, I asked to much, and 
maybe they are meanless, but if possible, I still want to know. 

Sony kristanto, what kind of parameters do you think will affect the 
db_block_gets? I will post them.
Thanks.




Regards
zhu chao
msn:[EMAIL PROTECTED]
www.happyit.net
www.cnoug.org(China Oracle User Group)

=== 2003-01-22 00:33:00 ,you wrote£º===

Tablescans in Oracle 8 start with 4 current
gets (db block gets) on the segment header
block - in Oracle 9 tablescans start with
2 consistent gets on the segment header.

I can't tell you why you have 12 current gets
rather than 4 - but if the tests aren't identical,
the physical reads and extra current gets may
be related to delayed cleanout on a first read.



Regards

Jonathan Lewis
http://www.jlcomp.demon.co.uk

Coming soon a new one-day tutorial:
Cost Based Optimisation
(see http://www.jlcomp.demon.co.uk/tutorial.html )

Next Seminar dates:
(see http://www.jlcomp.demon.co.uk/seminar.html )

England__January 21/23
USA_(CA, TX)_August


The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/faq/ind_faq.html





-Original Message-
To: Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
Date: 22 January 2003 07:42




-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: chao_ping
  INET: [EMAIL PROTECTED]

Fat City Network Services-- 858-538-5051 http://www.fatcity.com
San Diego, California-- Mailing list and web hosting services
-
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).




Re: same sql: different db block gets in different oracle version

2003-01-22 Thread Arup Nanda
Cho,

This is not unusual. I suspect your db_cache_size (or db_block_buffers) in
9.2 is more than db_block_buffers in 8.1. When you do a FTS, all the blocks
are loaded into the buffers first time so 'db block gets' is a non zero
value (it's the physical IO). The next time you do this, the blocks are
found in the buffer already, so there is no physical IO, hence a zero value
for 'db block gets'. However, your logical reads (consistent gets) should be
the same and they are the same. In 817, run the query once again and see the
'db block gets' , it should be 0. If not then check if db_block_buffers is
less than db_cache_size (or db_block_buffers) in 9.2.

HTH.

Arup

- Original Message -
To: Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
Sent: Wednesday, January 22, 2003 1:53 AM


 Hi, dba friends:

 Look at the following test result, the first one is from oracle9.2, and
the second is from the oracle 817. The table is same, and as you see, the
execution path is the same.
 But there is difference in statistics: db_block_gets, in oracle92, it is
0, and in oracle817, it is not.
 And i noticed that in oracle8i, all sql that does only query with
execution path full scan of table/index,there will always be db_block_gets,
while in 9i, select won't make db_block_gets.
 As tom said, db_block_gets is increased when data is accessed for update,
how does this query generate this statistics?


 ORA92 select count(*) from abc;

   COUNT(*)
 --
  1

 Execution Plan
 --
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'ABC' (Cost=6 Card=1)

 Statistics
 --
   0 recursive calls
   0 db block gets
  27 consistent gets
   0 physical reads
   0 redo size
 379 bytes sent via SQL*Net to client
 503 bytes received via SQL*Net from client
   2 SQL*Net roundtrips to/from client
   0 sorts (memory)
   0 sorts (disk)
   1 rows processed

 ORA817 select count(*) from abc;

   COUNT(*)
 --
  1

 Elapsed: 00:00:00.26

 Execution Plan
 --
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'ABC'

 Statistics
 --
   0 recursive calls
  12 db block gets
  28 consistent gets
  24 physical reads
   0 redo size
 367 bytes sent via SQL*Net to client
 425 bytes received via SQL*Net from client
   2 SQL*Net roundtrips to/from client
   0 sorts (memory)
   0 sorts (disk)
   1 rows processed


 Regards
 zhu chao
 msn:[EMAIL PROTECTED]
 www.happyit.net
 www.cnoug.org(China Oracle User Group)


 --
 Please see the official ORACLE-L FAQ: http://www.orafaq.net
 --
 Author: chao_ping
   INET: [EMAIL PROTECTED]

 Fat City Network Services-- 858-538-5051 http://www.fatcity.com
 San Diego, California-- Mailing list and web hosting services
 -
 To REMOVE yourself from this mailing list, send an E-Mail message
 to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
 the message BODY, include a line containing: UNSUB ORACLE-L
 (or the name of mailing list you want to be removed from).  You may
 also send the HELP command for other information (like subscribing).

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Arup Nanda
  INET: [EMAIL PROTECTED]

Fat City Network Services-- 858-538-5051 http://www.fatcity.com
San Diego, California-- Mailing list and web hosting services
-
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).




Re: Re: same sql: different db block gets in different oracle version

2003-01-22 Thread Jonathan Lewis

One reason for seeing more db_block_gets
than you expect on a full segment scan
is that every extent map block (of which
the segment header block is just one)
is accessed differently.  If you have small
extents and large objects, you may have
overshoot the maximum extents allowed
in the segment header block - so the 12
db_block_gets could indicate 2 extra
map blocks.

NOTE - Oracle 9 simply does not do
4 CU gets on map blocks.

8.14 CU gets per map block
9.22 CR gets per map block
9.02 gets, but can't remember if they are CU or CR

Also - bigger tables = more map blocks may have been used


Regards

Jonathan Lewis
http://www.jlcomp.demon.co.uk

Coming soon a new one-day tutorial:
Cost Based Optimisation
(see http://www.jlcomp.demon.co.uk/tutorial.html )

Next Seminar dates:
(see http://www.jlcomp.demon.co.uk/seminar.html )

England__January 21/23
USA_(CA, TX)_August


The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/faq/ind_faq.html





-Original Message-
To: Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
Date: 22 January 2003 15:47
version


Jonathan Lewis,
Thanks very much for your reply. Yes, in oracle 8i on sun solaris, the
db block gets of fulltable scan is always 4block, no matter what the
size of the table is. But in my tests in linux/817, it always show
12(8170 and 8172).I run the full scan again and again, but the value
does not change.
And another problem is why in oracle9i, there is no db_block_gets when
doing full segment scan.I checked asktom.oracle.com, but unable to
find the answer. And i also tested 9.0.1 on sun solaris , when very
small, db_block_gets is 6,while larger tables(12K records from
dba_tables), db_block_gets is 12.
Scanning the segment header caused the current mode read,is it because
of scanning the buffer pool head and getting the cache buffer chains
latch in exclusive mode,and the buffer head will be moved the other
end lru list? why scanning the other data block does not cause the
current read? Sorry, I asked to much, and maybe they are meanless, but
if possible, I still want to know.

Sony kristanto, what kind of parameters do you think will affect the
db_block_gets? I will post them.
Thanks.



-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Jonathan Lewis
  INET: [EMAIL PROTECTED]

Fat City Network Services-- 858-538-5051 http://www.fatcity.com
San Diego, California-- Mailing list and web hosting services
-
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).