ERRO COM DAPPER + MYSQL

NOWLIGHTS 19/06/2023 16:46:01
#501529
Estou recebendo um erro incomum utilizando Dapper + MySQL.

Tento fazer uma busca, utilizando filtros, e uma tabela com mais de 1milhão de registros, funcinava perfeitamente, mas começou a me gerar erros deveras estranho, como por exemplo:

  SocketException: Uma tentativa de conexão falhou porque o componente conectado não respondeu
corretamente após um período de tempo ou a conexão estabelecida falhou
porque o host conectado não respondeu.
System.Net.Sockets.NetworkStream.Read(Span buffer)

IOException: Unable to read data from the transport connection: Uma tentativa de conexão falhou porque o componente conectado não respondeu
corretamente após um período de tempo ou a conexão estabelecida falhou
porque o host conectado não respondeu..
System.Net.Sockets.NetworkStream.Read(Span buffer)

MySqlException: Reading from the stream has failed.
MySql.Data.MySqlClient.MySqlStream.LoadPacket()

MySqlException: Fatal error encountered during data read.
MySql.Data.MySqlClient.MySqlDataReader.Read()


Alguem sabe o que pode ser?
WEBMASTER 19/06/2023 18:39:35
#501530
Xiiiii....
Tá com cara que nosso amigo grátis não deu conta do recado e está sofrendo para devolver a resposta.
Provavelmente se você fizer um teste fatiando a base de dados, tudo funcionará perfeitamente (como era antes).

Soluções ?
Bom, tem várias, mas acho que para começar uma limpeza no banco (se for possível) e uma indexação talvez ajude.
Outra alternativa, botar a mão no bolso e talvez investir em máquina (+memoria + cpu)
GUIMORAES 20/06/2023 10:47:05
#501531
Resposta escolhida
São vários fatores que podem estar causando esse retorno, mas eu daria uma atenção especial para os itens a seguir.

Como estão os índices da tabela?
Você pode rodar o comando
optimize table "nome da tabela"
para otimizar a tabela.

Tenho uma tabela com mais de 5 milhões de registros, no mysql, e consigo fazer as consultas normalmente. É claro, não vou trazer mais de 1000 registros em uma consulta, sempre limito o select e faço uma paginação para apresentar esses dados ao usuário.
Mesmo que eu utilize esses dados para um processamento (geração de um arquivo por exemplo), utilizo paginação para obter os dados, assim não gero uma sobrecarga no banco.
WEBMASTER 20/06/2023 17:37:14
#501532
Eu lembro de ter um script que fazia isso e achei aqui...

  
DELIMITER //

CREATE PROCEDURE otimizar_tabelas()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql = CONCAT('OPTIMIZE TABLE ', tableName);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;

CLOSE cur;
END//
DELIMITER ;


Era so chamar com
CALL otimizar_tabelas();

NOWLIGHTS 20/06/2023 19:17:09
#501533
Alterado em 20/06/2023 19:17:42
Citação:

Xiiiii....
Tá com cara que nosso amigo grátis não deu conta do recado e está sofrendo para devolver a resposta.
Outra alternativa, botar a mão no bolso e talvez investir em máquina (+memoria + cpu)


O estranho é que eu monitoro o servidor com o Painel de Monitoramento, com ponteiros da memória e % de uso do processador, processador com 0% de uso, ao buscar, vai para 50% +-, memória não passa de 65~70%


Citação:

Você pode rodar o comando
optimize table "nome da tabela"


utilizei, inclusive o script fornecido pelo WebMaster, mas tive o mesmo resultado.


Citação:

Tenho uma tabela com mais de 5 milhões de registros, no mysql, e consigo fazer as consultas normalmente. É claro, não vou trazer mais de 1000 registros em uma consulta, sempre limito o select e faço uma paginação para apresentar esses dados ao usuário.


Eu sempre limito e 5.000 registros para exibir na tela, o problema é na hora de gerar um Excel desses dados, ai é que ta o problema, o limite por arquivo é de 1 milhão, mas de acordo com os filtros, é para retornar uns 400 mil registros no arquivo excel +-
WEBMASTER 22/06/2023 18:07:07
#501538
Hmmm

Agora melhorou, então o cenário é de exportação massiva de dados.
Bom, nesse caso não tem alguma ferramenta 'pronta' que seja melhor para lidar com exportação que te ajude ?
Eu por exemplo tinha cenários no passado (distante) onde o usuário recebia planilhas de +1Milhão de linhas.
Depois de combinarmos o jogo, eu dividi para conquistar, no caso dele, por assunto/região o que fez esse 1M vira pequenas partes de 100mil
Eu acho que você pode propor formas de exportar usando processos batch que não fiquem segurando o usuário online, e mesmo estes processos serem dumps de partes do todo (inclusive rodando em paralelo se a máquina aguentar), assim você poderia dividir para conquistar
NOWLIGHTS 26/06/2023 08:48:31
#501540
Percebi que após ter aplicado Indices nas tabelas, comecei a ter esses problemas... pode ter algo relacionado?
NOWLIGHTS 26/06/2023 17:01:15
#501542
Galera, resolvi, era realmente b.o de indeces, no caso não coloquei nas colunas certas rsrsrs (e tava dando timeout e o servidor nao tava aguentando!?)
NOWLIGHTS 02/07/2023 11:33:35
#501559
x
Tópico encerrado , respostas não são mais permitidas