1 - Universo KK

Propaganda
Banco de Dados Distribuído –
INFORMIX
Joao Paulo Bonard & Mauricio Mesquita
1- Projeto de BD-Distribuido
a. Suporte a fragmentação
Horizontal: Implementa
métodos:
Round Robin: cada tupla vai para a próxima partição, em sequencia.
Hashed: aplica-se um algoritmo na chave da tupla para determinar o número da
partição.
Range: tuplas divididas segundo um intervalo entre chaves.
Expression: cada partição recebe uma quantidade de registro determinada apartir
de um critério de seleção (cláusula select).
b. Mecanismos de Replicação * Master/Slave - replicação de transação *
Replicação de dados é a sua duplicação de um servidor de banco de dados primario (servidor
primario) para um servidor de banco de dados secundário (servidor secundário). Neste contexto,
um servidor sem replicação é um servidor padrão.
Durante um funcionamento normal, clientes podem se conectar ao servidor primario e utilizálo
como um servidor padrão. Clientes podem também se conectar ao servidor secundário, mas
apenas para ler dados.
O servidor secundário não permite atualizações através de aplicações do cliente. Ele é
dinamicamente atualizado, as alterações no servidor primário são enviadas para serem aplicadas
no servidor secundário.
O Informix utiliza o log lógico para replicar os dados de um Servidor primário para um secundário.
Antes do servidor primario descarregar o buffer de log lógico da memória compartilhada para o
disco, o sistema copia o seu conteúdo para um buffer de replicação de dados no servidor primario.
O buffer de replicação de dados é parte da area virtual da memória compartilhada, administrada
pelo servidor primario, e tem o mesmo tamanho que o log lógico.
O buffer de replicação de dados é enviado para o servidor secundário através da rede, utilizando
TCP/IP, e é recebido por uma thread específica que o coloca num buffer de recovery. Depois uma
outra thread aplica os comandos do log no banco de dados do servidor secundário.
Os dois servidores possuem uma thread que fica fazendo um ping entre as duas máquinas, de
forma que ela fica checando a conexão entre eles. Se ela detectar uma falha na comunicação, uma
mensagem de erro é enviada para o log de mensagem. Normalmente esta situação exige que se
inicie um processo de recovery no servidor primario ou no secundário.
O servidor primario pode enviar para o servidor secundário o conteúdo do buffer de replicação de
dados de forma síncrona ou assíncrona.
Para que ocorra a replicação síncrona deve ser configurado um parâmetro (DRINTERVAL = -1)
qualquer outro valor neste parâmetro tornará a replicação assíncrona.
Na replicação síncrona a descarga do buffer de log lógico só é finalizada após estes 3 passos:
• o conteúdo do buffer de log lógico foi copiado para o buffer de replicação de dados.
• o buffer de replicação de dados foi enviado através da rede para o servidor secundário.
• A confirmação do servidor secundário de recebimento do buffer chega ao servidor
primário.
Assim há a certeza de que as transações commitadas no servidor primário terão sido enviadas
para o servidor secundário.
O principal problema dessa abordagem é que a cada descarga do buffer de log lógico, pode haver
um atraso na espera da mensagem de confirmação devido ao tráfego na rede.
No update assíncrono esta espera é evitada, pois a descarga do buffer de log lógico é finalizada
imediatamente após a cópia de seu conteúdo para o buffer de replicação de dados.
O servidor primário envia o conteúdo do buffer de replicação de dados pela rede quando:
• buffer de replicação de dados ficar cheio
• a aplicação commitar uma transação em um banco de dados não bufferizado
• um intervalo de tempo especifico passar, determinado pelo parametro DRINTERVAL.
A desvantagem do update assíncrono está no risco de, se houver uma falha, transações
commitadas no servidor primario podem não ter sido replicadas no secundário.
Checkpoints entre os servidores primario e secundário são sempre executados sincronamente.
Durante um checkpoint são escritos em disco as alterações feitas nos buffers de memória
compartilhada, buffers de log físico e buffers de log lógico. Isto provê informação para o processo
de fast recovery caso ocorra uma falha no sistema.
Um checkpoint no servidor primario só é finalizado após o término do secundario, e deve ocorrer
em intervalos de tempo definidos na configuraçao do parametro DRTIMEOUT .
Replicação de dados pode ser alterada pelo logging setup do seu BD.
Se o BD tem um logging bufferizado e o sistema cair enquanto o buffer de log lógico conter uma
transação commitada que ainda não foi descarregada, ela será perdida.
Se o BD tem um logging não bufferizado, the buffer de log logico é descarregado assim que a
transação for commitada.
Existem alguns requisitos para a utilização de replicação de dados:
O hardware e o SO devem ser idênticos nos servidores primario e secundario e ambos
devem utilizar a mesma versão e release de Informix, além de possuírem a mesma
configuração de log físico, log logico e memória compartilhada.
As conexões de hardware e software de ambos devem se comunicar utilizando TCP/IP,
utilizando a mesma interface de programação (TLI ou Socket).
Os chunks, dbspaces, path names, e offsets alocados para dbspaces não temporários, dos
servidores primario e secundário, devem ser os mesmos.
Idealmente até mesmo o particionamento dos discos de ambos os servidores devem ser
idênticos.
Todo o banco de dados que se deseja replicar deve utilizar o log de transação. Se isso nao
ocorrer, as atualizações no servidor primario nao gerarao log e as transaçoes nao poderao
ser refletidas no servidor secundário.
Outras configurações no servidor primário devem ser levadas em cnsideração no momento
da configuração do servidor secundário.
2- Controle do ambiente distribuído
Controle de acesso é implementado através de privilegios que permitem que o
usario realize operações em um objeto do Banco de Dado.
Implementa controle de acesso com varios niveis de seguranca ao inves de
abordagem do tudo-ou-nada
O Informix permite o controle de integridade através de trigger.
3- Transparência


