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

09/04/2009

0

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
Arlei Junior

Arlei Junior

Responder

Posts

09/04/2009

Pedro Almeida

O Mysql é o mais rápido na versão 3.23, mais isso não se repeta na versão 4x onde foram incluídas regras de integridade referencial. Se eu fosse desenvolver um sistema hoje eu ainda utilizaria ou Postgres ou Firebird (o Oracle é caro!) porque oque eu já ouvi dizer de tabela estourada no Mysql não é brincadeira!!!!!
Responder

09/04/2009

Marcos Pereira

[quote="volnei"]O Mysql é o mais rápido na versão 3.23, mais isso não se repeta na versão 4x onde foram incluídas regras de integridade referencial. Se eu fosse desenvolver um sistema hoje eu ainda utilizaria ou Postgres ou Firebird (o Oracle é caro!) porque oque eu já ouvi dizer de tabela estourada no Mysql não é brincadeira!!!!!
Eu tive que fazer um repair table numa mesma table duas vezes semana passada. Quantidade de registros? Menos de 100. Sobre os testes, eu gostaria de ver os codigos. Muita coisa influencia num teste desse, configurações do banco, maneira de se fazer a conexão, driver usado. Alem disso, creio que vc usou o System.currentTimeMillis() ao invés de um profile. valeuz...
Responder

09/04/2009

William A

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 da 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
Responder

09/04/2009

Arlei Junior

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="William Silva"]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 da 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
Responder

04/02/2014

Adilson Ferreira

[quote="jack_-_ganzha"][quote="volnei"]O Mysql é o mais rápido na versão 3.23, mais isso não se repeta na versão 4x onde foram incluídas regras de integridade referencial. Se eu fosse desenvolver um sistema hoje eu ainda utilizaria ou Postgres ou Firebird (o Oracle é caro!) porque oque eu já ouvi dizer de tabela estourada no Mysql não é brincadeira!!!!!
Eu tive que fazer um repair table numa mesma table duas vezes semana passada. Quantidade de registros? Menos de 100. Sobre os testes, eu gostaria de ver os codigos. Muita coisa influencia num teste desse, configurações do banco, maneira de se fazer a conexão, driver usado. Alem disso, creio que vc usou o System.currentTimeMillis() ao invés de um profile. valeuz...
Olá, estou com um problema no desenvolvimento de uma aplicação, quero medir o tempo de gravação, consulta, alteração e exclusão. Alguém me sugere algo?
Responder

04/02/2014

Pedro Almeida

[quote="adilsinho07"][quote="jack_-_ganzha"][quote="volnei"]O Mysql é o mais rápido na versão 3.23, mais isso não se repeta na versão 4x onde foram incluídas regras de integridade referencial. Se eu fosse desenvolver um sistema hoje eu ainda utilizaria ou Postgres ou Firebird (o Oracle é caro!) porque oque eu já ouvi dizer de tabela estourada no Mysql não é brincadeira!!!!!
Eu tive que fazer um repair table numa mesma table duas vezes semana passada. Quantidade de registros? Menos de 100. Sobre os testes, eu gostaria de ver os codigos. Muita coisa influencia num teste desse, configurações do banco, maneira de se fazer a conexão, driver usado. Alem disso, creio que vc usou o System.currentTimeMillis() ao invés de um profile. valeuz...
Olá, estou com um problema no desenvolvimento de uma aplicação, quero medir o tempo de gravação, consulta, alteração e exclusão. Alguém me sugere algo? Este tópico é de 2009. Muito antigo, ninguém ira responder aqui.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar