Pessoal, estou com um problema sério…
Olha só… possuo uma aplicação que várias máquinas realizam inserção no BD a todo momento, tipo a cada 1 segundo tem pelo menos umas 10 máquinas realizando um Insert no BD;
Paralelo a isso tenho 3 máquinas distintas que fazem a consulta (Select) desses dados no BD e apresenta em forma de Dashboard (Jafreechart) nas TVs, tudo em tempo real, ou seja, dentro da aplicação Swing possuo 24 Métodos com os Selects que rodam dentro de um SwingWorker que por sua vez roda dentro de um ActionListener a cada 2 segundos, ex.:
ActionListener
SwingWorker
Métodos(Select1)
Métodos(Select2)
.
Métodos(Select24)
SwingWorker
ActionListener
No momento que abro o Dashboard o servidor fica totalmente lento a ponto de não conseguir realizar nenhuma operação em nenhuma máquina cliente, percebi que isso começou depois que implementei o SwingWorker para rodar as consultas em Bakground.
Tudo roda em aplicação Swing (Java desktop).
Máquina Servidor e máquinas Clientes estão tudo dentro de uma rede interna.
Por favor, poderiam verificar se há algo errado, abaixo códigos:
Quando inicio o formulário Dashboard chamo o método principal AtualizaDados() que fica rodando a cada 2 segundos populando as informações na tela:
//Loop de tempo para atualizar os dados principais da aplicação
private void AtualizaDados() {//Chamo este metodo ao iniciar o formulário Dashboard
ActionListener action = new ActionListener() {//Loop para rodar os métodos a cada 2 seg
public void actionPerformed(ActionEvent e) {
SwingWorker worker = new SwingWorker() {//Roda em background para não travar a tela do usuário
@Override
protected Object doInBackground() throws Exception {
try {
String data = dt.format(new Date());//Fica atualizando a data num Jlabel
txtData.setText(data);//Fica atualizando a data num Jlabel
angulo = angulo + 5;//Aqui fica rotacionando um gráfico de pizza (Jfreechart)
graficosTotalPC();//Select (exemplo abaixo)
graficosEtiq();//Select
Embaladores(txtData.getText());//Select
graficosPE();//Select (exemplo abaixo)
graficosCIL();//Select
graficosOUT();//Select
carregaStatusMesa(btnMesa1, "MESA 001");//Select (exemplo abaixo)
carregaStatusMesa(btnMesa2, "MESA 002");//Select
carregaStatusMesa(btnMesa3, "MESA 003");//Select
carregaStatusMesa(btnMesa4, "MESA 004");//Select
carregaStatusMesa(btnMesa5, "MESA 005");//Select
carregaStatusMesa(btnMesa6, "MESA 006");//Select
carregaStatusMesa(btnMesa7, "MESA 007");//Select
carregaStatusMesa(btnMesa8, "MESA 008");//Select
carregaStatusMesa(btnMesa9, "MESA 009");//Select
carregaStatusMesa(btnMesa10, "MESA 010");//Select
carregaStatusMesa(btnMesa11, "MESA 011");//Select
carregaStatusMesa(btnMesa12, "MESA 012");//Select
carregaStatusMesa(btnMesa13, "MESA 013");//Select
carregaStatusMesa(btnMesa14, "MESA 014");//Select
carregaPrioridadesPE();//Select
carregaPrioridadesKitCilindro();//Select
carregaPrioridadesKitOutros();//Select
carregaMinutoQualidade();//Select
} catch (SQLException ex) {
Logger.getLogger(formMonitorTV.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
};
worker.execute();//Executa em Bakground, popula os dados na tela
}
};
this.timerDados = new Timer(velocidadeDados, action);//A velocidade do Timer é 2000 (2 segundos)
this.timerDados.start();//Faz loop de tudo isso ai em cima a cada 2 seg
}
Vou colocar aqui o exemplo de 3 consultas realizadas nos métodos acima:
graficosTotalPC()
//Dataset para puxar os rs da table e colocar no gráfico de PIZZA
private PieDataset createDatasetTotalpecas(String criterio1) throws SQLException {
com.mysql.jdbc.Connection conn = Conexao.getConnection();
// Consulta SQL para trazer os rs e alimentar o grafíco
String query = "SELECT "
+ " A.QtdePE, B.QtdeCIL, C.QtdeOUT "
+ " FROM "
+ " (SELECT "
+ " SUM(multiplo) AS QtdePE "
+ " FROM mesaproducao "
+ " WHERE tipo = 'PE' AND bip LIKE '%" + criterio1 + "%') AS A "
+ " INNER JOIN "
+ " (SELECT "
+ " SUM(multiplo) AS QtdeCIL "
+ " FROM mesaproducao "
+ " WHERE tipo = 'KIT Cilindro' AND bip LIKE '%" + criterio1 + "%') AS B "
+ " INNER JOIN "
+ " (SELECT "
+ " SUM(multiplo) AS QtdeOUT "
+ " FROM mesaproducao "
+ " WHERE tipo = 'KIT Outros' AND bip LIKE '%" + criterio1 + "%') AS C";
// Criando java statement
Statement st = conn.createStatement();
// Executando a query, e trazendo o resultset
ResultSet rs = st.executeQuery(query);
// Setando os rs para o gráfico
DefaultPieDataset result = new DefaultPieDataset();
if (rs == null || !rs.first()) {
result.setValue("PE", 0);
result.setValue("KIT Cilindro", 0);
result.setValue("KIT Outros", 0);
} else {
do {
result.setValue("PE", rs.getInt("QtdePE"));
result.setValue("KIT Cilindro", rs.getInt("QtdeCIL"));
result.setValue("KIT Outros", rs.getInt("QtdeOUT"));
} while (rs.next());
}
rs.close();
st.close();
conn.close();
return result;
}
graficosPE()
//Dataset para puxar os rs da table pe e colocar no gráfico de barra
private CategoryDataset createDatasetPEhh(String criterio1, String criterio2) throws SQLException {
com.mysql.jdbc.Connection conn = Conexao.getConnection();
// Consulta SQL para trazer os rs e alimentar o grafíco
String query = "SELECT "
+ " tipo,"
+ " LEFT(bip,10) AS Dia, "
+ " SUBSTRING(bip,12,2) AS Hora,"
+ " SUM(multiplo) AS QtdePE "
+ " FROM mesaproducao"
+ " WHERE tipo = '" + criterio1 + "' AND bip LIKE '%" + criterio2 + "%' "
+ " GROUP BY Hora ";
// Criando java statement
Statement st = conn.createStatement();
// Executando a query, e trazendo o resultset
ResultSet rs = st.executeQuery(query);
// Setando os rs para o gráfico
DefaultCategoryDataset result = new DefaultCategoryDataset();
if (result == null || !rs.first()) {
result.addValue(0, "Dia", "Hora");
} else {
do {
result.addValue(rs.getInt("QtdePE"), rs.getString("Dia"), rs.getString("Hora") + "h");
} while (rs.next());
}
rs.close();
st.close();
conn.close();
return result;
}
carregaStatusMesa(btnMesa1, “MESA 001”)
//Metodo para alterar as cores das mesas
public void carregaStatusMesa(JButton botao, String mesa) {
try {
int condicao = 0;
String material = "";
String descricao = "";
String finalizado = "";
String tipo = "";
Connection conn = Conexao.getConnection();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT *"
+ "FROM mesa "
+ "WHERE mesa = '" + mesa + "' "
+ "ORDER BY cod DESC "
+ "LIMIT 1");
while (rs.next()) {
condicao = rs.getInt("condicao");
material = rs.getString("material");
descricao = rs.getString("descricao");
finalizado = rs.getString("fim");
tipo = rs.getString("tipo");
}
switch (condicao) {
case 0:
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(255, 35, 35));//Vermelho
botao.putClientProperty("Synthetica.background", Color.RED);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Última produção: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "<br>"
+ "<br>"
+ "Finalizado em: "
+ "<br>"
+ finalizado
+ "</html> ");
break;
case 1:
if ("Retrabalho".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(255, 204, 0));//Amarelo
botao.putClientProperty("Synthetica.background", Color.YELLOW);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Retrabalhando: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else if ("Pit stop".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(0, 153, 102));//Verde
botao.putClientProperty("Synthetica.background", Color.GREEN);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Etiquetando: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else if ("Pesado".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(0, 153, 102));//Verde
botao.putClientProperty("Synthetica.background", Color.GREEN);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Produzindo Pesado: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else if ("PE".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(0, 153, 102));//Verde
botao.putClientProperty("Synthetica.background", Color.GREEN);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Produzindo PE: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else if ("KIT Cilindro".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(0, 153, 102));//Verde
botao.putClientProperty("Synthetica.background", Color.GREEN);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Produzindo KIT Cilindro: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else if ("KIT Outros".equals(tipo)) {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(0, 153, 102));//Verde
botao.putClientProperty("Synthetica.background", Color.GREEN);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Produzindo KIT Outros: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
} else {
botao.setEnabled(true);
//botao.setBackground(new java.awt.Color(255, 204, 0));//Amarelo
botao.putClientProperty("Synthetica.background", Color.YELLOW);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Outras atividades: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
}
case 2:
botao.setEnabled(true);
//botao.setBackground(new Color(255, 204, 0));//Amarelo
botao.putClientProperty("Synthetica.background", Color.YELLOW);
botao.putClientProperty("Synthetica.background.alpha", 1.0f);
botao.setToolTipText("<html>"
+ "Em pausa: "
+ "<br>"
+ "<br>"
+ material
+ "<br>"
+ descricao
+ "</html> ");
break;
default:
break;
}
rs.close();
st.close();
conn.close();
} catch (Exception e) {
}
}
Na administração do servidor, na aba “Processos” percebi que tem momento que aparece a seguinte linha, o que seria?
/* mysql-connector-java-5.1.25 ( Revision: ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'