Página Inicial do Fórum > Banco de Dados - JDBC / SQL

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



Criar novo tópico   Responder tópico


  1. farnetani
    Posts:93


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    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
    _________________
    JavaFree.org



  1. volnei
    Posts:2212


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    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!!!!!



  1. jack_-_ganzha
    Posts:4191


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    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...
    _________________
    Marcos Silva Pereira

  1. Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    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
    _________________
    JavaFree.org



  1. farnetani
    Posts:93


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    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 !!!


    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


    _________________
    JavaFree.org



  1. adilsinho07
    Posts:3


    Comment Arrow

    Publicado em: 04/02/2014 07:16:19

    jack_-_ganzha
    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?



  1. D3z40
    Posts:1488


    Comment Arrow

    Publicado em: 04/02/2014 20:04:42

    adilsinho07
    jack_-_ganzha
    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.
    _________________
    Para organização do fórum sempre poste suas dúvidas no TÓPICO que mais se encaixa com o real problema da dúvida.

    Por favor, nunca esqueça de editar os códigos de seu post com as tag CODE.



  1. Relacionados

    Erro ao cadastrar dados no banco [RESOLVIDO]
    http://javafree.uol.com.br/topic-893956-Erro-ao-cadastrar-dados-no-banco-RESOLVIDO.html

    [RESOLVIDO] Problema com conexão SQL Server JDBC
    http://javafree.uol.com.br/topic-893936-RESOLVIDO-Problema-com-conexao-SQL-Server-JDBC.html

    error loading driver.java.sql.SQLNon Transient Connection: java.net.ConnectException: Erro ao conectar no servidor 'localhost' porta '1527'. Recebida
    http://javafree.uol.com.br/topic-893887-error-loading-driverjavasqlSQLNon-Transient-Connection-javanetConnectException-Erro-ao-conectar-no-servidor-localhost-porta-1527-Recebida.html

    ERRO Hibernate+PostGres+JSF (Caused by: java.lang.NoClassDefFoundError: Could not initialize class util.BaseDadosTCCutil)
    http://javafree.uol.com.br/topic-893825-ERRO-HibernatePostGresJSF-Caused-by-javalangNoClassDefFoundError-Could-not-initialize-class-utilBaseDadosTCCutil.html

    Não Consegue Acessar O Banco De Dados MySQL Acredito !!!
    http://javafree.uol.com.br/topic-893733-Nao-Consegue-Acessar-O-Banco-De-Dados-MySQL-Acredito.html





Novo tópico   Responder tópico     Índice do forum -> Banco de Dados - JDBC / SQL