Disparador de deadlock no cluster do MariaDB Galera

2

Eu posso disparar um deadlock em nosso cluster Galera (teste) ao atualizar uma linha com os mesmos dados.

INSERT INTO test (id, val) VALUES (1, 42), (2, 47);
-- Query OK, 2 rows affected (0.01 sec)
-- Records: 2  Duplicates: 0  Warnings: 0

A atualização de um valor para um valor diferente não resulta em erro:

UPDATE test SET val=43 WHERE id=1;
-- Query OK, 1 row affected (0.00 sec)
-- Rows matched: 1  Changed: 1  Warnings: 0

E quando você define o mesmo valor:

UPDATE test SET val=47 WHERE id=2;
-- ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

Parece ser uma espécie de aviso incorretamente retransmitido (de /var/log/mysql ):

140106 13:52:04 [Warning] WSREP: SQL statement was ineffective, THD: 12, buf: 103
QUERY: UPDATE test SET val=47 WHERE id=2
 => Skipping replication
140106 13:52:04 [Warning] WSREP: SQL statement was ineffective, THD: 12, buf: 103
QUERY: UPDATE test SET val=47 WHERE id=2
 => Skipping replication

Nota: a tabela é criada como

CREATE TABLE IF NOT EXISTS 'test' (
      'id' int(3) NOT NULL PRIMARY KEY,
      'val' int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
    
por Gert 06.01.2014 / 13:56

1 resposta

4

Se o seu formato de log binário no servidor for "STATEMENT" (Verificar por SELECT @@ binlog_format;) Você deve reiniciar o servidor com --binlog-format = row e tentar novamente suas consultas. Normalmente isso resolveria seu problema!

Fonte: link

    
por 06.01.2014 / 14:07