Pular para o conteúdo

Como estão as tablespaces ?

Como estão as tablespaces ?

Uma consulta muito importante e que deve ser utilizada pelo menos duas vezes ao dia, de manhã quando chegamos e antes de sair.

Muitas vezes nos deparamos com chamados informando que o “banco parou”, quando vamos ver, foi alguma tablespace que “estourou”.

Dentre as verificações diárias, esta é uma das mais importantes, é algo que realmente não olhamos no dia a dia e que, normalmente, estoura num sábado à noite, quando estamos indo jantar ou fazer algo realmente importante.

SQL
Select tablespace_name,
TO_CHAR ((SUM (espacos) + (SUM (maximo) - SUM (alocado)) ) / 1048576, '999,999,999.9999') Espaco,
TO_CHAR  (SUM (tamanho) / 1048576, '9999,999,999,999.9999') Tamanho,
TO_CHAR  (SUM (alocado) / 1048576, '9999,999,999,999.9999') Alocado,
TO_CHAR ((SUM (tamanho) / SUM (alocado) * 100), '999.9999') Utilizacao,
TO_CHAR  (SUM (maximo) / 1048576, '9999,999,999,999.9999') Maximo,
TO_CHAR ((SUM (tamanho) / SUM (maximo) * 100), '999.9999') "Percentual Máximo",
TO_CHAR  (SUM (maior) / 1048576, '9999,999,999,999.9999') "Maior Extent",
TO_CHAR  (SUM (next) / 1048576, '9999,999,999,999.9999') "Next Extent"
From (
Select s.tablespace_name, SUM (s.bytes) tamanho, 0 Alocado, 0 Maximo, 0 maior, MAX (next_extent) next, 0 espacos
From dba_segments   s
Group by s.tablespace_name
Union
Select df.tablespace_name, 0 tamanho, SUM (df.bytes) Alocado, SUM (df.maxbytes) Maximo, 0 maior, 0 next, 0 espacos
From dba_data_files df
Group by df.tablespace_name
Union
Select tablespace_name, 0 tamanho, 0 alocado, 0 maximo, MAX (bytes) maior, 0 next, sum (bytes) espacos
From dba_free_space
Group by tablespace_name
)
Group by tablespace_name
--Order by espaco desc
Order by "Percentual Máximo" desc, tablespace_name<code>
</code>

Acompanha esta consulta, uma outra que mostra a desorganização ao criar objetos. Imagina-se que os índices e dados devem estar em tablespaces distintas.

SQL
Select tablespace_name, sum (indices) indices, sum (dados) dados
From (
Select tablespace_name, 0 indices, count(*) dados
From dba_tables
Group by tablespace_name
Union
Select tablespace_name, count(*) indices, 0 dados
From dba_indexes
Group by tablespace_name
)
Where tablespace_name not like '%SYS%'
Group by tablespace_name
Having SUM (indices) > 0
And  SUM (dados)   > 0<code>
</code>

Uma outra coisa que é BASTANTE interessante é não criar tablespaces muito grandes, sendo impossível, criar diversos datafiles, pois na hora de movimentar os dados ou os arquivos é muito mais simples, também na hora de organizar nossas “bagunças”…

Para quem usa ASM, este último comentário pode não ser muito pertinente, principalmente quanto ao fato de criar diversos datafiles, criar tablespaces menosres é sempre uma boa opção.

Para quem usar storage, às vezes é mais complicado criar diversas tablespaces e diversos datafiles, o melhor a fazer é usar o ASM.

Marcio68Almeida

Marcio68Almeida

Comentário(s) da Comunidade

  1. Bom dia Marcio, td bem?!

    Parabéns pelo post, é um boa fonte de pesquisa 😉
    Tenho uma dúvida:
    Quando comecei a ter contato com Oracle (versão 9i), sempre lia a orientação para criar TBS de Index e Dados, assim o gerenciamento dos objetos seria separados. Dependendo do ambiente, esta informação procede também para a versão 11g?

    Forte abraço

  2. Não conheço muita coisa do 11g, mas posso te dizer que a administração e manutenção do banco de dados ficará muito mais simples separando objetos por familiaridade, isto é, índices junto com índices, dados com dados, objetos com maior fragmentação separados dos com baixa fragmentação, e assim por diante…

Deixe um comentário

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

plugins premium WordPress