DBMS_SPACE
The DBMS_SPACE package enables you to analyze segment growth and space requirements.
Посмотреть свободное место можно DBMS_SPACE.UNUSED_SPACE и DBMS_SPACE.FREE_BLOCKS.
DBMS_SPACE.UNUSED_SPACE возвращает количество блоков выше HWM в сегменте,
т.е. количество блоков которые никогда не использовались ранее.
То же самое можно получить из DBA_TABLES.EMPTY_BLOCKS после анализа таблицы:
Пример использования:
DBMS_SPACE.FREE_BLOCKS возвращает кол-во блоков ниже HWM, у которых кол-во строк меньше PCTUSED, т.е. список блоков в которые можно вставлять строки.
То же самое можно получить из DBA_TABLES.NUM_FREELIST_BLOCKS после анализа таблицы:
The DBMS_SPACE package enables you to analyze segment growth and space requirements.
Посмотреть свободное место можно DBMS_SPACE.UNUSED_SPACE и DBMS_SPACE.FREE_BLOCKS.
DBMS_SPACE.UNUSED_SPACE возвращает количество блоков выше HWM в сегменте,
т.е. количество блоков которые никогда не использовались ранее.
То же самое можно получить из DBA_TABLES.EMPTY_BLOCKS после анализа таблицы:
analyze table t compute statistics;
select empty_blocks from dba_tables where table_name='T';
Пример использования:
-- создадим таблицу
create table t as select * from all_objects;
-- соберём статистику
analyze table t compute statistics;
-- dbms_space.unused_space
declare
total_blocks number;
total_bytes number;
unused_blocks number;
unused_bytes number;
last_used_extent_file_id number;
last_used_extent_block_id number;
last_used_block number;
partition_name number;
begin
DBMS_SPACE.UNUSED_SPACE('GUPPI', 'T','TABLE',total_blocks,total_bytes,unused_blocks,unused_bytes,
last_used_extent_file_id,last_used_extent_block_id,last_used_block,partition_name);
dbms_output.put_line('Total blocks = '||total_blocks);
dbms_output.put_line('Total bytes = '||total_bytes);
dbms_output.put_line('Unused blocks = '||unused_blocks);
dbms_output.put_line('Unused bytes = '||unused_bytes);
end;
==================
Total blocks = 646
Total bytes = 5292032
Unused blocks = 113
Unused bytes = 925696
То же самое можно получить из dba_tables, dba_segments:
select * from dba_tables where table_name='T';
select * from dba_segments where segment_name='T';
create table t as select * from all_objects;
-- соберём статистику
analyze table t compute statistics;
-- dbms_space.unused_space
declare
total_blocks number;
total_bytes number;
unused_blocks number;
unused_bytes number;
last_used_extent_file_id number;
last_used_extent_block_id number;
last_used_block number;
partition_name number;
begin
DBMS_SPACE.UNUSED_SPACE('GUPPI', 'T','TABLE',total_blocks,total_bytes,unused_blocks,unused_bytes,
last_used_extent_file_id,last_used_extent_block_id,last_used_block,partition_name);
dbms_output.put_line('Total blocks = '||total_blocks);
dbms_output.put_line('Total bytes = '||total_bytes);
dbms_output.put_line('Unused blocks = '||unused_blocks);
dbms_output.put_line('Unused bytes = '||unused_bytes);
end;
==================
Total blocks = 646
Total bytes = 5292032
Unused blocks = 113
Unused bytes = 925696
То же самое можно получить из dba_tables, dba_segments:
select * from dba_tables where table_name='T';
select * from dba_segments where segment_name='T';
DBMS_SPACE.FREE_BLOCKS возвращает кол-во блоков ниже HWM, у которых кол-во строк меньше PCTUSED, т.е. список блоков в которые можно вставлять строки.
То же самое можно получить из DBA_TABLES.NUM_FREELIST_BLOCKS после анализа таблицы:
analyze table t compute statistics;
select NUM_FREELIST_BLOCKS from dba_tables where table_name='T';
create table t as select * from all_objects;
analyze table t compute statistics;
-- посмотрим HWM
select empty_blocks from dba_tables where table_name='T';
===============
113
-- dbms_space.free_blocks
declare
free_blocks number;
begin
DBMS_SPACE.FREE_BLOCKS('GUPPI', 'T','TABLE',0,free_blocks);
dbms_output.put_line('Nb of free blocks = '||free_blocks);
end;
/
===============
Nb of free blocks = 0
delete from guppi.t where owner='ARBOR';
commit;
снова запускаем dbms_space.free_blocks
===============
Nb of free blocks = 76
HWM при это остаётся неизменным
select empty_blocks from dba_tables where table_name='T';
===============
113
analyze table t compute statistics;
-- посмотрим HWM
select empty_blocks from dba_tables where table_name='T';
===============
113
-- dbms_space.free_blocks
declare
free_blocks number;
begin
DBMS_SPACE.FREE_BLOCKS('GUPPI', 'T','TABLE',0,free_blocks);
dbms_output.put_line('Nb of free blocks = '||free_blocks);
end;
/
===============
Nb of free blocks = 0
delete from guppi.t where owner='ARBOR';
commit;
снова запускаем dbms_space.free_blocks
===============
Nb of free blocks = 76
HWM при это остаётся неизменным
select empty_blocks from dba_tables where table_name='T';
===============
113