![]() |
Bancos de dados
| Linux in Brazil Documentação original e de qualidade em bom português |
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.