Espaço em disco. Algo que pode te dar uma boa dor-de-cabeça.

Muitos já se viram frente à necessidade de mais espaço em uma ou outra tablespace.

Algo natural no dia-a-dia conforme o crescimento natural do banco de dados.

Nem sempre isso é um problema caso seu espaço disponível em disco possa suprir sua necessidade de aumento de uma tablespace em particular.

Este cenário torna-se um problema; Um problemão na verdade; quando o espaço em disco disponível para o crescimento de suas tablespaces é próximo de Zero.

De onde tirar espaço? Se sua tablespace atingir 100% de espaço em uso, muito provavelmente sua aplicação parará de funcionar devidamente.

Bem, raramente todas suas tablespaces atingirão 100% de uso ao mesmo tempo, então, por que não liberar algum espaço dessas tablespaces que contém algum espaço livre e incluir este espaço em sua tablespace problemática? Fácil, não? A solução mais óbvia? Bom, nem sempre.

O problema dessa manobra está justamente no espaço não utilizado pelos datafiles daquela tablespace com espaço livre.

Todo datafile possui o que chamamos de “High Water Mark” (Ou Marca D’água do nível Máximo).

Isso é bem fácil de ilustrar. Imagine um copo com água até um determinado ponto. Então você coloca um canudo neste copo e bebe um pouco dessa água. Naturalmente, no ponto onde havia água antes de ser bebida ficará uma “Marca d´água” onde antes foi o nível máximo de água.

Transferindo este exemplo aos datafiles de sua tablespace, essa “Marca D’água” será o ponto máximo onde uma vez houveram dados neste datafile.

Os blocos necessários para gravação em disco neste datafile já foram utilizados e, embora os dados tenham sido apagados, seu espaço já foi requisitado no disco e não pode ser reclamado novamente pelo banco.

Portanto, apenas por verificar o espaço disponível nos datafiles não quer dizer que será possível reclama-lo por completo ao SO.

Abaixo explico uma técnica para identificar o espaço livre em suas tablespaces e o espaço livre em seus datafiles, bem como suas respectivas Hight Water Mark.

Primeiro identificamos o espaço disponível em banco.

Este script pode ser utilizado para isso:

O resultado é algo parecido com isso:

Notem que o que está na coluna Free MB trata-se do espaço disponível para a tablespace mas não reflete o que já foi escrito e gravado na Hight Water Mark.

O procedimento abaixo pose ser utilizado para identificar o tamanho utilizado e disponível de todos os datafiles presentes no banco, informando inclusive até onde podem ser redimensionados.

Tenham Paciência, o resultado pode demorar um pouco dependendo do tamanho de seus datafiles.

O resultado será algo parecido com isso:

A primeira coluna (FILE_NAME) exibe o Path completo do datafile.

A segunda coluna (Smallest Size Poss.) exibe o espaço já utilizado pelo datafile.

A terceira coluna (Current Size) exibe o tamanho atual do datafile.

E a terceira coluna (Poss. Savings) exibe o quanto pode ser devolvido ao disco e utilizado posteriormente em outro datafile.

Notem, por exemplo, o datafile sysaux.260.765636181. Este está indicando que está em uso 1450Mb pelo datafile.
No entanto, em nossa listagem anterior podemos notar que o espaço livre nessa tablespace é de 1379Mb, o que Ilustra a High Water Mark deste datafile. Portanto, nós conseguiremos reduzir este datafile até o tamanho de 1450Mb, recuperando 90Mb para o disco e, ainda assim, a listagem de tablespaces exibirá um espaço livre de 71Mb para a tablespace Sysaux, conforme ilustrado abaixo:

Primeiro a ilustração de não ser possível redimensionar a tablespace abaixo da high water mark:

Em seguida, quando utilizamos como novo tamanho a posição atual da high water mark, podemos reduzir ao máximo permitido este datafile, recuperando um bom espaço para o disco:

Espero que tenham gostado e que essa informação seja útil.

Forte abraço a todos.

Comentem a vontade.

 

Loading Facebook Comments ...

Deixe uma resposta

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