Entendendo a arquitetura do Informix

Versão para impressãoEnviar para amigoVersão PDF

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.

  1. Introdução
  2. Processos / Virtual Processors / Threads
    1. Processos de Sistema Operacional
    2. Virtual Processors / VP
    3. Threads
  3. Memória
  4. Disco
  5. Controle de acesso
  6. Conectividade
  7. Clientes
  8. Transações / Logical Logs
  9. Auditoria
  10. Administração
  11. Backup / Archive
  12. Alta Disponibilidade
  13. Replicação de Dados
  14. Multiplas Instancias
  15. 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:
Processo do SO -> Virtual Processor do Informix -> Threads do Informix

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:

DISCO/STORAGE -> Chunk -> Dbspace -> Banco de dados -> tabelas / indices

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 ).
Portanto tenha sempre em mente:
  • 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

4.714285
Média: 4.7 (14 votos)
Sua avaliação: Nenhum

Pesquisa Informix

Primeiramente quero te agradecer, seu artigo me ajudou bastante, faço curso técnico em Informática e esse é meu primeiro trabalho de TLBD. Eu preciso saber os valores das certificações, encontrei apenas um site onde o acesso é apenas para usuários do Informix. Se puder me ajudar nisso fico muito grata. E mais uma vez obrigada pelos seus artigos me ajudaram bastante.

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

Salve! Obrigado por este artigo, eu estava procurando saber mais sobre o Informix, pois eu trabalho muito com Oracle, e outros DBs Opensource. E o Informix, era, uma caixa preta. E também havia ouvido falar sobre a sua performance, mas enfim, mais uma vez muito grato. [ ]'s Júlio

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

estou grato pelos conhecimentos adquiridos neste site. thanks

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.