Arquitetura OpenEdge - parte VIII - Elemento areainfo no arquivo de estrutura

Escrito por Marcos Kirchner em 22 de fevereiro de 2011, 19:14h

Introdução e índice com os outros posts desta série.

 

No post anterior sobre o arquivo de estrutura vimos sua sintaxe básica e como criar os diferentes tipos de extensões. Ao informar no arquivo ST uma extensão de dados (extensão tipo d) é possível controlar algumas propriedades avançadas de armazenamento utilizando o elemento opcional areainfo, introduzido no post anterior da série. Estas propriedades avançadas aplicam-se à Storage Area como um todo. Todas as extensões de uma mesma área utilizarão as mesmas propriedades.

Se utilizado, este elemento deve ser especificado logo após o tipo da extensão (d, para extensões de dados) e antes do caminho da extensão. Se não for utilizado o elemento areainfo, a extensão de dados será adicionada automaticamente à Schema Area, que é uma das Storage Areas pré-definidas em um banco de dados OpenEdge.

O elemento areainfo é composto de 4 partes, das quais apenas a primeira é obrigatória:

"areaname"[:areanum][,recsPerBlock][;blksPerCluster]

Segue a descrição de cada uma das partes:

  • areaname indica o nome da Storage Area a qual esta extensão faz parte. Deve ser um nome com até 32 caracteres, entre aspas. Este nome não é relevante para o banco de dados, mas será utilizado pelo DBA e/ou desenvolvedor para atribuir as tabelas e índices às diferentes áreas criadas no banco;
  • areanum indica o número da Storage Area. A área de número 6 é reservada para a Schema Area. As áreas de número 7 a 32000 podem ser definidas pelo DBA, conforme necessidade. Este número serve apenas para diferenciar uma área de outra e não tem nenhum significado especial;
  • recsPerBlock indica a quantidade máxima de registros por bloco que o OpenEdge tentará armazenar em um bloco de dados desta área. Os valores válidos são 1, 2, 4, 8, 16, 32, 64, 128 ou 256. Ele valor é ignorado para a Schema Area, que possui um valor padrão e não pode ser alterado. Esta configuração também não afeta os blocos de índices, entretando o tamanho máximo de uma Storage Area é afetado por esta configuração;
  • blksPerCluster indica quantos blocos serão utilizados em cada cluster de armazenamento de dados. Os valores possíveis são 1, 8, 64 e 512. O valor 1 indica que não será utilizado o conceito de cluster e a área é considerada uma Storage Area tipo 1. Para os demais valores será utilizada uma Storage Area do tipo 2. A Schema Area sempre será do tipo 1.

Como todas as extensões de uma mesma área utilizam as mesmas propriedades de armazenamento, só é necessário especificar os valores areanum, recsPerBlock e blksPerCluster para a primeira extensão. Se estes valores não forem informados, areanum será atribuído automaticamente com um número sequencial de área, recsPerBlock assumirá o mesmo valor da Schema Area e blksPerCluster assumirá o valor 1. O valor de recsPerBlock para a Schema Area varia de acordo com o tamanho de bloco do banco. Para bancos com bloco de 1, 2 ou 4KB, o valor é 32. Para bancos com bloco de 8KB, o valor é 64.

As duas principais propriedades de armazenamento, recsPerBlock e blksPerCluster, são ignoradas no caso da Schema Area. Como as configurações de armazenamento desta área não podem ser ajustadas recomendamos que sejam criadas novas áreas para os objetos, de acordo com as necessidades de armazenamento. O objetivo deste post é esclarecer o funcionamento e sintaxe do arquivo de estrutura. Voltaremos a tratar das questões de quantidade de registros por bloco e diferenças entre Storage Areas tipo 1 e 2 nos posts futuros desta série.

Para finalizar, segue um exemplo de um arquivo de estrutura com 1 extensão de before-image e 9 áreas de dados, algumas com várias extensões.

# arquivo de estrutura
b h:\blog.b1

d "Schema Area":6,32;1 d:\blog.d1

# abaixo estão definidas várias áreas (áreas 7 a 14)
# cada uma
com diferentes configurações de armazenamento
d "Dados Area":7,64;8 d:\blog_7.d1

d "Index Area":8,1;8 d:\blog_8.d1

d "Big Index Area":9,1;64 d:\blog_9.d1

d "Dados Area 8":10,8;64 d:\blog_10.d1

d "Dados Area 16":11,16;512 e:\blog_11.d1 f 2000000
d "Dados Area 16":11,16;512 e:\blog_11.d2

d "Dados Area 32":12,32;512 f:\blog_12.d1 f 2000000
d "Dados Area 32":12,32;512 f:\blog_12.d2 f 2000000
d "Dados Area 32":12,32;512 f:\blog_12.d3

d "Dados Area 64":13,64;512 g:\blog_13.d1 f 2000000
d "Dados Area 64":13,64;512 g:\blog_13.d2

d "Dados Area 128":14,128;64 d:\blog_14.d1

Categorias: Banco de dados | Progress

Tags:

Comentários (2) -

em 27 de março de 2011, 19:23h

Tenho um ambiente relativamente grande 700GB (ems2 e ems5) e avaliar os beneficios de uma modificacao de estrutura nem sempre é trivial. Além de analisar as tabelas temos que encontrar a melhor definicao para recsPerBlock e blksPerCluster. Alias, tem alguma "boa pratica" ?
Hoje, utilizo "schema area":6 (padrao TOTVS) e sempre pensei em separar "dados" e "indices" para as tabelas mais acessadas, utilizando storage area tipo 2 (o que por si só, já exigiria atenção/admninistração dos deltas recebidos do produto).
Esta separacao traria benefícios de performance, considerando que os dados estão em SUN storage (RAID 1), sendo um volume para (bis + dbs), e outro para (ais)?
Existe ou existirá algum utilitario que permita fazer esta modificacao de estrutura sem dump-load ?

Abrs. Floriano Santoro

Floriano Santoro

em 28 de março de 2011, 09:22h

Floriano,

Quando o banco de dados é grande o tempo necessário para um dump/load completo torna o processo inviável, mas você não precisa disso para criar novas áreas/extensões. O prostrct permite modificar a estrutura física do banco, conforme necessidade.

Depois que novas áreas forem criadas você pode mover os dados utilizando o PROUTIL TABLEMOVE e/ou PROUTIL INDEXMOVE. Estes utilitários são lentos e geram muito log (BI/AI), mas você pode fazer com o banco de dados ativo. Apenas os objetos referenciados ficam bloqueados.

Não é requisito que todas as áreas do banco sejam do tipo 2. Isso na verdade é impossível, pois a área 1 e 6 sempre são do tipo 1. E elas convivem bem juntas. Você pode obter os benefícios das áreas tipo 2 gradualmente, conforme consegue tempo para mover os objetos.

kirchner

Comentar

biuquote
  • Comentário
  • Pré-visualização
Loading

Acesso LogMeIn

Informe o código PIN: