quarta-feira, agosto 27, 2014

Dimensionamento, desempenho e problemas do Dataset Work

O texto abaixo não é de minha autoria. É um texto que li e achei muito interessante - Clique Aqui - Last updated: 2011/01/06 Adabas Version 8.2.2 Mainframe James Poole

O correto dimensionamento do dataset de Work é simples, mas pode ter um impacto significativo no desempenho do banco de dados, bem como evitar problemas.
No geral, os tempos ideais de I/O devem sempre ser considerado para do dataset de Work como Work Part 1 pode ser um grande gargalo em potencial.

O que não é coberto neste artigo:

Parte 4 Work (área de processamento de transações distribuídas; ADARUN LDTP; Adabas Manager)
ADARUN NWORK1 BUFFERS melhorar a Work Parte desempenho um write (altamente recomendado)
Questões não de mainframe

Geral

O dataset de Work basicamente é dividido em três áreas, cada uma com uma função bem diferente, cada uma deve ser feito sob medida separadamente. Os básicos três áreas:
+---+-------------------+----------------------------+
| 1 | ADARUN LP         | Data Protection Area       |
| 2 | ADARUN LWKP2      | ISN List Processing Area   |
| 3 | remaining WORK    | Resultant ISN Lists        |
+---+-------------------+----------------------------+
Tamanhos atuais das áreas de Work Via AOS

Enter SYSAOS
    A Session monitoring
    U Display resource utilization
    W WORK status
Amostra
        W O R K  Dataset
+--------------------------------------------------------+
I  Protection Area                            83700 Blks I
I--------------------------------------------------------I
I  Intermediate ISN Area                       6000 Blks I
I--------------------------------------------------------I
I  Resulting ISN Area                           297 Blks I
I--------------------------------------------------------I
I  Distributed Transaction Processing Area        0 Blks I
+--------------------------------------------------------+
Tamanhos atuais das áreas de Work Via comando de Operador DRES

(Nota isso também pode ser realizado através de lote ADADBS OPERCOM DRES)
ADAN28 00044 2011-01-05 12:09:02 RESOURCE       SIZE       CURRENT    HIGHWATER
ADAN28 00044 2011-01-05 12:09:02 WORK PART1     83700            0          49
ADAN28 00044 2011-01-05 12:09:02 WORK PART2      6000            0           7
ADAN28 00044 2011-01-05 12:09:02 WORK PART3       297            0           4
Tamanhos de Work através da output DDPRINT no Shutdown Banco de Dados
AREA          ADARUN PARM      HIGH-WATER-MARK
-----------------------------------------------
Work Part1   LP =     83700      16398 ( 19 %)
Work Part2 LWKP2=      6000          0 (  0 %)
Work Part3  --  =       297          3 (  1 %)
Tamanho total do dataset de work

O tamanho total do dataset de Work em cilindros é a soma de blocos para cada um dos três domínios mais o número de blocos por uma faixa mais, tudo dividido pelo número de blocos por cilindro.
Por exemplo nos exemplos e números (8393 blockSize, 2 blocos por trilha, 30 blocos por cilindro) acima:
(83700 + 6000 + 297 + 2 + 1) / 30 = 3000 cylinders
Como redimensionar o dataset Work

A partir dos manuais.

1 - Crie o novo dataset Work com o número correto de cilindros.
2 - ADAFRM é o utilitário que formata uma nova Work. Por exemplo: ADAFRM WORKFRM SIZE=3000,DEVICE=8393
3 - Shutdown o banco de dados (Nota a função ADADEF NEWWORK não pode ser executada se um autorestart exite pendente)
4 - Execute ADADEF NEWWORK. NOTA: A antiga Work deve ser especificada neste no JCL (ou alocar uma obra fictícia do mesmo tamanho e tipo de dispositivo, formatado). ADADEF atualiza GCB do Associator com o novo tamanho e tipo de dispositivo. Por exemplo: ADADEF Newwork WORKSIZE = 3000, WORKDEV = 8393
5 - Atualize na proc do banco o novo dataset de Work;
6 - Coloque no ar o banco de dados;

Dimensionamento a Work - Parte 1 (Adarun LP =)

A Work parte 1 é usado para registrar todas as atualizações do banco de dados para fins de recuperação e backouts.

- Tamanho mínimo: 200 blocos
- Tamanho máximo: Blocos de 2G blocos

