quarta-feira, 26 de maio de 2010

Analisando o Buffer Cache do Informix

Olá,

Hoje vou postar um recurso que hoje em dia é pouco utilizado, como o preço de memória caiu não é mais usual a análise da ocupação do buffer cache no dia a dia do DBA, é feita apenas a valição do PCT de Read/Write, está formula funciona mas não em todos os casos.

Vamos lá, o primeiro passo é executar o onstat -P que irá exibir um output conforme abaixo:

partnum total btree data other resident dirty
0 215 8 158 49 0 58
1048578 2 1 1 0 0 0
1048579 9 5 4 0 0 0
1048584 4 2 2 0 0 0
1048585 2 1 1 0 0 0
1048747 1 1 0 0 0 0
3145776 60 8 52 0 0 0
9437190 177 177 0 0 0 0
10485762 26826 0 26826 0 0 0
.......
Totals: 300000 53097 246852 51 60 3444

Vejam a ultima coluna nomeada como DIRTY, calcule quanto esse coluna representa do total de paginas do buffer cache, se este valor for muito alto para uma tabela isto indica uma aplicação não performatica e deve ser revista.

Outro ponto é a coluna DATA, esta indica a quantidade de paginas de dados alocadas para a tabela , se este valor for igual ao total de paginas alocadas isto indica que ou a tabela sofre sequential scan ou tem alguma aplicação não performática acessando a mesma, causando a HIGH_Priority na LRU mantendo a mesma residente em memória.

A coluna RESIDENT indica que foi executado um comando para forçar a residência da tabela em memória, a sintaxe do comando é:

set table your_table memory_resident/set index your_index memory_resident

Lembre-se que este comando deve ser usado em casos extremos, se você usou se resolveu seu problema já é indicio de que há algo errado, não devemos fazer o uso sem controle deste recurso.

A coluna BTREE indica a quantidade de paginas de indices, para identificarmos o objeto que está alocado no buffer cache devemos pegar a coluna PARTNUM e pesquisar na sysmaster:systabnames conforme abaixo:

select tabname, ti_nrows, ti_nptotal
from sysmaster:systabnames, sysmaster:systabinfo
where partnum=1048585

Lembre-se , indices detachados ou particionados também possuem partnum portanto no onstat -P temos o resumo de utilização de partitions, sendo tabelas e indices.

Há alguns anos desenvolvi um script e postei no Repositório do IIUG, o mesmo está no link:

http://www.iiug.org/software/archive/mon_buffer

By the way, dentro do repositorio do IIUG podemos encontramos muito scripts interessantes, este foram desenvolvidos por DBAS em situações reais do dia-a-dia de um DBA.

Segue abaixo o link:
http://www.iiug.org/software/index_DBA.html

A partir do Informix 11 temos é possivel configurar multiplos buffers, um para cada tamanho de pagina (4K, 8K ,16K), para ambientes OLTP é recomendado o uso de paginas de 8K e para DSS/DW é recomendado o uso de páginas de 16K.

O importante para o DBA é ter o conceito do funcionamento da buffer cache, seguindo este artigo teriamos outras coisas para estudar (LRU, LIGHT SCAN, LIGHT APPEND) mas isto ficará para outro post.

Vagner