1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Aplicação lenta por conta da consulta com o banco de dados mysql

Galera, eu tenho um banco de dados mysql no amazon rds e estou tendo problemas com a lentidão com que são atualizadas as informações. Na tela inicial do software faço apenas 3 conexões com o banco de dados mas leva em torno de 10 segundos para passar as informações para aplicativo. Gostaria de saber se algum de vocês tem alguma ideia do que pode estar ocorrendo.

segue os três métodos os quais uso nas 3 classes diferentes

public void cont(){

        Connection con = null;
            try{
                Class.forName(driver);
                con = getConnection();


                nmProjCont = projCont(con);
                nmClientCont = clientCont(con);
                nmStageCont = stageCont(con);            
                nmAtivCont = ativsCont(con);


                rs.close();
                stmt.close();
                con.close();

            }catch(SQLException e){
                System.out.println(e.getMessage());
            }catch(ClassNotFoundException e){
                System.out.println(e.getMessage());
            }

    }



public void contProj(){
        String funcionario;
        Connection con;
        int i = 0;
        try{
            Class.forName(driver);
            con = getConnection();
            reader = new BufferedReader(new FileReader("funcionario.txt"));
            funcionario = reader.readLine();
            String sql = "select count(e.nm_etapa) as nm_etapa, count(p.nm_projeto) as nm_projeto, count(p.nm_cliente) as nm_cliente from etapa e inner join projeto p on e.idProj = p.idProj where e.nm_funcionario = '"+funcionario+"' and e.concluido = 0";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();
            rs.next();
            stageCont = rs.getInt("nm_etapa");
            projCont = rs.getInt("nm_projeto");
            clientCont = rs.getInt("nm_cliente");

            sql = "select e.nm_etapa, p.nm_projeto, p.nm_cliente, p.idProj, e.idEtapa from etapa e inner join projeto p on e.idProj = p.idProj where e.nm_funcionario = '"+funcionario+"' and e.concluido = 0 order by e.prioridade desc";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            stageName = new String [stageCont];
            projName = new String [projCont];
            clientName = new String [clientCont];
            idProj = new int[projCont];
            idEtapa = new int[stageCont];

            while(rs.next()){

                stageName[i] = rs.getString("nm_etapa");
                projName[i] = rs.getString("nm_projeto");
                clientName[i] = rs.getString("nm_cliente");
                idProj[i] = rs.getInt("idProj");
                idEtapa[i] = rs.getInt("idEtapa");
                i++;

            }





            rs.close();
            stmt.close();
            con.close();

        }catch(ClassNotFoundException e){
            System.out.println(e.getMessage());
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }catch(IOException e){
            System.out.println(e.getMessage());
        }



    }


public void dayView(){

        Connection con = null;

        try{
            Class.forName(driver);
            con = getConnection();

            String sql = "select count(*) as numAtiv from  atividade where format_date(retomada,'%d/%m/%Y' ) = format_date(getDate(),'%d/%m/%Y')";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();
            rs.next();

            contAtiv = rs.getInt("numAtiv");


            int i = 0;

            atividade = new String[contAtiv];
            ativStart = new String[contAtiv];
            ativEnd = new String[contAtiv];
            ativReturn = new String[contAtiv];
            ativTotalTime = new String[contAtiv];

            sql = "select descr, format_date(inicio,'%d/%m/%Y') as 'inicio', format_date(retomada,'%d/%m/%Y') as 'retomada', format_date(fim,'%d/%m/%Y') as 'fim', format_date(tempo_total, '%d/%m/%Y') as 'tempo_total' from  atividade where format_date(retomada,'%d/%m/%Y') = format_date(getDate(),'%d/%m/%Y') order by retomada asc";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            while(rs.next()){

                atividade[i] = rs.getString("descr");
                ativStart[i] = rs.getString("inicio");
                ativEnd[i] = rs.getString("fim");
                ativReturn[i] = rs.getString("retomada");
                ativTotalTime[i] = rs.getString("tempo_total");
                i++;

            }





            rs.close();
            stmt.close();
            con.close();

        }catch(ClassNotFoundException e){

            System.out.println(e.getMessage());
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }


    }
  • porque eu preciso atualizar os dados em 3 locais diferentes. Fica um pouco complicado reduzí-las a 1.

    Ouma Shu   27 de fev de 2015
  • Poderia postar o código para gente analisar?

    Denis Soares Moreira   27 de fev de 2015
  • Ao invés de usar 3 conexões (e 3 comandos de gravação, por exemplo), veja se não vale a pena utilizar os mecanismos de replicação do próprio banco. Assim, você atualiza em uma base, e o próprio banco aplica a atualização nas demais

    TerraSkilll   27 de fev de 2015
  • pelo que eu entendi faz 3 consultas na tela, agora tem que validar: o volume de dados destas consultas, se o condicional da consulta incide em colunas devidamente indexadas e seria muito bom se você madasse as queries a modelagem ou coisa assim pra facilitar a ajuda

    marco_aurelioo   27 de fev de 2015
  • Eu formulei da melhor forma que pude. Ainda sou um bocado inexperiente. Eu vou tentar as sugestões agora, e já já eu dou um retorno

    Ouma Shu   27 de fev de 2015
Mostrar todos os 7 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags mysql java ou faça a sua própria pergunta.