Distribuicao: O informix não suporta Transparência de distribuicao, visto o
exemplo abaixo, ele tem transparência de denominação (usa sinônimos)
replicação: Tem para atualização e não tem para consulta
Durante um funcionamento normal, clientes podem se conectar ao servidor primario e
utilizálo como um servidor padrão. Clientes podem também se conectar ao servidor
secundário, mas apenas para ler dados.
O servidor secundário não permite atualizações através de aplicações do cliente. Ele é
dinamicamente atualizado, as alterações no servidor primário são enviadas para serem
aplicadas no servidor secundário.

Fragmentação: Tem. É feito automaticamente a conversão das consultas para os
fragmentos.
4- Processamento distribuído de consulta
a. Suporte ao processamento distribuído de consulta
Em cada servidor, existe um request manager (RQM), que toma decisões quanto a como a
consulta deve ser dividida e distribuída, além de assegurar a não sobrecarga de servidores na
rede. O RQM utiliza outros 3 serviços para determinar como uma consulta será executada: o query
optimizer, que determina a melhor forma para a execução da request, o metadata manager que diz
aonde o dado se encontra e o scheduler para distribuir a consulta .
b. Tipo de otimizador de consulta utilizado
Utiliza o Query Optimizer, que realiza pesquisa exaustiva baseada em custo.
Ele gera multiplos planos de consulta e escolhe o menor custo, considerando a ordem
em que as tabelas sao lidas, como elas sao lidas (index ou sequencial) e como ocorre
o join entre as tabelas na consulta. Utiliza qauntidade de I/O e capacidade de CPU
para calculo do custo.
c. Mecanismos de otimização de consulta distribuída
Utilizando informação pertinente vinda do metadata manager, o query optimizer
determina o grau de paralelismo da consulta e manda um plano de execução para o
scheduler distribuir a consulta.
O scheduler reside em cada servidor e serve para distribuir tarefas do sistema, ele
deve ativar o plano de execução no servidor em que houver o recurso disponível.
5- Processamento distribuído de transação
a. Suporte ao processamento distribuído de transação
Servidor Dinâmico INFORMIX-on-line (On-line) lhe permite atualizar
informação sobre múltiplo servidores de banco de dados que usam uma única
transação.
Este tipo de transação é conhecido como uma transação distribuída.
A estratégia para controlar transações distribuídas são conhecidos como um
two-phase commit protocol.
Este protocolo governa a ordem na qual uma transação de multiserver é
executada.
Transações distribuídas usam two-phase commit protocol para assegurar que
todos servidores recebem a mesma instrução - commit ou roll back uma
transação.
se qualquer servidor de banco de dados não pode comitar sua parte da
transação,
todos os servidores que participam na transação são impedidos de comitar.
Toda transação que usa o protocolo de two-phase commit tem coordenador e
um ou mais participantes.
O servidor no qual a transação é inciada, faz o papel de coordenador, e esta
transação é chamada de transação global.
O papel de coordenador não pode mudar durante uma única transação.
O comnado connect define o coordenador.(no caso a itália)
Você pode exibir o coordenador para uma transação distribuída usando o
comando ($onstat -x.)
O coordenador é responsável pela comunicação (envio e recebimento de
mensagens) com os participantes da transacao..
Mensagens passam entre o coordenador e cada participante. Mensagens do
coordenador para participantes incluem o numero de identificação da transação , e
instruções como prepare para commit ou rollback.
Se um Servidor estiver fora, pode ter parte de algumas transações que
estão ativas em outros Servidores. Os problemas que podem acontecer como
resultado dependem da fase da transação, e se o sistema falhado é o
coordenador ou um participante.
Fast Recovery precisa trabalhar diferentemente em um sistema distribuído.
Recovery restabelece o banco de dados automaticamente a um estado de
consistencia físico e lógico, depois de uma falha de sistema que poderia
deixar uma ou mais transações num estado uncommitted.
Dentro de uma transação distribuída, um Servidor pode ver uma transação
como commit, enquanto outro pode vê-la como ainda ativo.
Então os Servidores precisam se coordenar para determinar o verdadeiro
estado da transação.
Estas transações normalmente permanecerão ativas até que elas sejam
finalizadas(commit/roll back) em todos os locais.
Examinemos como two-phase commit trabalha.
Quando você executa um INSERT, UPDATE, ou DELETE, o apropriado
Servidor é contatado e se torna parte da transação.
Quando o segundo Servidor é contatado, a transação se torna uma transação
distribuída e o coordenador inicia um 2PC.
A two-phase commit protocolo tem duas partes:
• a fase pre-commit
• a fase de post-decision
O pre-commit é iniciado quando a aplicação de usuário enviar uma mensagem
commit para o coordenador.
O coordenador prepara então para commit localmente e escreve uma entrada
de BEGPREP dentro seu log.
Esta entrada lista os Servidores participantes que estão envolvidos na
transacao distribuída.
O coordenador pergunta então para os participantes se eles puderem comitar a
transação.
O participante pode não comitar se um erro de constraint acontece, ou se
qualquer servidor cair.
Se qualquer um dos participante não puder comitar, entao o coordenador
realiza roll back da transação e envia mensagens de rollback a todos os
participantes. A transação é terminada então.
Se o participante puder comitar a transação, escreve no log um PREPARE, o
participante - agora na fase pre-commit - indica que está pronto para comitar
mandando de volta uma mensagem ao coordenador.
Se todos os participantes devolvem uma resposta positiva ao coordenador, ele
escreve no log um commit, que indica o começo da fase de post-decision. O
coordenador envia mensagens commit para os participantes.
Cada participante escreve então um COMMIT no log, comitando efetivamente
a transação localmente.São libertados todos os recursos no local participante.
Porém, a transação global permanece aberta até que o coordenador a finalize.
Uma vez que todos os participantes confirmarem o commit de suas transações
locais, o coordenador, fica livre para completar a transação global distribuída e
gravar em seu log um ENDTRANS. Esta entrada no log completa a transação
e os recursos do coordenador são libertados.
b. Protocolo de recuperação (Recovery)
O 2PC é usado para controlar transações distribuídas
por servidores múltiplos.
O 2PC executa um recovery automático no caso de uma transação
ou sistema falhar
O processo de recuperação automático é projetado para controlar falha de tal
um modo que é preservada integridade de dados por todos servidores
participantes.
O único papel do DBA neste processo é trazer o coordenador ou
participante on-line depois de uma falha de sistema ou de rede.
Há dois parâmetros de configuração específico para recuperação de ambiente
distribuído:
• TXTIMEOUT
• DEADLOCK_TIMEOUT
Embora ambos os parâmetros especificam períodos de time-out, os dois são
independentes.
O parâmetro de TXTIMEOUT é específico para quando comunicação entre o
coordenador e o participante estiver interrompido. Isto especifica a quantia de
tempo que o participante espera para receber uma instrução de commit do
coordenador.
Se o tempo especificado (time-out) decorre, o participante checa o estado da
transação no sistema coordenador para determinar se deverá iniciar o recovery
automático participante.
O valor default do TXTIMEOUT é 300 segundos.
O ótimo valor deste parâmetro varia, dependendo de seu ambiente específico
e aplicação.
O parâmetro de DEADLOCK_TIMEOUT especifica a quantia de tempo que
uma transação distribuída espere adquirir um recurso de memória
compartilhado.
Se a transação é forçada a esperar mais muito tempo que o tempo
especificado, a thread que possui a transação assume que existe deadlock
multiserver.
Deadlock pode acontecer quando um de dois servidores precisam de um
recurso, e não pode continuar processo até a liberaçao do recurso exigido.
O valor default DEADLOCK_TIMEOUT é 60 segundos.
Você deve ter cuidado ao ajustar o valor de DEADLOCK_TIMEOUT. Se você
fixasse o valor muito baixo, servidores podem abortar transações que não são
deadlocked. Se você fixasse o valor muito alto, deadlock multiserver poderiam
reduzir a concorrencia , afetando o desempenho.
Pode acontecer durante uma transação em 2PC: O servidor ou a rede cair.
O processo de recovery exato que acontece para uma transação distribuída
depende
de:
• que fase que está a transação
• se é coordenador ou participante que falhou
1. Olhemos primeiro como o processo de recuperação automático trabalha
no caso de o participante falhe durante a fase pre-commit.
Na fase pré-commit , o coordenador envia uma mensagem para o participante
perguntando se pode dar commit.
Obviamente, se a conexão entre coordenador e participante cair, nenhuma
resposta será recebida pelo coordenador. O coordenador entao dá roll back na
transacao.
Enquanto isso, o participante esperará TXTIMEOUT segundos esperando uma
mensagem de commit do coordenador, como não vai receber , então tenta
adquirir do coordenador o estado de transação. Então não haverá nenhum
registro em memória compartilhada, então o participante vai dar roll back.
2. O participante também poderia falhar na fase de post-decision.
Nesta fase o participante enviou uma mensagem ready-to-commit. Fica no
estado de READY
O coordenador descobre que o participante falhou quando não receber
nenhuma resposta de confirmação do pedido de commit.
Gera um nova mensagem de commit para o participanteo para comitar a
transação.
A menos que o participante tenha caido, também descobrirá que sua própria
thread caiu, e starta outro participante.
O novo participante recentemente criado gerará uma thread (thread) somente
no coordenador com a finalidade de conferir o estado da transação.
O participante vê que a transação está na fase de post-decision, e espera
o coordenador completar a transação.
Finalmente, depois que a transação completa, ambas as threads(threads)
geradas pelo participante é terminada.

