sábado, 23 de novembro de 2013

ORACLE DB PERFORMANCE TUNING MIGRAÇÃO E ENCADEAMENTO

PCTFREE RECOMENDADO DE 20% EVITA MIGRAÇÃO E ENCADEAMENTO.

                                 

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ática 1/6


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. Para testar essa situação vamos criar uma tabela com o valor do PCTFREE igual a zero. 

----------PCTFREE É SETADO COM 0 (ZERO), OU SEJA, NÃO DEIXAMOS OS 20% EXTRAS PARA POSSÍVEIS ALTERAÇÕES -----
CREATE TABLE migracao1 (ID NUMBER,NOME varCHAR2(50)) PCTFREE 0 tablespace users;


Prática 2/6


Ao inserirmos os dados na tabela não ocorrerá a migração. A migração só ocorre quando executamos um comando de atualização.

INSERT INTO migracao1 VALUES (1,'TESTE');
INSERT INTO migracao1 VALUES (2,'TESTE');
INSERT INTO migracao1 VALUES (3,'TESTE');
INSERT INTO migracao1 VALUES (4,'TESTE');
INSERT INTO migracao1 VALUES (5,'TESET');
INSERT INTO migracao1 VALUES (6,'TESTE');
INSERT INTO migracao1 VALUES (7,'TESTE');
INSERT INTO migracao1 VALUES (8,'TESTE');
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1);
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1); 
INSERT INTO migracao1 (SELECT * FROM migracao1); 
COMMIT;

Prática 3/6

Iremos alterar o texto “TESTE” para “MARTE E JUPITER ”. Como o PCTFREE é 0 não há espaço livre no bloco para essa operação. Neste momento ocorrerá a migração.

UPDATE migracao1
SET NOME='MARTE E JUPITER'
WHERE ID=1 or ID=3 or ID=5 or ID=7;

COMMIT;

Prática 4/6


Vamos detectar as linhas migradas usando o comando ANALYZE, no entanto, poderíamos obter essa informação através do SEGMENT ADVISOR. 

Nota: ANALYZE TABLE 



ANALYZE TABLE migracao1 COMPUTE STATISTICS; 

SELECT num_rows "Numero de Linhas", chain_cnt "Numero de Linhas Migradas" 
FROM dba_tables WHERE table_name='MIGRACAO1';


Prática 5/6 CHAINED_ROWS


Também podemos detectar as linhas encadeadas. Para isso usamos a tabela CHAINED_ROWS, que é criada pelo script abaixo. 

-----utlchain.sql é um script residente no ORACLE, assim como outros utilitários.-------
@%ORACLE_HOME%\rdbms\admin\utlchain.sql ANALYZE TABLE migracao1 LIST CHAINED ROWS; 

SELECT owner_name "Dono da Tabela", 
table_name "Nome da Tabela",
head_rowid "Rowid" 
FROM chained_rows 
WHERE table_name = 'MIGRACAO1';

Vemos Quantidade de Seccionamento que Ocorreram nas Linhas


Prática 6/6



Para eliminar as linhas migradas e/ou encadeadas basta movê-las. 

 ----tabela migracao1 é locada para outra local na memória--------
alter table migracao1 move tablespace sysaux; 

----tabela migracao1 é relocada para seu local de origem--------
alter table migracao1 move tablespace users; 

ANALYZE TABLE migracao1 COMPUTE STATISTICS; 

SELECT num_rows "Numero de Linhas",
chain_cnt "Numero de Linhas Migradas"
FROM dba_tables 
WHERE table_name='MIGRACAO1';


Vemos acima que antes de movermos a table, havia muitas linhas encadeadas, 666 no exemplo. Após locar e relocar a table, refizemos um ANALYSE TABLE e exibimos o resultado.


Nenhum comentário:

Postar um comentário