WATER MARK
- Serve para definir a quantidade de blocos que uma determinada tabela está usando no momento.
- Mesmo excluindo os registros a marca d’água continua indicando o tamanho máximo de onde um dia chegou a quantidade de registros.
Condição Inicial dos Blocos Demarcados pela Water Mark |
Condição dos Blocos Demarcados pela Water Mark Após Delete. |
PRÁTICAS COM MARCA D'ÁGUA
Prática 1/6
A marca d’água indica até onde uma tabela cresceu. Serve para definir a quantidade de blocos que uma determinada tabela está usando no momento. Vamos criar a tabela TESTE para verificar o conceito:drop table scott.teste;
create table scott.teste (id number);
Prática 2/6
Neste momento a tabela está vazia e não há nenhuma estatística coletada para a mesma. A consulta abaixo ilustra essa situação:
------EXIBIR TABELA VAZIA-----------------
select owner, table_name, blocks, empty_blocks, num_rows, to_char(last_analyzed,'DD-MM-RRRR HH24:MI:SS') as "ANALYZE" from dba_tables where table_name = 'TESTE';
Prática 3/6
Vamos popular a tabela e verificar o impacto que isso gerará
insert into scott.teste values(1);
insert into scott.teste (select * from scott.teste);
insert into scott.teste (select * from scott.teste);
insert into scott.teste (select * from scott.teste);
insert into scott.teste (select * from scott.teste);
insert into scott.teste (select * from scott.teste);
insert into scott.teste (select * from scott.teste);
commit;
select owner, table_name, blocks, empty_blocks, num_rows, to_char(last_analyzed,'DD-MM-RRRR HH24:MI:SS') as "ANALYZE" from dba_tables
where table_name = 'TESTE';
Prática 4/6
Colete manualmente as estatísticas da tabela TESTE:
exec dbms_stats.gather_table_stats (ownname=>'SCOTT',tabname=>'TESTE',estimate_percent=>null,method_opt=>'FOR ALL COLUMNS SIZE AUTO',degree=>6);
select owner, table_name, blocks, empty_blocks, num_rows, to_char(last_analyzed,'DD-MM-RRRR HH24:MI:SS') as "ANALYZE" from dba_tables where table_name = 'TESTE';
Prática 5/6
Para verificar onde está a marca d'água crie o script abaixo e o execute:
set serveroutput on;
DECLARE v_owner VARCHAR2(30) := 'SCOTT' ;
v_segment_name VARCHAR2(30) := 'TESTE';
v_segment_type VARCHAR2(30) := 'TABLE';
v_total_blocks NUMBER;
v_total_bytes NUMBER;
v_unused_blocks NUMBER;
v_unused_bytes NUMBER;
v_last_used_extent_file_id NUMBER;
v_last_used_extent_block_id NUMBER;
v_last_used_block NUMBER;
BEGIN dbms_space.unused_space(v_owner, v_segment_name, v_segment_type, v_total_blocks, v_total_bytes,v_unused_blocks, v_unused_bytes, v_last_used_extent_file_id, v_last_used_extent_block_id, v_last_used_block );
dbms_output.put_line(INITCAP(v_segment_type)||':'||v_owner||'.'||v_segment_name);
dbms_output.put_line('Total Blocos :'||TO_CHAR(v_total_blocks));
dbms_output.put_line('Blocos depois da Marca DÁgua :'||TO_CHAR(v_unused_blocks));
END;
/
Prática 6/6
Observe o comportamento da marca d'água após o comando delete e o comando truncate
delete scott.teste;
executar o script da marca d'água
truncate table scott.teste;
executar o script da marca d'água.
Nenhum comentário:
Postar um comentário