Agora olhemos a como processo de recovery automático trata se o
coordenador falhar durante 2PC.
1. Se thread(thread) de coordenador morre durante o pre-commit, a
transação inteira, precisa dar roll back.
Primeiro, o DBA tem que colocar o coordenador on-line novamente.
Depois, o mecanismo fast recovery mechanism dá roll back na transação
global no coordenador.
Enquanto isso, participantes esperam o período de tempo especificado pelo
parâmetro de configuração TXTIMEOUT para receber uma mensagem do
coordenador para ou comitar ou roll back.
Depois de esperar o tempo especificado, os participantes gera uma thread
nova no coordenador para determinar o estado de transação.
O participante não poderá gerar esta thread nova até o coordenador
está de volta on-line. Porque o coordenador deu roll back na transação global,
não há nenhuma transação em memória compartilhada. Então os participantes
dão roll back na transação.
1. O coordenador poderia morrer durante a fase de post-decision
onde o COMMIT foi escrito no log mas o ENDTRANS não . Neste caso,
deve ser commitada, não deve dar roll back. Fazer isto, a thread de
main_loop gerará uma thread nova no lado do coordenador.
A nova thread coordenando envia uma mensagem a cada thread participante
para determinar os estados das partes de trabalho.
Se participantes retorna mensagem de que pode commit, o coordenador instrói
o participante para comitar.
Porém, se o participante já comitou seu trabalho, terá removido
a entrada de sua tabela de transações abertas. Por conseguinte,não tem
nenhum conhecimento da transação. O participante devolve então uma
mensagem de ‘transaction unknown' (transação desconhecida)para o
coordenador, que presume que o trabalho já estava comitado.
Uma vez o coordenador contata todos os participantes, pode completar o
protocolo fazendo uma entrada de ENDTRANS no log.
 Falha do participante ou coordenador apresenta uma mais séria
