Pas plus de 2 lignes par bloc !

Suite à une conversation intéressante à propos du facteur de Håkan et Oracle, j’ai découvert que vous pouviez limiter le nombre de lignes par bloc dans une table artificiellement et sans toucher PCTFREE… Démonstration :

create table x (x number);

select spare1
from sys.tab$, dba_objects do
where do.object_id = tab$.obj#
and do.object_name = 'X';

SPARE1
------
736

insert into X values (1);

commit;

alter table X minimize records_per_block;

truncate table x;

begin
for i in 1..200 loop
insert into x values (1);
end loop;
end;
/

select rows_per_block, count(*) num_blocks
from
(select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block,
count(*) rows_per_block
from x
group by dbms_rowid.ROWID_BLOCK_NUMBER(rowid))
group by rows_per_block;


ROWS_PER_BLOCK NUM_BLOCKS
-------------- ----------
2 100

select spare1-8*power(16,3) rows_per_block
from sys.tab$, dba_objects do
where do.object_id = tab$.obj#
and do.object_name = 'X';

ROWS_PER_BLOCK
--------------
1

Un nouvel éventail de possibilités…

2 réflexions sur “Pas plus de 2 lignes par bloc !”

  1. Thanks for such an amazing blog. This blog is one of the most educating blog I have ever visited.
    Bookmarked this blog so that I can come again and read more good stuf.
    Thanks

  2. Juste comme note, cette chose était mentionné dans livre de Lewis de 8i – Building efficient databases

    Igor

Les commentaires sont fermés.