Artigo
· Maio 26 8min de leitura

Uma Visão Geral da Degradação de Banco de Dados

Introdução

Olá! Neste artigo, discutirei a degradação de banco de dados, um tipo de problema de integridade de dados que se pode enfrentar ao usar o IRIS. Primeiro, farei uma revisão da estrutura dos bancos de dados IRIS. Em seguida, discutirei como a degradação de banco de dados pode se manifestar e as causas comuns de problemas de degradação. Concluirei com dicas gerais que damos aos nossos clientes sobre como prevenir ou se preparar para problemas de degradação de banco de dados.

Estrutura do Banco de Dados IRIS

O que exatamente é um banco de dados? Um banco de dados IRIS é um único arquivo que consiste em uma unidade fundamental chamada "bloco". Ele contém vários blocos de tamanhos iguais (normalmente 8kb) em ordem sequencial. Todos esses blocos "apontam" uns para os outros armazenando o offset no banco de dados onde reside o bloco para o qual apontam. Essa rede de blocos forma uma configuração que se assemelha a uma "floresta" do que são chamadas de árvores balanceadas, ou B-trees. Cada global é representada por uma B-tree separada, e cada B-tree é acessível por meio de um Bloco de Diretório Global de nível superior que contém ponteiros para todas as B-trees globais no banco de dados.

A característica que define uma B-tree é que todos os blocos de dados de "folha" estão no mesmo nível. Isso significa que, sempre que um bloco de ponteiro superior é preenchido, outra camada de ponteiro é adicionada acima dele, permitindo que a B-tree escale teoricamente de forma indefinida. No início de cada bloco, há uma quantidade de bytes que indicam alguns metadados sobre aquele bloco e os blocos ao seu redor. Por exemplo, cada bloco contém informações sobre seu número de bloco, a quantidade de bytes de dados no bloco, o tipo de bloco (ponteiro ou dados), a ordenação, etc. O bloco também contém informações sobre blocos relacionados, como o número do bloco à sua direita, o primeiro nó do bloco à sua direita e as diferenças de byte entre o último nó do bloco e o bloco à direita.

Aqui está uma representação de como se parece uma B-tree global. As linhas verdes representam ponteiros entre diferentes níveis de blocos, e as linhas laranja representam ponteiros entre os blocos e seus blocos vizinhos à direita. Um valor de bloco à direita de 0 é usado quando o bloco está na borda direita da árvore.

image

Degradação do Banco de Dados

Problemas de integridade do banco de dados ocorrem quando a estrutura interna de um banco de dados apresenta alguma inconsistência lógica, ou quando o banco de dados não corresponde ao formato que o IRIS espera. Isso pode acontecer de várias maneiras:

  • Integridade Referencial: Os ponteiros entre blocos de ponteiros e blocos de dados, ou os ponteiros de direção "direita" entre blocos de dados, estão inconsistentes. Por exemplo, um bloco de ponteiros pode indicar que o primeiro nó de um bloco de dados para o qual ele aponta é ^x(10), enquanto o primeiro nó desse bloco de dados é, na verdade, ^x(20).
  • **Integridade dos Dados: ** Os dados dos blocos de ponteiros ou dos blocos de dados estão corrompidos. Por exemplo, os primeiros bytes de cada bloco contêm metadados sobre o próprio bloco e seus blocos relacionados, começando no offset 0. Se estes estiverem localizados em outro offset, isso resultaria na corrupção do bloco.
  • Integridade da Aplicação: Isso ocorre quando o banco de dados está no formato esperado pelo IRIS, mas há alguma inconsistência lógica relacionada a como a aplicação deveria funcionar. Por exemplo, digamos que esperamos que todos os dados do médico sejam salvos no global ^Hospital.DoctorsD, e os índices desses médicos sejam salvos no ^Hospital.DoctorsI. Se um médico tivesse seus dados no global de dados, mas não tivesse um índice correspondente no global de índices, isso seria uma forma de problema de integridade da aplicação.

Causas Comuns de Degradação

Aqui, abordarei algumas das causas comuns de degradação do banco de dados que observamos em nossos clientes.

Cache de Escrita do Windows

O cache de escrita do Windows é um recurso do Windows que pode levar a problemas de degradação do banco de dados. A ideia por trás dessa configuração é que o Windows armazenará em buffer as escritas em disco na memória e as gravará no disco em pacotes maiores. Isso ajuda a melhorar o desempenho em certos casos, pois as escritas em disco são lentas, e fazê-las em pacotes maiores permite uma escrita mais eficiente. Por exemplo, imagine que seu disco esteja dividido em blocos de 1024 bytes, e você tenha um aplicativo tentando escrever 256 blocos de dados de 4 bytes. Em vez de fazer 256 escritas separadas no disco, o que seria bastante lento, o cache de escrita economiza tempo armazenando essas escritas na memória e gravando-as com muito menos frequência.