Não há problemas da Work Parte 1 ser muito grande. Mesmo com rearranque automático, um método de busca binária é usado para encontrar o bloco mais antigo para fins de reinício.

Se o Work da Parte 1 é muito pequeno.

- Increased Buffer Flushes (desempenho)
- Risco de síncronas buffer Libera (Performance)
- Os usuários que receberem o Response Code 9 sub código 15 ou Código de Resposta 8 (Work Wraparound, veja abaixo)

Bottom Line: Dataset Work maior proporcionar um melhor desempenho, bem como diminuir o risco de problemas relacionadas com a Work (veja abaixo).

O que está contido na Work Parte 1 (Não é uma lista completa)

Before Images (registro comprimido dos dados antes da mudança), After Images (registro dos dados comprimido após a mudança), (Descriptor Valor Tabela de imagem antes e depois de descritores alterado), ET records (Transação End), Checkpoint records, Before Image of Associator Index blocks, Registros Especiais (início/fim de descargas do buffer, comando, etc). Produtos adicionais também podem utilizar a Work Parte 1 como Event Replicator.

Trabalho envolventes e Código de Resposta 9 sub código 15

A partir do Adabas Versão 8.2, cerca de 25% da Work Parte 1 está reservada para os conteúdos descritos acima. A área restante é utilizado no caso de autorestart (user backout, Adabas backout, ou para start/autorestart do banco). Esse percentual pode mudar com as novas versões do Adabas. Consulte a seção neste artigo sobre como determinar a porcentagem para novos lançamentos.

Como ocorrem nos updates do usuário e do ET dos usuários, os dados são gravados na Work Parte 1 de uma forma envolvente. Uma vez que as atualizações envolventes, é feita uma verificação para ver se os dados a serem substituídos foi ET'd e se ele foi liberado para Associator e Data Storage (ou seja, o buffer liberado). Se não foi Buffer Flushed, então um Buffer Flushed é emitido. Se o usuário a ser substituído não foi ET'd, esse usuário recebe um response code 9 subcode 15 é lançada para seu elemento fila do usuário para a sua próxima chamada Adabas. O utilizador recebe o código de resposta 9-15 não é necessariamente a causa mas a vítima. Se um usuário executa atualizações suficientes sem ET (e não excede um outro recurso, como a fila de Espera ou limite de tempo), então eles se pode receber um código de resposta 9-15. Veja mais Clique Aqui

Embora muitos fatores possam resultar no código de resposta 9-15, se o código de resposta 9-15 está ocorrendo e não é devido à extrema ou má codificação de aplicações, é um indicador de que Work Part 1 deve ser aumentada.

Uma escola de pensamento sobre o dimensionamento da Work Part 1 diz que o Work Part 1 deve ser quatro vezes (em volta de 25%) do montante máximo de transações correntes vezes os updates média por tempo de transação dos bloco da Work medio por atualização. Este seria um dimensionamento mínimo. Note-se que o dimensionamento de ADARUN NISNHQ afeta essa fórmula.

Outra escola de pensamento sobre o dimensionamento da Work Part 1 diz que, em um cenário de pior caso, a área pode ser dimensionada como o número máximo de transações simultâneas vezes o ADARUN TT= dividido pelo tempo médio de uma I/O da Work (ver estatísticas de cache abaixo como obter o tempo médio de trabalho I/O). Note-se que o dimensionamento de ADARUN TT afeta essa fórmula.

Fatores (alterações no ambiente das aplicações) podem aumentar cenários de Response Code 9-15 9-15 (ou aumentam a necessidade de aumentar Work Part 1) podem incluir, mas não se limitando ao seguinte:

- Aumente o Limite de Tempo Maior transação (ADARUN TT=)
- Aumento atualizações por transação (ADARUN NISNHQ =)
- Aumento comprimido tamanhos de registro, o aumento descritores e atualizações de descritores
- Aplicações batch que atualizam sucessivamente menores valores de descritores (aumenta blocos splits)

Uma Work Part 1 pequeno Aumenta Buffer Flushes #

Veja a explicação acima sobre o que acontece no local de Work Wraparound. Há gráficos que mostram como o aumento Work Parte1 diminui descargas do buffer (e melhora o desempenho do banco de dados), mas eu não poderia facilmente copiar gráficos Xcel neste meio.

Aumentando a Work Part 2 (Adarun LWKP2=)