situação de recovery.

No caso de falha do participante, o processo de recuperação automático
habitual pode acontecer.Porém, isto sempre não é possível.
Se o coordenador está na fase de post-decision e não recebeu uma mensage
de commit
do participante, continuará recebendo votos do participante para uma resposta.
A freqüência de receber votos é determinada pelo parâmetro de TXTIMEOUT.
Ocasionalmente um período longo de tempo pode decorrer antes do
participante ficar on-line.
Para o coordenador será impedido de comitar a transação se não saber se o
participante comitou ou não.
Uma transação neste estado é conhecida como uma transação bloqueada.
Uma transação bloqueada pode resultar em qualquer do seguinte:
• que o processo front-end parece estar com problema.
• que a aplicação não procederá além da declaração de COMMITWORK até a
transação ser completada
• o arquivo de mensagem On-line receberá uma mensagem que declara que o
participante em questão não está respondendo, e o nome participante será
listado.
Uma transação bloqueada segurará todos os recursos para aquela transação
até que seja completada.

Uma situação semelhante acontece no caso de falha do coordenador.
Se um período longo de tempo decorre antes do recovery do coordenador, o
processo participante é bloqueado para comitar a transação, porque não sabe
se o coordenador entrou na fase de post-decision ou não.
Em uma transação bloqueada devido a fracasso de coordenador, o campo de
retrys para a transação no onstat -x continuará aumentando.
Este valor especifica o número de vezes que o participante tentou adquirir
informação de estados da transação pelo coordenador.
Além disso, o log conterá mensagens que indicam que não pode
conectar a um sistema remoto.
Uma vez mais, por causa da transação bloqueada, todos os recursos são
segurados até o transação ser completada.

