Eu tenho uma inserção mysql na consulta de atualização assim
insert into table (col1, col2, col3) values (1,2,'huge blob with 12524 chars') on duplicate key update col3 = 'huge blob with 12524 chars';
- col1, col2 é uma chave composta e possui índice nela.
- Há um total de 91 registros na tabela
- Todos os outros blobs na tabela têm menos de 1000 caracteres
- Se eu der a col3 um valor pequeno, essa consulta será executada instantaneamente
- Se eu der um valor pequeno na parte de inserção, mas um valor grande na parte de atualização, levará 5 segundos para executar
- Se eu der um valor grande na parte de inserção, mas um valor pequeno na segunda parte, ele morrerá com um tempo limite de 1 minuto.
O que poderia estar fazendo com que esta consulta morresse na execução depois de ficar parada por 1 minuto? O que devo olhar?
O que pode estar fazendo com que essa consulta demore tanto para ser executada e morra se o valor do blob for enorme?
Parece que você precisa aumentar o tamanho dos seus pacotes MySQL
De acordo com a página 99 de "Understanding MySQL Internals" (ISBN 0-596-00957-7) , aqui estão os parágrafos 1-3 explicando:
Como os Pacotes MySQL podem conter linhas de dados, itens maiores no pacote podem fazer com que muitos pacotes sejam filtrados de entrada e saída para evitar que blocos inteiros de dados relacionados se dividam durante o processamento. Isso pode ser um assassino silencioso de conexões de banco de dados sem motivo aparente. Na verdade, escrevi um post sobre como isso pode afetar certos mysqldumps.
Tente aumentar o max_allowed_packet (256M) usando o seguinte comando: