Meu aplicativo é muito intensivo em banco de dados. Atualmente, estou executando o MySQL 5.5.19 e usando o MyISAM, mas estou migrando para o InnoDB. O único problema que resta é o desempenho da soma de verificação.
Meu aplicativo faz cerca de 500-1000 CHECKSUM TABLE
instruções por segundo nos horários de pico, porque a GUI do cliente está pesquisando constantemente o banco de dados em busca de alterações (é um sistema de monitoramento, portanto deve ser muito responsivo e rápido).
Com o MyISAM, existem somas de verificação ativas que são pré-calculadas na modificação da tabela e são MUITO rápidas. No entanto, não existe isso no InnoDB. Então, CHECKSUM TABLE
é MUITO lento.
Eu esperava poder verificar o horário da última atualização da tabela. Infelizmente, isso também não está disponível no InnoDB. Estou preso agora, porque os testes mostraram que o desempenho do aplicativo cai drasticamente.
Há simplesmente muitas linhas de código que atualizam as tabelas, portanto, implementar a lógica no aplicativo para registrar alterações na tabela está fora de questão.
Existe algum método rápido para detectar alterações nas tabelas do InnoDB?
fonte
Eu acho que encontrei a solução. Por algum tempo, eu estava olhando o Percona Server para substituir meus servidores MySQL, e agora acho que há uma boa razão para isso.
O servidor Percona apresenta muitas novas tabelas de INFORMAÇÕES_SCHEMA como INNODB_TABLE_STATS, que não estão disponíveis no servidor MySQL padrão. Quando você faz:
Você obtém uma contagem real de linhas e um contador. A documentação oficial diz o seguinte sobre este campo:
Portanto, esse contador é agrupado de vez em quando, mas você pode fazer uma soma de verificação do número de linhas e do contador e, a cada modificação da tabela, obtém uma soma de verificação exclusiva. Por exemplo:
Eu iria atualizar meus servidores para o servidor Percona de qualquer maneira, então esse limite não é um problema para mim. Gerenciar centenas de gatilhos e adicionar campos a tabelas é um grande problema para este aplicativo, porque é muito tarde no desenvolvimento.
Esta é a função PHP que criei para garantir que as tabelas possam ser somadas de verificação, independentemente do mecanismo e servidor usado:
Você pode usá-lo assim:
Espero que isso economize alguns problemas para outras pessoas com o mesmo problema.
fonte
Você deve atualizar para o Mysql v5.6 + nessa versão O innodb também possui suporte para a tabela de soma de verificação. http://dev.mysql.com/doc/refman/5.6/en/checksum-table.html
caso contrário, a solução ideal seria se seu cliente não estivesse pesquisando constantemente os resultados, mas em vez disso, você enviaria dados novos e alterados quando e se estivessem disponíveis. Seria mais rápido e menos carga estaria no servidor. Se você estiver usando o GUI baseado na Web, consulte o APE http://ape-project.org/ ou outros projetos semelhantes.
fonte
Se você estiver adicionando principalmente a uma tabela, poderá conectar-se a AUTO_INCREMENT como uma medida da atualidade.
Mas eu preferiria me referir a uma fonte do outro lado como um contador no Memcached, que você aumentará toda vez que alterar algo no banco de dados.
fonte
Você pode tentar fazer o seguinte:
Isso retorna um número que aumenta a cada atualização da tabela, mantendo o controle permitirá detectar alterações.
Nota importante: o valor é alterado imediatamente após um UPDATE, não após COMMIT. Portanto, talvez você não veja as alterações se as modificações foram feitas dentro de outra transação que não foi concluída.
fonte
Esta resposta não tem nada a ver com versões ou tipos de banco de dados mysql, eu queria saber se as instruções de atualização estavam fazendo alterações E fazer isso no meu código php.
Criou uma tabela fictícia com um registro e um campo que gostaria de consultar para obter o valor do current_timestamp do mysql.
Na tabela de dados que está sendo atualizada, adicionou um campo de carimbo de data e hora e usou a opção mysql "ON UPDATE CURRENT_TIMESTAMP"
Comparado # 1 e # 2
Isso não funcionará 100% do tempo, mas para o meu aplicativo era uma solução simples e ótima. Espero que isso ajude alguém
fonte