Você já parou para pensar como o banco de dados Oracle consiste as informações que estão sendo modificadas pelas transanções? Pois bem isso é feito através da tablespace de UNDO. As informações da tablespace de Undo são utilizadas pelo banco para:
A tablespace de UNDO, assim como outras possui um limite de tamanho, e é preciso estar atento a erros como por exemplo: ORA-01555 Snapshot Too Old
Daí a necessidade de monitorar a área utilizada, e principalmente, o crescimento súbito dessa utilização.
A consulta abaixo utiliza a visão DBA_UNDO_EXTENTS para obter informações a respeito dos extents de undo, e dessa forma calcular a área utilizada. SELECT size_allocated.tablespace_name, Como resultado você terá os valores percentuais de ocupação nessas tablespaces. TABLESPACE_NAME SIZE_ALLOCATED_MB SIZE_USED_MB PCT_SIZE_USED_MB No exemplo acima, são exibidas duas tablespaces de undo por se tratar de um ambiente com Oracle RAC com dois nós, o que exige que, cada instância possua sua própria UNDO. Agora que sabemos o percentual utilizado, devemos descobrir quais sessões estão gerando essa ocupação, pode ser que um usuário esteja executando um procedimento que venha a ocupar desnecessariamente essa área e erros ORA-01555 venham a ocorrer. Existem duas formas de encontrar as sessões que estão gerando a ocupação, e são feitas através de consultas nas visões gv$session, gv$sess_io e gv$transaction. Em ambas as formas, é preciso utilizar o que conhecemos por delta, que em resumo, por se tratar de visões dinâmicas. Para o primeiro exemplo precisamos fazer uma coleta das informações, e realizarmos comparações entre os valores atuais e o realizado na primeira coleta. Faremos a primeira coleta, utilizando um CTAS conforme abaixo: DROP TABLE begin_set_undo; CREATE TABLE begin_set_undo Vamos aguardar alguns minutos, e executar a consulta abaixo, fazendo uma relação entre o snapshot que realizamos com o CTAS e o status atual: SELECT bsu.inst_id, Como resultado, teremos as sessões que estão transacionando mais no ambiente. Grandes diferenças na coluna block_changes, denotam a geração de redo por parte da sessão. A outra forma de encontrar essa informação é através de consulta na gv$transaction. De forma semelhante a anterior, é preciso realizar o “delta” entre as consultas, por isso, mais uma vez utilizaremos um CTAS: DROP TABLE begin_transaction_undo; CREATE TABLE begin_transaction_undo Após tirarmos um snapshot, utilizando novamente a view, vamos fazer a comparação. SELECT btu.inst_id, Após tirarmos um snapshot, utilizando novamente a view, vamos fazer a comparação. INST_ID SID SERIAL# PROGRAM USED_UBLK Com essas informações, será possível a você identificar as sessões que estão levando a ocupação das suas tablespaces de UNDO ao limite. Esperamos ter ajudado e até o próximo artigo.
|
Últimos Artigos
- Serviços de Upgrade e Migração
- Recuperação de datafiles e tablespaces
- Oracle Real Application Cluster(RAC)
- Oracle Data Guard
- Monitorando Tablespace Temporária
- Monitorando o progresso do RMAN
- Monitorando a utilização da tablespace de UNDO
- Linux
- Habilitando Archived Logs
- Cursores abertos por uma determinada sessão
Monitorando a utilização da tablespace de UNDO
|