Como se livrar dos problemas do tipo Deadlocks e Lock time out?

17

Eu li vários blogs, tentei pesquisar no Google, mas não encontrei nenhuma satisfação com nenhuma solução. Eu tenho os seguintes problemas:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

Tentei resolver isso aumentando innodb_pool_buffer_sizee wait_timeoutno my.ini, mas não funcionou.

Mudei o mecanismo da minha tabela de cache de Innodb para MyIasm. A questão desapareceu, mas não é uma solução perfeita. O mecanismo da tabela será alterado após uma atualização do drupal. Esse problema não afeta nada no site, mas não quero que isso ocorra.

Alguma solução pessoal?

Sumit Madan
fonte
Você está executando cron periódico? Está sendo concluído com sucesso?
mpdonadio
Sim, o cron está sendo executado com êxito.
Sumit Madan 31/03
O que faz você pensar que o mecanismo da tabela de cache será alterado durante a atualização? Esta não foi a minha experiência.
31414 keithm
Quero dizer, se eu atualizar o drupal, a tabela de cache será alterada de MyIasm para Innodb. Não???
Sumit Madan

Respostas:

16

Leia e siga este post ; assume o InnoDB.

Em particular, consulte a parte que diz para adicionar o seguinte ao arquivo settings.php.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
fonte
No link give, ele está falando apenas para o impasse cache_field. Mas, no meu site, o tempo limite de espera de bloqueio e bloqueio está ocorrendo em todas as tabelas de cache.
Sumit Madan
Ei Mike, obrigado pelo link. Eu verifiquei seu outro post e adicionei isso ao settings.php $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");resolvi meu problema no meu servidor local. Ainda não o verifiquei no servidor ativo. Confirme que não apresentará nenhum problema no futuro se for testado por você? Estou usando o kickstart de comércio.
precisa saber é o seguinte
Eu uso todas as recomendações ao vivo, ouvi relatórios que o drupal.org usa a leitura confirmada. Também não se esqueça de usar a versão mais recente do d7, pois ela também possui uma solução de impasse.
precisa saber é o seguinte
11
Mikeytown2 Pelo que você está dizendo, eu entendi que agora o drupal 7 versões resolveu isso? perguntando sobre isso, como eu ainda tenho o mesmo problema na versão mais recente.
Marko Blazekovic
11
@ MarkoBlazekovic A maioria dos principais problemas com deadlock está resolvida pela metade no D7. Ainda existem alguns problemas de conflito e bloqueio de metadados nas tabelas de cache do banco de dados. Estou trabalhando em um módulo para resolvê-los: drupal.org/project/apdqc . O APDQC do meu teste resolve praticamente todos os problemas de bloqueio de banco de dados em relação às tabelas de cache. Certifique-se de corrigir todos os problemas no relatório de status após a instalação. Observe que o módulo ainda está em desenvolvimento pesado, pois ainda tenho que lançar uma versão não-dev.
mikeytown2