Olhemos agora a como Informix recupera de uma falha de um sistema
heterogêneo.
Tal participação (de Servidores não Informix) é tornada possível pelo uso de
portais que agem como uma ponte entre Informix e servidores de non-Informix.
Em qualquer fase durante um commit heterogêneo, o coordenador,
participantes, ou portal pode falhar.
Falha em commit heterogêneo é da mesma maneira como 2PC, menos em
certas circunstâncias especiais.
Nestes casos especiais, o portal commita a transação enquanto que os outros
Servidores possam decidir abortar.
Demos uma olhada nestes casos especiais.
Suponha o coordenador falha uma vez enviou a mensagem commit para o
portal mas antes de escrever o COMMIT no log.
Neste caso, as tarnsacoes serão abortados nos Servidores,mas qualquer
dados comitado pelo portal não dará roll back.
Outro caso especial surge se o portal receber uma mensagem commit e
comitar a transação, mas falha antes de enviar uma mensagem de
confirmação disto ao coordenador. Novamente, dados são comitados no portal
, mas os outros Servidores dão roll back.
c. controle de concorrência
Há dois parâmetros de configuração específico para recuperação de ambiente
distribuído:
• TXTIMEOUT
• DEADLOCK_TIMEOUT
O parâmetro de DEADLOCK_TIMEOUT especifica a quantia de tempo que
uma transação distribuída espere adquirir um recurso de memória
compartilhado.
Se a transação é forçada a esperar mais muito tempo que o tempo
especificado, a thread que possui a transação assume que existe deadlock
multiserver.
Deadlock pode acontecer quando um de dois servidores precisam de um
recurso, e não pode continuar processo até a liberaçao do recurso exigido.
O valor default DEADLOCK_TIMEOUT é 60 segundos.
Você deve ter cuidado ao ajustar o valor de DEADLOCK_TIMEOUT. Se você
fixasse o valor muito baixo, servidores podem abortar transações que não são
deadlocked. Se você fixasse o valor muito alto, deadlock multiserver poderiam
reduzir a concorrencia , afetando o desempenho.
6- Suporte a acesso a dados de SGBD Heterogêneo
O Informix oferece conectivide a outros SGBDs através do Informix Enterprise
Gateway, permitindo acesso a Oracle, Sybase, IMS e DB2. O Informix Enterprise Gateway
traduz chamadas SQL do Informix em chamadas de função compatíveis com ODBC. Ele
funciona como um emulador, fazendo transparência para que aplicações cliente e servidor
vejam o SGBD externo como uma instância de um Informix Dynamic ServerTM . Auxilia o
acesso ao dado utilizando um OnLine 5.x ou uma ferramenta baseada em DSA para
coordenar um join distribuido utilizando um único comando SQL.
Um ambiente heterogêneo recorre a um grupo de servidores de banco de dados onde
pelo menos um dos Servidores não é um servidor Informix. Um commit heterogêneo
permite transações distribuídas para atravessar servidores não Informix.
É provido acesso para os servidores não Informix por um sistema de Gateway (Portal).
Há três tipos de gateway:
• DRDA Gateway
• Enterprise Gateway
• Enterprise Gateway Managerwith ODBC
O Coordenador assegura que só um Gateway é usado em qualquer transação
distribuída. Para utilizar commit heterogeneo, habilita-se o parametro commit heterogeneo
para y utilizando o comando ON-Monitor ($ onmonitor) ou pode-se fixar o parâmetro de
configuração, HETERO_COMMIT para 1 no arquivo
Onconfig. Qualquer outro valor incapacitará commit heterogêneo. Em qualquer caso, a
mudança não entra em vigor até você reinicializar a memória compartilhada , reiniciando o
sistema. O Coordenador automaticamente usa o protocolo de commit heterogêneo para
qualquer transação distribuída entre um ou mais servidores e somente um gateway. O
protocolo de commit heterogeneo é uma evolução do Protocolo Two-phase commit padrão.
O protocolo de commit heterogeneo é dividido em 3 fases:
• pre-commit
•gateway commit
•post-decision
Na fase pre-commit , o coordenador direciona cada participante, exceto o participante
gateway, para preparar o commit da transação.
Se os participantes estiverem preparados para o commit, eles devem retornar mensagem
de confirmação.Se o coordenador receber todas as mensagens de confirmação , ele grava
no log e manda mensagem de commit para o gateway.
Esta açao incia a fase gateway commit.
O gateway envia uma resposta ao coordenador indicando se o gateway comitado faz parte
da transação.
Se o gateway comitar a transacao, o coordenador decide comitar toda transação.
Entretanto , se o gateway “cair” o coordenador realiza um roll back na transacao.
A fase post-decision é identical a fase correspondente no protocolo 2PC.
Download