Pular para o conteúdo

Como encontrar os principais “Consistent Gets” no Oracle e reduzir o número de leituras consistentes.

Um pouco sobre Consistent Gets

Eu sei que esse assunto é bem amplo, e basicamente demanda bastante explicação. O Objetivo deste post foi ser bastante claro e direto sobre como encontrar os principais “Consistent Gets” no Oracle.

O que são consistent Gets/Reads?

São leituras consistentes. Uma vez que o Oracle garante a leitura dos dados íntegra, toda vez que um bloco é alterado por uma sessão, o Oracle Database necessita de leitura consistente desse bloco, reconstruindo o mesmo utilizando UNDO. Existem 2 situações em que um bloco pode se encontrar: CONSISTENT ou CURRENT

Este é o número de blocos lidos da buffer cache para instruções/queries sem a opção de SELECT FOR UPDATE.
O Valor desta estatistica mais o valor de “db block gets” (Leituras comuns) compoem o que é conhecido como “logical reads” (leituras em memória), estas são geralmente a versão atual do bloco (CURRENT) mas também pode ser uma versão de CR (Consistent Read)

Somando “consistent gets” e “db block gets,” chega-se ao número de logical reads (memory reads).
Usando a equação abaixo, você pode calcular o Data Cache Hit Ratio:

Hit Ratio = (Logical Reads – Physical Reads) / Logical Reads

Abaixo uma query para fazer este cálculo:

column phys format 999,999,999 heading 'Physical Reads'
column gets format 999,999,999 heading ' DB Block Gets'
column con_gets format 999,999,999 heading 'Consistent Gets'
column hitratio format 999.99 heading ' Hit Ratio '
select sum(decode(name,'physical reads',value,0)) phys,
sum(decode(name,'db block gets',value,0)) gets,
sum(decode(name,'consistent gets', value,0)) con_gets,
(1 - (sum(decode(name,'physical reads',value,0)) /
(sum(decode(name,'db block gets',value,0)) +
sum(decode(name,'consistent gets',value,0))))) * 100 hitratio
from v$sysstat;

Exemplo de output:

Physical Reads DB Block Gets Consistent Gets Hit Ratio
-------------- -------------- --------------- -----------
1,671 39,561 71,142 98.49

Quais operações podem gerar maior numero de leituras Consistentes? (CR)

  • Índices com cardinalidade incorreta
  • Grande número de Alteração de Dados (DML, DELETE, UPDATE, etc) com COMMITs separadas em intervalos muito grandes
  • FTS (Full Table SCAN) – Não utilização de índices

Algumas recomendações para diminuir grandes números de CR, estes pontos também ajudam a diminuir versionamento de blocs e enfileiramento CBC (cache buffer chains), mas esta é outra história:

  • Índices corretamete utilizados, com seletividade correta;
  • Utilização de cursors ou loops inadequados;
  • Pontos Flutuantes em Queries (Tabelas não utilizadas pela query);
  • Utilização de Hints;
  • Coleta de estatísticas;

Algumas operações que exigem leituras consistentes / “Consistent Gets”

transaction tables consistent read rollbacks

Número total de vezes que uma query copia o Header de um segment/bloco de

undo para iniciar uma operaçãod e Rollback

transaction tables consistent reads – undo records applied

Para executar um Rollback uma query lê o bloco de controle (dentro do Header do Bloco de Undo) que contém informações da query inclusive a verão mais recente da query. Dentro deste bloco de controle existe a informação do bloco anterior em relação a query executada, que precisa reconstruir a informação até chegar ao bloco antes do ínicio da execução a alteração daquele bloco. Estenúmero de registros/blocos lidos é contado nesta métrica.

no work – consistent read gets

Número de vezes que o Oracle executa um “consistent read” verificando se um bloco precisa ou não ser utilizado para rollback.

cleanouts only – consistent read gets

Número de blocos que o Oracle considera como “cleaned” e não utilizam rollback

rollbacks only – consistent read gets

Número de blocos que o Oracle precisa utilizar para rollback. Estes não estão- em estado “cleaned”

rollbacks only – consistent read gets

Número de blocos que o Oracle precisa utilizar para rollback. Estes não estão cleanouts and rollbacks – consistent read gets
Blocos que aguardam como “cleaned” ou “rollback”

data blocks consistent reads – undo records applied

Blocos clonados para gerar um novo CR (Consistent Read).

rollback changes – undo records applied

Blocos lidos de Rollback

Referência

  • Oracle Database 10g Performance & Tuning – Tips and Techniques (Oracle press – RICHARD NIEMEIC)

abs

Victor Armbrust

Victor Armbrust

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress