Dentre as atribuições de um DBA está monitorar o crescimento das TABLESPACES e o uso dos DATAFILES, planejando o crescimento do banco de dados e a necessidade de recursos de hardware para suportar esse crescimento.

Apesar disso parecer uma tarefa simples, muitos ainda fazem confusão na interpretação dos dados que o banco de dados nos disponibiliza para essa gestão e esse guia visa ajudar de forma sucinta nessa análise.

Antes de iniciarmos com as ações práticas é preciso entender como o Oracle trata esses conceitos dentro de sua arquitetura. Para isso existem dois objetos que precisam ser explicados em conjunto: o TABLESPACE e o DATAFILE.

O banco de dados Oracle trabalha com um conceito de “arquivo virtual” para armazenar os objetos (tabelas, índices, funções, procedures, etc.) chamado TABLESPACE, que não existe fisicamente no disco do servidor. Essa TABLESPACE é instanciada em memória quando o banco é iniciado e ela está sempre relacionada com um ou mais arquivos físicos, que inclusive podem estar ou não na mesma unidade lógica, chamados DATAFILES.

Quando criamos uma TABLESPACE e definimos seus DATAFILES, temos que definir o tamanho que esses arquivos terão e como eles irão crescer. Esse arquivo, apesar de ter o tamanho definido e existir em disco, não significa que ele está ocupado. A medida que os objetos são criados e os dados inseridos no banco de dados, eles vão sendo salvos na TABLESPACE e consumindo esse espaço nos DATAFILES.

Dependendo como foi criado o DATAFILE ele pode crescer de maneira automática quando atinge seu tamanho máximo ou requerer a intervenção do DBA para alocar mais espaço quando necessário. Particularmente, eu prefiro manter essa gestão nas mãos do DBA por alguns motivos:

Degradação de performance: O crescimento automático ocorre sempre a partir de um tamanho pré-definido de incremento que se for pequeno irá requerer crescimentos sucessivos e se for grande irá demandar um consumo de disco e processador para executar. Em ambos os casos isso pode ocorrer em um horário impróprio e degradar a performance do banco de dados.

Arquivos muito grandes: O crescimento automático irá aumentar o tamanho do TABLESPACE indiscriminadamente e, dependendo do sistema operacional, arquivos muito grandes podem ser um problema de gestão ou performance.

Planejamento: O crescimento automático dificulta um planejamento de multiplexação de arquivos para ter a informação mais distribuída em diversos arquivos físicos.

Espaço em disco: O crescimento automático pode fazer que o espaço em disco físico acabe ocasionando outros tipos de problemas.

Por conta disso, o DBA tem que se valer de informações gerenciais para antever a necessidade de crescimento da TABLESPACE e realizar essa tarefa de maneira programada em horário que não impacte a produção.

Para que esse gerenciamento aconteça, sugerimos o uso da query abaixo para monitorar o tamanho dos TABLESPACES e DATAFILES:

select   to_date(sysdate,'DD/MM/YYYY') "Data",
         Initcap(sys_context('USERENV', 'DB_NAME')) "Instância",
         ddf.tablespace_name "Tablespace",
         ddf.file_name "Datafile",
         round(ddf.bytes/(102410241024),2) "Total(GB)",
         round((ddf.bytes - sum(nvl(dfs.bytes,0)))/(102410241024),2) "Used(GB)",
         round(sum(nvl(dfs.bytes,0))/(102410241024),2) "Free(GB)"
from     sys.dba_free_space dfs left join sys.dba_data_files ddf
on       dfs.file_id = ddf.file_id
group by ddf.tablespace_name, 
         ddf.file_name, 
         ddf.bytes
order by ddf.tablespace_name, 
         ddf.file_name;

Essa query retorna as seguintes colunas:

Data: Data de execução da query. Útil caso queira armazenar os resultados e fazer um histórico de crescimento.

Instância: Nome da instância do banco de dados que foi analisada. Útil para quem administra mais de uma instância.

Tablespace: Nome da TABLESPACE. Esse nome se repete caso ela tenha mais de um DATAFILE.

Datafile: Nome do DATAFILE. Caso o banco esteja usando o ASM (Automatic Storage Management) o caminho físico do arquivo não será identificável por essa coluna.

Total (Gb): Tamanho total do DATAFILE em gigabytes, definido na criação dele.

Used (Gb): Tamanho ocupado do DATAFILE em gigabytes. Esse tamanho aumenta conforme o banco vai sendo usado.

Free (Gb): Espaço livre no DATAFILE em gigabytes. Esse tamanho diminui conforme o banco vai sendo usado.

Algumas dicas úteis no gerenciamento de TABLESPACES:

Conheça o perfil de cada TABLESPACE de seu banco de dados: Não há necessidade aumentar a capacidade de uma TABLESPACE que não tem mais crescimento de dados. Ela pode ficar com seu espaço livre próximo de zero sem problemas.

Planeje o crescimento: O tamanho do crescimento de uma TABLESPACE deve levar em conta a velocidade de crescimento dos dados. Se ela tiver dados mais estanque, que são populados esporadicamente, não há necessidade de ganhar um grande incremento, consumindo recursos desnecessariamente. Caso o crescimento dos dados seja exponencial, vale a pena alocar um espaço maior para ela.

Crie uma regularidade de verificação: Tenha o hábito de olhar para esses dados periodicamente, para não ser surpreendido com falta de espaço no meio do dia. Essa agenda irá depender do perfil de seu banco de dados e aplicações.

Monitore também o disco físico: Sempre que precisar crescer um DATAFILE existente ou anexar um novo lembre-se de olhar como está o espaço disponível em disco, seja pelo sistema operacional ou pelo ASM, se for o caso.

Com o ferramental aqui apresentado e seguindo as dicas sugeridas o DBA tende a não ter surpresas desagradáveis por conta de espaço em banco de dados.


Caio Almeida

Diretor Executivo da Cibernet Solutions, engenheiro eletrônico, gerente de projetos, DBA, corintiano e aficionado por cultura pop.

0 Comentários

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.