Árvore de páginas





Ocorrência

Esta ocorrência indica um estouro do limite de balanceamento do índice atualmente utilizado em uma tabela, reproduzido quando utilizado o driver ADS. Esta ocorrência apresenta-se no log do console do Servidor de Aplicação, precedendo uma ocorrência fatal do AdvPL, normalmente relacionada às funções DBAppend(), DBRUnlock() e/ou DBSkip().

ADS Error (7022) - Operacao: <x> - Maximum index levels exceeded. File: <y>

Causa

Esta ocorrência é reproduzida quando da utilização de uma tabela indexada, onde foi usada uma expressão de indexação cujo resultado da chave ( &(Indexkey()) ) ultrapasse 140 carascteres, onde houve uma sequencia grande de inserções consecutivas.

Correção

  • Verifique as chaves de índice utilizadas para a tabela, e garanta que nenhuma chave seja maior que 140 caracteres. O tamanho da coluna é um fator que interfere diretamente na reprodução da ocorrência, na proporção direta do tamanho da chave de índice. Quando menor a chave, menor a chance deste erro não acontecer. Em testes feitos com um programa de stress realizando inserções de 20 mil chaves aleatórias, reduzir para 140 bytes não mais reproduziu a ocorrência, porém este limite é arbitrário, nada impede que uma determinada sequência de muitas inserções usando uma chave de tamanho menor também possa reproduzir o estouro no índice.
  • Caso não seja possível reduzir a chave do índice, verifique se é possível criar o índice após os dados já estarem inseridos na tabela.
  • Ou, troque a RDD de acesso a tabela. Ao invés de cria a tabela usando driver ADS ( DBFCDX com ADS Local ou DBFCDXADS ), use o driver CTREECDX, onde os índices não têm esta limitação de balanceamento com chaves maiores que 140 bytes.
  • Caso nenhuma das alternativas anteriores seja viável, o programa pode ser alterado para, preventivamente, recriar o índice a cada X mil registros inseridos. Este número X deve ser estabelecido como um limite preventivo, para fechar, deletar e recriar o índice, por exemplo a cada 5 mil registros inseridos. Dependendo do tamanho da chave do índice ou da sequência de dados inseridos, este número pode ser menor, e deve ser determinado empiricamente.
  • Sem rótulos