Teste de desempenho: mysql, oracle, firebird 1.5, postgres

Pessoal, gostaria de compartilhar com todos alguns testes que fiz de desempenho.

Para o teste foram realizados 1000 inserções em cada banco de dados 5 vezes consecutivas em uma tabela com 3 campos (1 - autoincremental, 2 - NOME(40 posições), 3 - ABREVIACAO (10 posições).

Tudo isto num mesmo programa, utilizando JAVA+JDBC. Então vamos aos assustadores resultados que obtive: A explicação disto…eu deixo para os mais experts…como eu disse…apenas relacionarei os valores obtidos.

Todos os testes foram feitas na mesma máquina e localmente, um notebook P4 2.4GHz com 512MB DDR SDRAM e HD 60GB 7.200rpm.

OBS: devido ao tempo…apenas testei INSERÇÕES (comando insert).

Os bancos testados foram: Mysql(3.23), Oracle(9.2.0.1), Firebird(1.5), Postgres (Versão Beta for Windows)

Mysql - Inserindo apenas um registro:
320ms
293ms
301ms
290ms
300ms

300,8ms para inserir apenas um registro

Mysql - Inserindo 1000 registros:
681ms
691ms
701ms
731ms
701ms

701ms para inserir 1000 registros

Oracle - Inserindo apenas um registro:
801ms
831ms
841ms
812ms
811ms

819,2ms

Oracle - Inserindo 1000 registros:
5307ms
5598ms
5828ms
5408ms
5378ms

5503,8ms

Firebird - Inserindo apenas um registro:
611ms
440ms
460ms
451ms
460ms

484,4ms

Firebird - Inserindo 1000 registros:
14541ms
13069ms
13790ms
13018ms
13669ms

13671,4ms

Postgres - Inserindo apenas um registro:
300ms
241ms
250ms
301ms
311ms

280,6ms

Postgres - Inserindo 1000 registros:
31425ms
30914ms
30414ms
30614ms
30074ms

30688,2ms

Bem pessoal, em resumo…as diferenças são assustadoras:

Mysql - 1o. lugar…leva menos que um segundo para 1 ou 1000 registros.

Oracle - 2o. lugar…leva menos que 6 segundos para 1000 registros…porém quase 1 segundo para 1 registro

Firebird - 3o. lugar…leva menos que 0.5 segundo para 1 registro e quase 14 segundos para 1000 registros

Postgres - 4o. lugar…leva menos que 0.3 segundo para 1 registro e quase 31 segundos para 1000 registros

Um abraço, a todos.

Arlei

Oi

farnetani, legal seu teste cara… Tu pretende testar outras operações depois???

hehehe, testa como Pravayler depois :slight_smile:

T+

Olá!
Eu já esperava esses dados, porém temos que considerar uma coisa!
Muitos engenheiros não consideram o MySQL como banco de dados e sim apenas gerenciador de dados em arquivos, já que ele tem uma engenharia um pouco diferente…
Ele não tem muitos dos recursos que são usados nos bancos de dados entre eles chaves estranageiras, por exemplo…
Ele se liberta de muitos recursos do SQL padrão apenas para ter em desempenho…
Tenho comigo a história desse banco de dados e explica pq ele foi elaborado…
Vou postá-lo para vcs!

[]'s

Oi

riqueneil, como tu disse, durante muito tempo o MySQL realmente NAO ERA um SGBD completo, mas hoje ele já implementa a garante todas as caracteristicas ACID então isso faz dele um SGBD completo, como qualquer outro do teste aicma

T+

Legal mesmo.

Se não for pedir demais, dá para testar também o HSQLDB em memória e em disco? :grin:

Concordo com a colocação de jeveaux quanto ao mysql, porém, para uma comparação mais justa, seria interessante que os testes fossem feitos comparando mysql com e sem innoDB, pois há um consenso de que este prejudica a performance quando comparado com myisam, que é padrão no mysql e não implementa IR.

Quanto ao HSQLDB, é um bd “transparente”? Tenho um cliente com uma aplicação vb que consegue, usando ansi92, importar dados de qualquer base de dados entre as citadas pelo farnetani. Conseguiria também desse HSQLDB? Ou é uma tecnologia “proprietária” do java?

Por enquanto ainda dão. :sad:

Mas eles tem planos de fazerem conectores para outras linguagens…

Obs: Só lembrando que com Web Services é possivel uma comunicação entre linguagens diferentes com uma relativa facilidade. Só que aí a eficiência é pior ainda…

Cara, sempre botei mó fé no mysql… hehehe eu tbm sempre curti o firebird, mas a galera sempre dizia q a performance dela era um lixo. Bom, ta aí, deixou o Postgres pra trás!

Da hora esse teste, vlw por compartilhar conosco farnetani

Hei! Não fala mal do meu querido Postgres, não!! :lol:

O PG não é o mais eficiente, mas é de longe o mais robusto, reguro e cheio de recursos entre os sgdbs livres. Isso o deixa em uma posição de destaque.

Em nossa área isso aparece toda hora. Eficiência ou robustez? Eficiência ou manutenibilidade? Eficiência de tempo ou de memória? Sempre depende da aplicação…

Isso eh verdade Vinci… creio q seja o o dualismo existencial da computacao hauhauahua… e akela velha tbm: Velocidade x Espaco

Caro Arlei,

Gostaria de você . Deixasse claro alguns itens:

1.1 como foram inseridos os 1000 registros 5 x consecutivas (isso não pode ser considerada uma mostra); usou ? insert into ?.
1.1 ? Como vc. colocou o campo auto increment (= generator ) no Firebird ???;
1.2 - Como vc. conseguiu que as ultimas inserções fossem piores que a primeira ???;
1.3 - Qual o tipo de driver JDBC você usou , o Oracle voa com uma JVM e driver tipo 4 .
1.4 - Qual o tipo de protocolo você usou, apesar de estar localmente tem que configurar TCP/IP + Host etc…
1.5 ? Nos campos da tabela usou ? char ou varchar ?, pois teremos que fazer ? select ?;

Se nós compararmos a consistência e persistênciada estrutura de um verdadeiro ?SGDBR? em relação a um repositório de dados (= banco de dados ) veremos neste universo a assustadora diferença de resposta de ? select campo1, campo2 order by campo1 desc ? em uma base com 30/40 GB ou +++, isso sem contar os Stored procedure e Triggers, pois precisamos inserir, atualizar e excluir itens . Em suma cada ?SGDBR?, possui as suas qualidades, particularidades e superioridades, mais ele não trabalha sozinho depende de nós para criarmos o MER/DER/UML etc., ai sim colocaremos o time em campo para mostrar as nossas qualidades.

Abraços
William Silva


@wsilva@

Caro Arlei,

Gostaria de você . Deixasse claro alguns itens:

1.1 como foram inseridos os 1000 registros 5 x consecutivas (isso não pode ser considerada uma mostra); usou ? insert into ?.
1.1 ? Como vc. colocou o campo auto increment (= generator ) no Firebird ???;
1.2 - Como vc. conseguiu que as ultimas inserções fossem piores que a primeira ???;
1.3 - Qual o tipo de driver JDBC você usou , o Oracle voa com uma JVM e driver tipo 4 .
1.4 - Qual o tipo de protocolo você usou, apesar de estar localmente tem que configurar TCP/IP + Host etc…
1.5 ? Nos campos da tabela usou ? char ou varchar ?, pois teremos que fazer ? select ?;

Se nós compararmos a consistência e persistênciada estrutura de um verdadeiro ?SGDBR? em relação a um repositório de dados (= banco de dados ) veremos neste universo a assustadora diferença de resposta de ? select campo1, campo2 order by campo1 desc ? em uma base com 30/40 GB ou +++, isso sem contar os Stored procedure e Triggers, pois precisamos inserir, atualizar e excluir itens . Em suma cada ?SGDBR?, possui as suas qualidades, particularidades e superioridades, mais ele não trabalha sozinho depende de nós para criarmos o MER/DER/UML etc., ai sim colocaremos o time em campo para mostrar as nossas qualidades.

Abraços
William Silva


@wsilva@

Caro Arlei,

Gostaria de você . Deixasse claro alguns itens:

1.1 como foram inseridos os 1000 registros 5 x consecutivas (isso não pode ser considerada uma mostra); usou ? insert into ?.
1.1 ? Como vc. colocou o campo auto increment (= generator ) no Firebird ???;
1.2 - Como vc. conseguiu que as ultimas inserções fossem piores que a primeira ???;
1.3 - Qual o tipo de driver JDBC você usou , o Oracle voa com uma JVM e driver tipo 4 .
1.4 - Qual o tipo de protocolo você usou, apesar de estar localmente tem que configurar TCP/IP + Host etc…
1.5 ? Nos campos da tabela usou ? char ou varchar ?, pois teremos que fazer ? select ?;

Se nós compararmos a consistência e persistênciada estrutura de um verdadeiro ?SGDBR? em relação a um repositório de dados (= banco de dados ) veremos neste universo a assustadora diferença de resposta de ? select campo1, campo2 order by campo1 desc ? em uma base com 30/40 GB ou +++, isso sem contar os Stored procedure e Triggers, pois precisamos inserir, atualizar e excluir itens . Em suma cada ?SGDBR?, possui as suas qualidades, particularidades e superioridades, mais ele não trabalha sozinho depende de nós para criarmos o MER/DER/UML etc., ai sim colocaremos o time em campo para mostrar as nossas qualidades.

Abraços
William Silva


@wsilva@

Pessoal…isto que postei, foi apenas um teste simples…quero deixar claro que tenho aplicações com quase todos os bancos de dados…com exceção do Oracle (devido ao preço). Então…fiquei curioso…e criei um script simples…idêntico para todos…usando insert into

Quanto ao campo auto increment…utilizei no caso do Firebird o get_id(generator,1)

e para o Oracle utilizei o sequenciador.nextval

para os outros…implementei no próprio sql…(no caso do postgres=apontei o sequence e mysql = autoincrement)

Naturalmente quanto a velocidade discrepante em relação a primeira inserçào…é que na primeira parte insiro apenas 1 registro por vez e na segunda insiro 1000 registros por vez…naturalmente…não sei explicar porque os bancos responderam diferente…pois para registrar apenas um registro no Firebird leva na média 484,4ms e para registrar 1000 registros leva a média de 13617,4ms…então na segunda forma o tempo médio para a inserção de 1 registro foi de 13,61ms…bem mais rápido que na primeira forma…provavelmente algum lance de cache do próprio servidor…etc…

Quanto aos drivers…todos jdbcs atuais…com exceção do Oracle…que tb nao deixa de ser atual: v. 9.2.0.1

Protocolo…tcp/ip…porém…todo acesso local !

Nos campos usei Varchar.

Em breve, farei mais testes…aí postarei para vcs !!!

[quote=“WilliamSilva”]Caro Arlei,

Gostaria de você . Deixasse claro alguns itens:

1.1 como foram inseridos os 1000 registros 5 x consecutivas (isso não pode ser considerada uma mostra); usou ? insert into ?.
1.1 ? Como vc. colocou o campo auto increment (= generator ) no Firebird ???;
1.2 - Como vc. conseguiu que as ultimas inserções fossem piores que a primeira ???;
1.3 - Qual o tipo de driver JDBC você usou , o Oracle voa com uma JVM e driver tipo 4 .
1.4 - Qual o tipo de protocolo você usou, apesar de estar localmente tem que configurar TCP/IP + Host etc…
1.5 ? Nos campos da tabela usou ? char ou varchar ?, pois teremos que fazer ? select ?;

Se nós compararmos a consistência e persistênciada estrutura de um verdadeiro ?SGDBR? em relação a um repositório de dados (= banco de dados ) veremos neste universo a assustadora diferença de resposta de ? select campo1, campo2 order by campo1 desc ? em uma base com 30/40 GB ou +++, isso sem contar os Stored procedure e Triggers, pois precisamos inserir, atualizar e excluir itens . Em suma cada ?SGDBR?, possui as suas qualidades, particularidades e superioridades, mais ele não trabalha sozinho depende de nós para criarmos o MER/DER/UML etc., ai sim colocaremos o time em campo para mostrar as nossas qualidades.

Abraços
William Silva


@wsilva@[/quote]

Gosto da Resposta em Willian Silva :grin:

[color=“darkblue”]Olá pessoal!
Olha só, eu não quis dizer que o MySQL não era um SGBD…
Apenas quis dizer que muitos consideram e ainda tem provas contundentes… :slight_smile:
Mas isso não entra em discussão aqui, deixa esses malucos de engenharia de software pra lá!
Conheço as propriedades ACID e sei q o MySQL as possue… porém isso não quer dizer q ele seja um SGBD conforme foi apresentado para mim… :(…

Blz!!! O importante é que ele funciona e está ajudando muito agente, principalmente à mim que trabalho com isso…

[]'s[/color]