Este texto foi originalmente publicado como um post na lista do Postgresql, e seu autor é Mark Kirkwood (markir@hnz.co.nz). Esta tradução foi feita com exclusividade para Linux in Brazil. Comentários do tradutor serão marcados em itálico e entre colchetes. Você pode ler o texto original em http://www.postgresql.org/mhonarc/pgsql-general/1999-11/msg00227.html.
Este texto mostra os resultados da avaliação de 4 bancos de dados. Estou postando para esta lista porque acredito que o Postgresql se saiu bastante bem.
Os bancos avaliados foram o Oracle, Informix, Mysql e Postgresql.
O foco foi fixado nas características e na performance.
Foram utilizados dois HP Vectra VE 7, cada um com 160M de RAM, um HD de 3.2G e um HD de 13G, ambos Quantum IDE. O sistema operacional foi o Red Hat 6.0, sem alterações no kernel.
O MySQL foi obtido em formato RPM e foi incrivelmente fácil de instalar. O processo de instalação criou e iniciou uma base de dados. A versão foi a 3.22.27. A documentação estava incluída, e é boa.
A instalação do Postgresql foi similarmente elementar, e também terminou com uma base de dados criada e iniciada. O produto acompanha a versão de Linux utilizada, e estava em formato RPM. A versão foi a 6.5.2. A documentação estava incluída, e é muito boa.
O Informix foi mais misterioso para instalar. Ele foi obtido em formato RPM e instalado; entretanto, isto gerou apenas um outro instalador, a partir do qual teve que ser gerado o processo real de instalação. Em seguida, foi necessário adivinhar o próximo passo - o instalador não cria uma base de dados. Usando uma parte da documentação (não incluída), foi descoberto como criar e configurar uma base. A versão foi a 7.30 (é uma versão antiga, mas é a única fornecida para a plataforma Linux. A corrente é a 9.x). A documentação não está inclusa, mas é fornecida no site da Informix - e é boa.
O Oracle foi difícil de julgar, pois o autor frequentemente o instala. De qualquer forma, ao tentar agir como um novo usuário, notou-se que ele seria muito difícil de instalar. Ele não vem em formato RPM, e está disponível para download no site da Oracle. A pouca documentação incluída é suficiente apenas para permitir que o usuário descubra como iniciar o programa de instalação. Este programa é um assistente rudimentar que exibe perguntas e apresenta listas de componentes para escolher... Novos usuários se sentiriam confusos. O instalador pode criar uma base de dados durante a instalação. A versão utilizada foi a 8.0.5 (ligeiramente ultrapassada - a 8.1.5 é a corrente, mas com bugs, a 8.0.5 é a última versão estável disponível para Linux). A documentação não está inclusa, mas pode ser obtida no site da Oracle, e é boa.
Banco | Custo | Transações | Lock de linha | Constraints | Program. | Senhas | Failsafe | Hotback |
Mysql | 0/3000 | Não | Não | Não | Parcial | Sim | Não | Não |
Postgresql | 0 | Sim | Sim | Parcial | Sim | Sim | Sim | Não |
Oracle | 3200 | Sim | Sim | Sim | Sim | Sim | Sim | Sim |
Informix | 2000 | Sim | Não | Sim | Sim | Sim | Não | Não |
O custo está expresso em dólares da Nova Zelândia, para uma licença de 10 usuários. A existência de dois preços indica que o produto é cobrado apenas se for redistribuído como parte de outra aplicação. Custos de suporte não estão inclusos.
Commit, rollback, níveis de isolamento
Select de atualização trava apenas as linhas a ser atualizadas, e não bloqueia leituras
Chave primária e chave estrangeira, com capacidade de habilitar/desabilitar ou dropar/adicionar.
Criar triggers, extensões da linguagem SQL
Requer validação de usuário e senha
Após excluir 100 de 100000 linhas, realizar o commit, desligar o sistema sem shutdown, e após religar devem haver as 999900 linhas corretas.
Verifica se é possível realizar um backup consistente da base de dados enquanto ela está no ar e transações estiverem sendo efetuadas.
Banco | Bulk load 1M | Sumarizar 3% de 3M | Sumarizar 0.3% de 3M - pesquisa simples | Sumarizar 0.3% de 3M - pesquisa complexa | |
MySQL | 20 | 14 | 90 | 57 | |
Postgresql | 420 | 16 | 4 | 7 | |
Oracle | 65 | 5 | 3 | 3 | |
Informix | 170 | 8 | 5 | 6 |
[Os tempos estão expressos em segundos, e maiores detalhes sobre os testes podem ser obtidos consultando o site do texto original]
Tempos (em seg.)
Banco |
Criar 10K |
Criar 1M |
Query 1 de 10K |
Query 4 de 1M |
Query Sumário de 4 de 1M |
MySQL | 7 | 891 | 0 | 0 | 1 |
Postgresql | 21 | 4430 | 0 | 0 | 2 |
Oracle | 31 | 3694 | 0 | 0 | 2 |
Informix |
| - | 0 | 0 | 10 |
Transações por minuto
Banco | Tpm 1 sessão | Tpm 2 sessões | Tpm 4 sessões | Tpm 8 sessões |
Mysql | 59/58 | 59/115 | 59/229 | 58/425 |
Postgresql | 48 | 90 | 169 | 233 |
Oracle | 55 | 108 | 180 | 291 |
Informix |
| - |
|
Notas:
Infelizmente não havia nenhum SDK para o Informix disponível, e por isto não há resultados para alguns dos testes.
Criar 10K: tempo necessário para uma aplicação PHP inserir 10.000 linhas, uma a uma.
Criar 1M: tempo necessário para uma aplicação PHP inserir 1.000.000 de linhas, uma a uma.
Query 1: 0 segundos significa que não houve nenhum delay mensurável. Indica o número de segundos necessário para acessar 1 linha localizada em 70% da tabela. Pode utilizar índices.
Query 4: Tempo necessário para acessar 4 linhas de detalhe para a linha do teste anterior. Pode utilizar índices.
Query Sumário: tempo para disponibilizar uma soma e contagem de 5% de 1.000.000 linhas, através de um join de 2 tabelas. Pode utilizar índices.
TPM: número de transações por minuto para n sessões, através de um cliente leve em Perl (DBI). Os dois resultados do SQL referem-se a dois esquemas diferentes de locking.
O Oracle claramente tem mais recursos, seguido pelo postgresql.
As características de fail safe, transações e segurança são vistas como essenciais, e o travamento de linha como altamente desejável. Por estes critérios, apenas o Oracle e o Postgresql seriam aprovados.
Inicialmente o Postgresql não forçava a entrada de senhas, e portanto não era seguro, mas descobriu-se que o acesso à base é configurado desta forma durante a instalação, podendo ser mudado posteriormente.
Deve-se notar que o Oracle precisou de um patch para tornar-se fail safe, e que isto não estava claro no website oficial. Portanto, deve-se considerar que talvez o Informix e o Mysql talvez possam ser similarmente alterados.
Repetidos testes com o lock de página do Informix demonstraram que os leitores também eram bloqueados. Isto foi considerado extremamente indesejável.
A ausência de transações do Mysql foi o seu fim [embora existam muitas aplicações, como por exemplo o armazenamento de conteúdo dinâmico para websites, que não exijam transações e se beneficiem sobremaneira do ganho de performance obtido com a sua ausência], e a complexidade de desfazer programaticamente uma operação com múltiplas tabelas foi vista como proibitiva. Notou-se que a lista de futuras melhorias do Mysql inclui a presença de operações atômicas, que são pseudo-transações.
Como conclusão, o Oracle e o Postgresql emergem como líderes na área de recursos.
Inicialmente o postgresql recusou-se a usar índices para auxiliar as queries. Um mail para um membro da equipe de desenvolvimento relacionou isso a uma incomum intolerância com relação aos tipos das constantes usadas na cláusula where.
O Informix teve problemas com a query de sumário, não indo a menos de 10s. Entretanto seu desempenho parece normal para as querys de 10.000 e 1.000.000 linhas.
O Mysql demonstra a sobrecarga associada a transações, apresentando as maiores velocidades em termos absolutos, sendo geralmente de 4 a 5 vezes mais rápido do que qualquer um dos oponentes.
O Postgresql foi em geral 20% mais lento que o Oracle.
O teste de transações em múltiplas sessões é muito interessante. A idéia era imitar uma operação bancária onde haja necessidade de interação com o usuário. Claramente o Mysql com seus locks em nível de tabela não apresenta escalabilidade suficiente. Entretanto ele possui locks de aplicações que são nomeáveis e podem imitar os locks de linha - desde que todos os acessos utilizem este recurso. Quando se usa este estilo de lock, a performance muda drasticamente.
Assim, o Mysql é o mais rápido, e mais escalável se for possível usar locks de aplicação. O Oracle e o Postgresql são similares em escalabilidade, mas o Postgresql sente a carga um pouco antes do Oracle.
O Mysql e o Oracle têm uma aplicação de bulk load muito rápida. A do Informix é razoável. O Postgresql é notavelmente mais lento.
O Mysql teve performance extremamente pobre em queries tipo estrela. O Oracle e o Informix foram muito bem. O Postgresql foi muito bem em todas menos a primeira - ironicamente, a mais simples de todas.
O Oracle e o Postgresql experimentam um período de baixa performance imediatamente após o bulk load de uma tabela - isto refere-se a um tempo de análise dos dados.
Como conclusão para esta seção, o Oracle e o Informix são ambos muito bons. O Postgresql é bom mas fica prejudicado por seu lento bulk load e sort de grandes massas de dados. O Mysql adiciona os dados rapidamente mas é lento para acessá-los depois.
O Informix tem boa performance, mas seu esquema de locking impede seu uso sério em aplicações online. O Oracle tem bom desempenho. A ausência de transações do Mysql estaria ok para aplicações de datawarehousing, mas ele não consegue fazer pesquisas em estrela. O Postgresql é 20% mais lento que o Oracle, exceto para bulk loads e sorts de grandes massas de dados. Isto significa que ele pode ser usado para aplicações online e para datawarehousing, desde que você se conforme em esperar um pouco mais de tempo durante grandes entradas de dados e grandes pesquisas de sumário.
Não sou propriamente um expert em bancos de dados, embora muitas vezes interaja com eles. Mas ao ver as críticas do autor do artigo ao processo de instalação do Oracle, resolvi consultar a Conectiva, que distribui um demo do Oracle junto com alguns de seus populares produtos, para saber em que condições esse demo era fornecido. A resposta foi como imaginado: o autor do artigo está correto, e se você não tem um bom conhecimento de bancos de dados (e do processo de instalação do Oracle), certifique-se de procurar o máximo de documentação antes de iniciar a instalação, que realmente é complexa.
Veja as respostas do Jorge Godoy e do Rodrigo Parra Novo, ambos da Conectiva:
O Oracle que acompanha as distribuições da conectiva vem em formato rpm?
Rodrigo - Não. O Oracle está em formato .tar.bz2 no CL. E por sinal o arquivo é um instalador, que é categorizado pelos próprios desenvolvedores como "feito por hackers para hackers" ;)
Godoy - O Oracle que está no terceiro CD do CL 4.0 _NÃO_ vem em RPM. Ele está disponível em tar.bz2. Isso, então, irá solicitar interação por parte do usuário. A documentação de instalação está em um arquivo README ou algo do gênero...
Quais as edições de sua distribuição vêm acompanhadas pelo demo do Oracle?
Rodrigo - Vejamos se a minha memória não me falha:
E quanto aos outros sgbds citados? Me parece que voces distribuem o mysql e o postgresql, mas não o informix - isto está correto?
Rodrigo - Não. Incluimos o Informix no CD 3 do CL, além de vários outros como OpenBASE, Interbase, Oracle e outros que eu não me lembro :)
Perguntas sobre instalação de gerenciadores de bancos de dados são comuns no nosso fórum, e em geral são respondidas através da indicação de literatura adicional. Se você pensa em instalar um dos SGBDs citados neste artigo, comece pelos links a seguir:
O PostgreSQL é um gerenciador de bancos de dados relacional e orientado a objetos (ORDBMS) derivado do Postgres. Ao mesmo tempo em que mantém o poderoso modelo de dados do Postgres, o PostgreSQL substitui a linguagem de consulta PostQuel pela mais popular SQL, com extensões próprias.
O MySQL é um servidor de base de dados baseado na linguagem de consulta SQL, que é a mais popular e difundida linguagem de consulta a bancos de dados no mundo. Ele é multiusuário, multi-thread, e seus principais objetivos são a velocidade, robustez e facilidade de uso.
O Oracle é um gerenciador de bancos de dados distribuído comercialmente, de alta performance e estritamente comercial. Sua versão para Linux pode ser obtida na internet e testada sem o pagamento de taxas, mas a maior parte dos seus usos práticos requer o pagamento do registro.
O Informix é outro gerenciador de bancos de dados comercial, e foi um dos primeiros SGBDs "tradicionais" a ser portado para o ambiente Linux.
O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.