A Work Part 2 é usado como uma área de rascunho baseado em disco para processar o comando Sx (FIND). A quantidade de Work Part 2 usada por qualquer comando único é apenas para a duração desse comando no segmento Adabas. Vários comandos Sx em vários segmentos usará simultaneamente a Work Part 2. O dimensionamento de ADARUN LWP e ADARUN LS afeta diretamente o quanto esta área é usada (como esses parâmetros aumentado, o uso da Work Part 2 pode diminuir).

- Tamanho mínimo: 0 blocos
- Tamanho máximo: 16,7 milhões de blocos
- Tamanho padrão: (veja abaixo) NÃO USE default

Uma tabela interna Adabas requer um byte de armazenamento para cada Work part 2 bloco.

Se a Work Part 2 é muito grande pode afetar os requisitos de memória (1 byte por Work Part 2). Se o trabalho da Parte 2 é armazenado em cache (ADARUN CWORK2FAC=), então um grande Work Part 2, com uma grande CWORK2FAC correspondente = pode voltar a afetar os requisitos de memória.

Note-se que até mesmo a utilização de uma pequena CWORK2FAC (1%) pode indicar uso da Work Part 2.

Se a Work Part 2 é muito pequena.

Ocorre atraso do comando Sx (FIND)
Response Code 74 (Work Part 2 está cheia)

O código da aplicação deficiente pode afetar o tamanho da área. Por exemplo, os programas podem estar fazendo desnecessariamente grandes pesquisas complexas (o que inclui pesquisas em não descritores).

Padrão Dimensionamento de Work Part 2
WORK2 = 22 + 2 * (4 * RECORDS / (BLKSIZE - 16))
onde:

- Work2 é work part 2 que necessita de espaço em blocos.
- BLKSIZE é o tamanho do bloco do dispositivo dataset da Work
- RECORDS é o número de registros no arquivo com a maioria dos registros. Este número é igual TOPISN - MINISN + 1, em que é o mais alto TOPISN ISN atualmente utilizado no arquivo. MINISN é o menor ISN usado no arquivo. Note-se que TOPISN é avaliada na inicialização do banco de dados.

Parm Error 18 na Inicialização do banco Adabas

Isso ocorre principalmente quando o tamanho padrão da Work part 2 é usado. O cenário é o banco de dados entra no ar e a Work Part 2 foi dimensionada pela maior TOPISN existente. Em algum momento durante a sessão Adabas, um arquivo no banco de dados aumenta significativamente o TOPISN (via inserções de registro ou carregando um arquivo muito maior para o banco de dados). A próxima vez que o banco de dados for iniciado, uma tentativa é redimensionar Work part 2 pelo TOPISN maior e não há espaço no conjunto de dados Work para qualquer parte Work Work 2 ou a Work part 3 ficaram com menos de 50 blocos. Portanto, é importante que a Work part 2, LWKP2 =, é sempre usado.

Comando Sx (Find)

Nota: Os comandos complexos não são selecionados a partir da Command Queue (CQ) para o segmento Thread do Adabas a menos que 50% da Work part 2 esteja disponível. Portanto, o tamanho da Work part 2 em duas vezes é necessário para otimizar o processamento de comando de transferência. Esta é uma simples filosofia de negociação uma pequena quantidade de espaço em disco para o desempenho. Tipo de comando (complexo, atualização, simples) é determinada na rotina para ligação antes do comando é passado para Adabas. A decisão para comandos complexos é baseada nos comandos Sx cuja o comprimento Search Buffer excede um determinado constante. Devido à construção do comando Sx pelo Natural, todos comandos Sx/FIND no Natural são tratados como complexo (para fins de seleção de comando).

