sábado, 23 de novembro de 2013

ORACLE DB PERFORMANCE TUNING ESTATÍSTICAS

Estatísticas
- Estatísticas são conjuntos de dados com detalhes do banco de dados e seus objetos
- Otimizador de consulta utiliza essas estatísticas com objetivo de escolher melhor caminho para o plano de execução - É possível coletar as estatísticas manualmente através do package DBMS_STATS.
Marca D’água
- 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.
- Mesmo excluindo os registros a marca d’água continua indicando o tamanho máximo de onde um dia chegou a quantidade de registros.
Extensões
- Uma tabela com muitas extensões pode trazer problemas de performance
- Existe uma certa queda de desempenho quando um segmento precisa alocar uma nova extensão
- Podemos determinar quais são os segmentos prestes a efetuar uma alocação de extensão.
Migração e Encadeamento
- A migração de uma linha ocorre quando tentamos efetuar uma alteração nos dados dela e não existe espaço suficiente no bloco de dados Oracle para que a operação ocorra nesse bloco
- Nessa situação, a linha é migrada do bloco atual para outro bloco com mais espaço.
- Isso ocorre normalmente quando o parâmetro PCTFREE é definido com um valor muito baixo.

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 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 5a/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; *** CONTINUA NO PROXIMO SLIDE ***
Prática 5b/6
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