No entanto, isso pode criar problemas quando há perda de energia. Se o sistema operacional estiver armazenando dados na memória que normalmente já teriam sido gravados no disco, uma perda de energia pode fazer com que esses dados sejam perdidos e irrecuperáveis, já que a memória RAM é volátil. Por essa razão, frequentemente recomendamos que nossos clientes desativem o cache de escrita do Windows quando não for necessário.

Cache de Escrita de Hardware

Assim como os sistemas operacionais usarão a RAM para armazenar em cache as gravações em disco, algumas unidades de disco de nível empresarial também armazenarão em cache as gravações em disco para fins de eficiência. Certos SSDs, por exemplo, contêm um buffer DRAM que pode armazenar gravações para escrevê-las em grandes pacotes para aumentar o desempenho. Infelizmente, assim como no cache de escrita em nível de sistema operacional, a DRAM e a memória de hardware em geral são voláteis e não serão preservadas em caso de perda de energia. Isso pode ser mitigado garantindo que a unidade de disco seja alimentada por baterias ou alguma outra forma de Sistema de Alimentação Ininterrupta (UPS) para que possa descarregar o buffer de memória em caso de falha de energia.

VMware

VMware é uma solução de hospedagem em nuvem que muitos de nossos clientes usam para executar nossos produtos. Houve uma série de problemas conhecidos com o VMware que podem levar a problemas de integridade de dados. Estes são detalhados nos seguintes avisos:

  • Aviso: VMWare vSAN e Integridade de Dados (link) : Há um problema conhecido relacionado a operações de extensão de disco com VMs executando VMware vSAN, uma solução de armazenamento oferecida pela VMware.
  • Aviso: VMWare vSphere e Integridade de Dados (link) : O SEsparse, um formato de snapshot para máquinas VMware, possui um problema conhecido de integridade de dados.
  • Aviso: Erros de Consistência de Dados do VMware vSAN (link) : Existem certas instruções x86 no conjunto de instruções AVX-512 que podem levar a problemas de integridade de dados quando usadas com o vSAN.

Aconselhamento Geral

Aqui estão algumas recomendações gerais que fornecemos aos nossos clientes ao ajudá-los a se recuperar de problemas de degradação do banco de dados.

Backups

Ao lidar com problemas de degradação do banco de dados, nosso primeiro recurso, surpreendentemente, não é tentar reparar. Reparar bancos de dados manualmente pode ser um processo complicado e nem sempre produtivo, devido à grande escala e complexidade dos problemas típicos de degradação. Em vez disso, inicialmente tentaremos recuperar de um backup para restaurar o banco de dados a um estado saudável. Por essa razão, pedimos aos nossos clientes que façam backups frequentes.

Os backups também são extremamente úteis para realizar uma Análise da Causa Raiz (ACR) sobre o porquê da degradação ter ocorrido em primeiro lugar. Com um backup, podemos ver como era o estado saudável para comparação com o estado não saudável. Também podemos ver como a degradação mudou ou se espalhou ao longo do tempo para rastrear sua origem.

Guia para fazer backups: link

Verificações de Integridade

É vital para a ACR que detectemos a degradação do banco de dados o mais rápido possível. Isso é importante porque, muitas vezes, a degradação acontece devido a algum aspecto do estado do sistema, seja no nível da aplicação, do sistema operacional ou do hardware.

Por essa razão, pedimos aos nossos clientes que executem verificações frequentes da rotina ^Integrity. Essa rotina verifica bancos de dados e globais para garantir que eles tenham o formato esperado pelo IRIS. Se você encontrar degradação em seus bancos de dados, pode entrar em contato imediatamente com o WRC (Worldwide Response Center) e nós o auxiliaremos no reparo e, em seguida, na realização de uma Análise da Causa Raiz (ACR) para encontrar a origem do problema.

Guia para executar verificações de integridade: link

Também é importante executar verificações de integridade fora do IRIS no sistema operacional e no hardware em que a instância do IRIS está sendo executada, pois o IRIS funciona de forma intrínseca com o sistema operacional e o hardware para gerenciar os dados corretamente. Isso pode ser feito por meio de utilitários do sistema operacional, como fsck (UNIX) e chkdsk (Windows).

Conclusão

No mundo dos dispositivos de armazenamento modernos e sistemas operacionais avançados, os problemas de integridade de dados não são tão frequentes quanto antes. No entanto, eles ainda ocorrem e podem levar a problemas sérios com a disponibilidade da aplicação e perda de dados quando acontecem. Para isso, pedimos aos nossos clientes que verifiquem frequentemente a integridade de seus dados e sistemas, e nos contatem sempre que identificarem um problema, para que possamos ajudar a restaurar seus sistemas o mais rápido possível. Obrigado!

Discussão (0)1
Entre ou crie uma conta para continuar