Fórmula para Tamanho do Work Part 2
WORK2 = S * 2 * ( 4*RECORDS / (BLKSIZE – 16)
Essencialmente, a fórmula é a determinação do número de Work part 2 para descobrir a quantidade de blocos necessários para os maiores arquivos, as vezes o número de concorrentes comandos Sx (concorrência em das Threads no Adabas) time 2 (duplo para permitir sempre 50% livre). Este tamanho pode ser ajustado, observando as marcas Highwater ou estatísticas de cache reais (veja acima). Mais uma vez:

- Work2 é a Work part 2 é o espaço requerido em blocos;
- BLKSIZE é o tamanho do bloco do dispositivo do dataset de Work
- RECORDS é o número de registros no arquivo com a maioria dos registros. Este número é igual TOPISN - MINISN + 1, em que é o mais alto TOPISN ISN atualmente utilizado no arquivo. MINISN é o menor ISN usado no arquivo. * S é o número de comandos complexos simultâneas

S pode ser determinado através de estatísticas de encerramento do Adabas como o percentual de Sx comandos vezes o número de threads ativas (por exemplo. Se 10% dos comandos são Sx e há 10 threads ativas, então S seria de aproximadamente um valor de 1).

Aumentando a Work Part 3

A Work Part 3 é usado para listas de ISN resultantes do comando Sx/Find. Listas permanecem em Work Part 3 até que o último ISN é processado ou até que seja liberado pelo usuário (por exemplo,. comandos Via RC ou CL). Neste último caso, a lista ISN foi marcado (por exemplo, Opção. Comando 1 = H, ou o Natural "Reter o").

- Tamanho mínimo: 50 blocos (mais PARM-ERROR 18 no start do banco de dados)
- Tamanho máximo: desconhecido

O tamanho do Work Part 3 é o que resta em WORKSIZE depois da Work Part 1 e Work Part 2 foi feita sob medida. É fundamental que o dimensionamento do Work Part 1 e 2 não interferem com esta área.

Uma tabela interna do Adabas requer quatro bytes de armazenamento para cada block na Work part 3.

Se a Work Part 3 é muito grande pode afetar os requisitos de memória (4 bytes por Work Part 3). Se a Work Part 3 está em cache (ADARUN CWORK3FAC=), então um grande Work Part 3 com uma grande CWORK3FAC correspondente = pode voltar a afetar os requisitos de memória.

Note-se que até mesmo a utilização de uma pequena CWORK3FAC (1%) pode indicar uso da Work Part 3.

Se a Work Part 3 é muito pequeno um usuário receberá Response Code 73. O código da aplicação deficiente pode afetar o tamanho da área. Por exemplo os programas podem manter listas de ISN e não liberá-los. Consultas do tipo SQL pode criar extremamente grandes listas de ISN. Uso de grande algoritmo Sx/FIND pode esgotar nesta área (2 ou mais descritores, um valor cada).

Fórmula para Tamanho do Work Part 3

Existem várias fórmulas possíveis para usar em dimensionar esta área.
WORK3 =   NU 
WORK3 =   NU * IU
WORK3 =   NU * IU * AWBU
WORK3 =   HIWATER.LI / ( 52 + 4 * NSISN)
WORK3 = ( HIWATER.LI / ( 52 + 4 * NSISN) ) * AWBU

AWBU  =  ISN.LIST.SIZE / BLKSIZE / 4
Este tamanho pode ser ajustado, observando as marcas Highwater ou estatísticas de cache real (veja acima).

- WORK3 é a Work part 3 requerida de espaço em blocos
- ISN.LIST.SIZE é o número médio de ISNS por lista
- AWBU é a parte de work média 3 blocos por lista (4 bytes por ISN)
- BLKSIZE é o tamanho do bloco do dispositivo do conjunto de dados Work
- NU é o ADARUN NU = valor. Isso pressupõe uma lista por usuário, uma bloco por lista na Work3. Ou pode-se usar a Highwater alta de NU.
- IU é as listas média ISN por usuário
- HIWATER.LI é a Highwater alta para a tabela de listas de ISN (ADARUN LI)
- NSISN é o valor ADARUN NSISN, o número de ISN do mantidos no quadro de entrada por ISN Listas

Note-se que o aumento NSISN diminuirá o uso da Work Part 3.

Aumentar o tamanho de bloco do dataset de Work

O tamanho do bloco do dataset de Work pode ser aumentado independentemente do Associator e do Datastorage (note que o PLOG precisara ser alteradas). Não pode haver ganho de desempenho significativo, aumentando o tamanho do bloco (redução do I/O) e quaisquer questões negativas são raras. Alterando o tamanho do bloco é o mesmo que o aumento do dataset de Work (ver acima). NOTA. O PLOG também terá que ter uma mudança no tamanho do bloco. Isso afetará o ADARUN DUALPLD e parms DUALPLS (menos blocos por o mesmo tamanho do PLOG).

Se o tamanho total do dataset de work é mantido, mas o tamanho do bloco foi aumentado, em seguida, os parms ADARUN de LP e LWKP2 terá de ser ajustado para baixo. A outra abordagem é aumentar o dataset de Work ao mesmo tempo do aumento do tamanho de bloco.



Dividindo o dataset de Work em vários volumes

Historicamente, em alguns locais de trabalho já vi vantagens de desempenho em dividir em três partes a work em vários volumes. Outras soluções para isso são a cache do Work Part 2 e 3 (ver abaixo). Além disso, a utilização do PAV (Parallel Access Volumes) poderia eliminar a necessidade deste.



Work Caching Part 2 e 3

ADARUN CWORK2FAC e CWORK3FAC

Veja outras fontes sobre os tipos de cache, relatórios, problemas, entre outros. Um cache mínima de 1% é recomendado para cada um como este fornece muitas estatísticas úteis em IO de por área Work, tempos de I/O relativos, etc. O seguinte é uma exposição de cache amostra (disponível via comandos do operador, AOS, lote ADADBS OPERCOM, ou estatísticas de desligamento do banco de dados.
+--------------------------------------------------------+
+,Work2,Virtual 64,        RABNS 83,702 thru 84,301      +
+--------------------------------------------------------+
+   allocated, LA=10:07:25                               +
+--------------------------------------------------------+
+        360 Cache Writes               5  Blks in Cache +
+         91 Read EXCPS    +   16,797,696  V64   Size    +
+      2,491 Cache Reads   +          600  Blks/V64      +
+      2,582 Total Reads   +        4,816  RABN Tab Size +
+       96.4 V64 Efficiency+      139,950  Max V64 Used  +
+   0.064275 Max NIOT (Sec)+     0.033263  Max EXCPT(Sec)+
+   0.000010 Min NIOT (Sec)+     0.001111  Min EXCPT(Sec)+
+   0.000103 Ave NIOT (Sec)+     0.004797  Ave EXCPT(Sec)+
+--------------------------------------------------------+
+--------------------------------------------------------+
+ Work3 Virtual 64,        RABNS 89,702 thru 89,998      +
+--------------------------------------------------------+
+   allocated, LA=19:56:18                               +
+--------------------------------------------------------+
+     45,758 Cache Writes             297  Blks in Cache +
+          0 Read EXCPS    +    8,314,880  V64   Size    +
+        974 Cache Reads   +          297  Blks/V64      +
+        974 Total Reads   +        2,392  RABN Tab Size +
+      100.0 V64 Efficiency+    8,313,030  Max V64 Used  +
+   0.017694 Max NIOT (Sec)+            0  Max EXCPT(Sec)+
+   0.000011 Min NIOT (Sec)+            0  Min EXCPT(Sec)+
+   0.000086 Ave NIOT (Sec)+     0.000000  Ave EXCPT(Sec)+
+--------------------------------------------------------+
O cache Work2 mostra os tempos médios de I/O para Work2 para 91 I/O de (0,004797 segundo) que é um indicador aproximado da Work global de tempo do I/O. No caso de Work3, toda a área está em cache e, portanto, não há I/O para Work Part 3.

Checkilst para melhorar o desempenho da Work

- O dimensionamento correto da parte 1, 2, 3 Work (ver acima)
- Grandes blocos
- Cache da Work Part 2 e 3
- ADARUN NWORK1BUFFERS (geralmente aumentem)
- (Parallel Access Volumes) do PAV
- Sintonia geral dos discos do dataset de Work (i/o e do canal de contenção)
- O dimensionamento correto de LWP ADARUN e LS (geralmente aumentando)
- O dimensionamento correto de ADARUN NSISN (geralmente aumentando)
- O dimensionamento correto de ADARUN TT (geralmente diminui)


Determinando um ponto para Montagem da Work Part 1

Além da Software AG fornecer as informações, as seguintes rascunhos para uma maneira simples de verificar qual é o ponto envoltório é para as novas versões do Adabas.

- Criar um banco de dados dedicado para executar o teste para vários tamanhos de ADARUN LP (por exemplo, 200, 1000, 2000.)
- Crie um arquivo de registro grande (por exemplo, 100b campos, todos fixos, não descritores.). Tamanho do registro deve cerca fator em blocksize Work (por exemplo,. Work Blocksize de 5724, então o tamanho recorde de 1.300 bytes, 2 registros por bloco)
- Como o único usuário do banco de dados, execute um programa que insere registros no arquivo, contando o número de inserções de até um código de resposta 9 sub 15.
- Multiplique o número de inserções, vezes os registros por bloco; divida a Work Part 1 tamanho; então multiplicar por 100 (para um por cento) e que é o ponto aproximado envoltório.

0 comentários:

Enviar um comentário