Entendendo a arquitetura do Informix
Neste artigo descrevo de modo bem abrangente o funcionamento do banco de dados Informix e assim permitir para um novo usuário do banco tenha uma visão macro de seu funcionamento.
- Introdução
- Processos / Virtual Processors / Threads
- Memória
- Disco
- Controle de acesso
- Conectividade
- Clientes
- Transações / Logical Logs
- Auditoria
- Administração
- Backup / Archive
- Alta Disponibilidade
- Replicação de Dados
- Multiplas Instancias
- Licenças
Introdução
Com Informix, é possível ter um ou mais Banco de Dados em um unico serviço. Este serviço , que aqui irei chamar de instancia é composto por três partes básicas como qualquer outro programa: Processo, Memória e Disco.
Tudo que é citado aqui é focado em ambientes Unix. Para ambiente windows há algumas diferenças e/ou limitações que irei citar quando possível. Porém a diferença é pequena, portanto pode-se considerar válido este tutorial para ambas arquiteturas.
Ao ler o texto abaixo, não deixe de acessar o post Descricao e Arquitetura do blog InformixBR, nele há imagens que irão facilitar muito o entendimento.
Processos / Virtual Processors / Threads
A partir da versão 7 do Informix seu código foi totalmente reescrito e otimizado para trabalhar com threads. Portanto é comum que uma instancia do Informix nunca tenha muitos processos de sistema operacional. A parte de processamento do informix é definida superficialmente da seguinte forma:
Processos de Sistema Operacional
Todos os processos do Informix no S.O. são identificados através do comando "oninit" , por exemplo, o comando abaixo (um "ps") lista todos os processos de uma unica instancia em execução na minha maquina:
$ ps -fC oninit UID PID PPID C STIME TTY TIME CMD informix 14606 1 0 Jun16 ? 00:00:52 oninit -v root 14607 14606 0 Jun16 ? 00:00:15 oninit -v informix 14608 14607 0 Jun16 ? 00:00:03 oninit -v root 14609 14607 0 Jun16 ? 00:00:02 oninit -v root 14610 14607 0 Jun16 ? 00:00:02 oninit -v root 14611 14607 0 Jun16 ? 00:00:03 oninit -v root 14612 14607 0 Jun16 ? 00:00:00 oninit -v root 14613 14607 0 Jun16 ? 00:00:02 oninit -v root 14614 14607 0 Jun16 ? 00:00:19 oninit -v root 14615 14607 0 Jun16 ? 00:00:18 oninit -v root 14616 14607 0 Jun16 ? 00:00:03 oninit -v
Virtual Processors / VP
Internamente no Informix existem Virtual Processors (Processadores Virtuais) que são referenciados sempre como VP. Estas VPs possuem classes onde cada classe tem seu código otimizado para realizar apenas um tipo de tarefa. As principais VPs são :
CPU CPU VP
AIO Asynchronous I/O
LIO Logical Log I/O
PIO Physical Log I/O
MSC Miscellaneous
ADM Administrative
ADT Auditing
SOC Socket
TLI TLI
SHM Shared Memory
USR User Define Routine VP
Cada VP é na realidade um processo no sistema operacional, esta relação pode ser vista com o comando "onstat -g sch" , veja que existe um ID para cada VP relacionado a um PID (Process ID) do sistema operacional:
VP Scheduler Statistics: vp pid class semops busy waits spins/wait 1 14606 cpu 160133 0 0 2 14607 adm 0 0 0 3 14608 bts 1 0 0 4 14609 lio 2 0 0 5 14610 pio 2 0 0 6 14611 aio 176 0 0 7 14612 msc 42 0 0 8 14613 aio 2 0 0 9 14614 soc 8 0 0 10 14615 str 2 0 0 11 14616 shm 2 0 0
Threads
As threads são basicamente nomeadas conforme sua função principal, por exemplo, quando a instancia é iniciada já é criada threads para comunicação "soctcplst" (se utilizado TCP/IP) que são os listeners, quando um usuário faz uma conexão com o banco é criado uma thread "sqlexec" para execução dos SQLs, durante a conexão e comunicação entre o cliente/servidor estas threads se conversam via shared memory e utilizam os VP SOC (Virtual Processor) para comunicação , para processamento dos dados é utilizado a VP CPU , para leitura/escrita dos dados em disco é utilizado a VP AIO e por ai vai.
Para visualizar e monitorar estas threads pode-se utilizar alguns comandos como "onstat -g ath" , ler em tabelas sysmaster:* , utilizar ferramentas WEB como o OAT - Open Administrator Tools.
O motivo para possuir esta arquitetura é simplismente performance. Há estudos que demonstram que trabalhar com threads é menos custoso para CPU e S.O. do que trabalhar com processo de SO. No caso das threads não existe a troca (empilhamento/desempilhamento) do processo a nível de SO quando o banco muda o processamento de uma sessão para outra e sim a troca da thread internamente no processo do banco, o que é bem mais leve . Há muita explicação técnica para isso, que não vou colocar aqui no momento pois não é este o objetivo, porém por experiência própria e relatos de outros DBA, é fato que o Informix em uma situação de alto processamento , quando comparado aos outros banco de dados, sempre consome menos CPU e tem respostas mais rápidas.
Memória
A memória utilizada pela instancia é compatilhada entre todos os processos "oninit" do banco.
A memória é citada sempre como "shared memory" e é dividida em duas partes:
- Resident Portion / Porção Residente
Esta memória é configurada antes da instancia ir ao ar. Nela é configurada itens que "teoricamente" não devem ter seus tamanhos alterados durante a execução do banco de dados, independente da carga de execução. - Virtual Portion / Porção Virtual
Nesta porção vai itens que são mas dinâmicos com relação a execução do banco de dados como por exemplo a memória alocada para cada sessão do usuário. Esta memória pode crescer/decrescer dinâmicamente , com o banco em execução.
Não há detalhes para falar agora sobre este assunto .
Disco
Aqui irei separar em duas partes: Onde salvar os dados e como eles são salvos.
O local onde os dados são salvos podem ser de 3 tipos:
* Cooked File / Arquivo normal do sistema operacional + Vantagem : Facil de administrar - Desvantagem: Performance normalmente baixa, Principalmente quando utilizado File Systems que possuem recurso de Journaling. Alto risco para integridade dos dados em caso de interrupção do ambiente (crash). Porem há possibilidades de utilizar DIRECT_IO (com certas restrições) * Block Device / Acesso direto a um device (exemplo: /dev/hda1 , /dev/vgdados/lvol1 ) + Vantagem : Performance melhor que Cooked File - Desvantagem: Medio risco para integridade dos dados, pois os dados ainda são "bufferizados" pelo SO, porém é um buffer apenas para o device, sem File Systems. Administração mais complicada * Raw Device / Acesso direto a um device porém sem intervenção do S.O. (exemplo: /dev/raw/raw1 , /dev/vgdados/rlvol1 , \\.\e: , \\.\PhysicalDrive0 ) + Vantagem : Melhor performance de todos e menor risco de integridade pois quem realiza a gravação do dado no disco é o Informix sendo assim uma vez que ele finaliza um flush de disco, é garantido que os dados já estão no device. - Desvantagem: Administração mais complicada.
A estrutra de onde os dados são salvos, seguem a seguinte arquitetura:
No informix a alocação de espaço é "fixa", ou seja, antes de sair utilizando o banco de dados é necessário alocar todo o espaço previsto, este espaço não cresce automaticamente, se encher, o banco irá retornar erro. Mas esta situação pode ser contornada apartir da versão 11.10 com a ferramenta OAT ou através de outros softwares de terceiros ou shell escrita pelo administrador.
- DISCO/STORAGE
É o HD em si ou um device de storage externo conectado via SAN , iSCSI , NFS , etc... - CHUNK
É o nome utilizado para cada arquivo alocado quando utilizado file system, ou pedaço de alocação quando utilizado Block Device ou Raw Device. - DBSPACE
É uma definição lógica de espaço e este é composto de um ou mais chunks.
Obs.: Cada chunk pertence obrigatórimente a um unico DBSPACE No informix existe tipos de dbspaces para fins administrativos, como por exemplo dbspaces temporários que são especificamente para tabelas temporárias. - BANCO DE DADOS
É definido sempre em um unico dbspace, definindo como comportamento padrão a utilização deste dbspace para todos os componentes criados no banco.
Para alocar mais espaço para um banco , o comando executado irá alocar no nivel de chunk. Neste comando tem que ser informado o patch do device/arquivo, tamanho alocado , offset e a qual dbspace pertence . - TABELAS / INDICES
Todas as tabelas e indices criados , por padrão, serão alocadas no dbspace que o banco de dados pertence. Porém isto não é uma regra e sim um padrão. Tabelas podem ser alocadas em outros dbspaces, independente do banco de dados que elas foram criadas. As tabelas também podem ser fragmentadas em pedaços em diferentes dbspaces ( com objetivo de melhor performence de I/O ou resolver problemas em grande massa de dados ).
- Para ambientes de produção, acesso ao disco via raw device é sempre o mais seguro e mais rápido (aproximadamente 30%), tanto para leitura como escrita.
- Um chunk sempre irá pertencer a um dbspace , portanto, um dbspace é composto de pelo menos um chunk.
- Um dbspace não necessáriamente possui um banco de dados / tabelas ou qualquer outro dado
- Um banco de dados sempre é criado em algum dbspace
- Uma tabela/indice pode fazer parte de N dbspaces, e nenhum deles necessáriamente será o dbspaces do banco de dados.
Controle de acesso
No Informix o controle de acesso ao banco é integrado ao sistema operacional, porém isso pode ser totalmente personalizado e reconfigurado para trabalhar com PAM,Single sign-on com kerberos, entre outros.
Considerando um ambiente sem personalização , para um usuário acessar o informix é necessário que ele possua uma conta no sistema operacional onde o banco de dados está instalado. Então para conectar ao banco de dados ele irá utilizar o nome e senha definidos no SO.
Para o administrador do banco, deverá apenas definir os GRANTs de CONNECT e demais permissões das tabelas.
Conectividade
O informix possuí capacidade de tabalhar com : TCP SOCKET, TLI SOCKET , IPC SHARED MEMORY, IPC PIPE, IBM DRDA e IPX.
Cabe ao administrador do banco definir quais protocolos serão utilizados pelas aplicações clientes. O padrão mais comum atualmente é TCP SOCKET para aplicações que são executadas em diferentes maquinas e IPC SHARED MEMORY/PIPE para aplicações que são executadas na mesma maquina que o banco de dados.
Clientes
Para acessar o Informix existe um software chamado CSDK (Client Software Development Kit) que possui os drivers ODBC , Unix ODBC, JDBC, .Net Provider, além da biblioteca para desvolvimento e utilização de outros clientes para PHP, Python, PEARL, C, etc.
Este kit é gratuito e pode ser baixado no site da IBM.
Para maiores informações leia o artigo CSDK, IBM Data Server Client e drivers
Transações / Logical Logs
No Informix , para garantir a integridade de dados em caso de um "disaster recovery" e controle de transações , ele utiliza recursos de log (chamados Logical Logs) e Before Images (Physical Log).
No Logical Log são gravados todas as alterações realizadas no banco de dados, assim quando uma transação é cancelada o banco de dados tem como rastrear quais as alterações feitas e em quais dados.
No Physical Log são registrados os "befores images" que são os dados antes de serem alterados. Assim se uma transação é cancelada, é possível voltar o dado anterior.
Auditoria
O Informix possui recursos de auditoria , onde são definidas as regras e posteriormente toda e qualquer alteração que faça parte da regra será logada em um arquivo a parte, tudo com as devidas limitações de permissões.
Administração
Devido o Informix ter nascido no mundo Unix, sua administração é principalmente realizada através de linha de comando (pode parecer algo arcaico, mas acredite, é muito eficiente). Até a versão 10 do informix as alternativas para administrar o banco era softwares de terceiros e através do ISA - Informix Server Administration que vem com o banco, que é uma versão WEB, porém este produto nunca foi muito eficiente e nunca teve popularidade devido sua ineficiencia.
Apartir da versão 11.10 do Informix foi incluido recursos de administração através de comandos SQL, permitindo assim que qualquer um conectado ao banco e com as devidas permissões possa administrar o banco indepentende de ter acesso ao "prompt" da maquina.
Assim que este recurso foi criado , junto foi criado também um software WEB chamado OAT - Open Admin Tool, que é gratuito e desenvolvido em parceria com a IBM. Este software atualmente tem capacidade de realizar 99% das tarefas administrativas.
Backup / Archive
O Informix foi o primeiro banco no mundo a ter o backup online, ou seja, realizar o backup sem que os usuários tenha que ser desconectados.
Além desta capacidade ele trabalha com logs onde são salvos todas as transações realizadas no banco. De tempos em tempos estes logs são "backupeados" (tempo definido pelo administrador), permitindo assim em caso de "crash" do sistema que seja possível recuperar a situação do banco até o momento mais próximo da parada.
O informix possui um esquema extremamente flexivel de se gerar e administrar o backup através de suas próprias ferramentas. Porém se necessário é possível utilizar ferramentas de terceiros que sejam compativel com protocolo OPEN/XBSA (Tivoli, Veritas, HP Omniback, etc) trabalhando com vários recursos adicionais , como paralelismo na geração do backup tendo assim alta performance.
O Informix também é preparado para se fazer backups externos onde é utilizado apenas ferramentas de terceiros como Storage snapshot, copia dos arquivos de dados, etc.
Alta Disponibilidade
Para ambientes onde não se pode ter permitir ficar com o sistema inoperante pode-se utilizar os recursos de alta disponibilidade do banco. Deste a versão 7 o Informix possui o recurso chamado HDR - High-Available Data Replication que consiste em uma cópia secundária do banco totalmente sincrona trabalhando no modo Ativo-Passivo. Esta cópia é em todo ambiente, discos, SO, Informix.
Apartir da versão 11.10 foram criados novos métodos de alta disponibilidade,
que são :
- RSS - Remote Secondary Server
É um servidor secundário onde os dados também são duplicados em diferente storage , assim como HDR, é assincrono trabalhando em modo Ativo-Passivo ou Ativo-Ativo e com protocolo de comunicação multiplexado, o que permite que a rede de comunicação não seja de alta velocidade, mantendo a boa performance entre os servidores. - SDS - Shared Disk Server
É um servidor secundário que pode trabalhar ativo-ativo ou ativo-passivo que deve ter acesso compartilhado ao mesmo storage de dados, criando assim a alta disponibilidade a nivel de maquina. Trabalha com protocolo multiplexado, portanto não exige rede de alta performance - CLR - Continuous Logical-Log Recovery
É um modo manual de manter um servidor de secundário sem a necessidade de conectividade de rede. Neste método basta ir recuperando os logical-logs da maquina primária na maquina secundária.
Obs.: O recurso de alta disponibilidade ativo-ativo está disponivel apenas a partir da versão 11.50
Replicação de Dados
Desde a versão 7.3 o Informix também possui recursos de replicação de dados entre instancias do informix, chamado Enterprise Replication.
Com o passar dos anos e atualizações o recurso de replicação teve muitas melhoras, muitas delas para atender as necessidades da Cisco, que utiliza o Informix em vários de seus produtos.
Multiplas Instancias
É possível executar mais de uma instancia do Informix na mesma maquina, porém para isso é necessário licenças adicionais
Licenças
O Informix trabalha com a politica de licenças adotada pela IBM, onde há opções de licenças por processador, usuários, quantidade de sessões, etc.
Para mais informações leia o artigo Licenças do Informix
- 2327 leituras





Pesquisa Informix
RE: Pesquisa Informix
Oi Carol,
O preço atual da prova de certificação do Informix está em $200 (dolares).
Você pode encontrar este valor no site da prometric (sem necessidade de se cadastrar). Basta selecionar a empresa como IBM, ir em "Locate a test site", selecionar Brasil e pesquisar pela prova 000-918 / 000-919
Agradecimento
RE: Agradecimento
Olá Julio,
Eu que fico grato pelo seu comentário, sempre é bom saber que estamos ajudando, isso nos da mais incentivo a manter o site atualizado!
Se tiver duvidas, não deixe de perguntar, seja através do meu site ou do fórum do IIUG em português: http://www.iiug.org/forums/iiug-por/
Abraço
César
conhecendo informix
Comentar