Como o MariaDB Trava as Tabelas


Você pode encontrar uma discussão sobre diferentes métodos de bloqueios no apêndice. Leia Seção E.4, "Métodos de Lock".

Todos os bloqueios no MariaDB são livres de deadlock, exceto para tipos de tabela InnoDB e BDB. Isto é gerenciado sempre requisitando todos os bloqueios necessários de uma vez no começo de uma consulta e sempre bloqueando as tabelas na mesma ordem.

Tipos de tabela InnoDB automaticamente adquire seus locks de registro e os tipos de tabela BDB seus locks de páginas, durante o processamento das instruções SQL, e não no início da transação.

O método de bloqueio que o MariaDB utiliza para ESCRITA funciona da seguinte forma:

O método de bloqueio que o MariaDB utilizado para LEITURA funciona da seguinte maneira:

Quando um bloqueio é liberado, a trava fica disponível para as threads na fila de bloqueios de escrita, e então para as threads na fila de bloqueios de leitura.

Isto significa que se você possui várias atualizações em uma tabela, instruções SELECT irão esperar até que não existam mais atualizações.

Para contornar este problema no caso onde você precisa fazer várias operações de INSERT e SELECT em uma tabela, você pode inserir registros em uma tabela temporária e atualizar a tabela real com os registros da tabela temporária de uma só vez.

Isto pode ser feito usando o código a seguir:

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;

Você pode utilizar as opções LOW_PRIORITY com INSERT, UPDATE ou DELETE ou HIGH_PRIORITY com SELECT se você desejar priorizar a recuperação em alguns casos específicos. Também podei-se iniciar o mysqld com --low-priority-updates para obter o mesmo comportamento.

Utilizar SQL_BUFFER_RESULT pode também tornar a criação de locks de tabelas mais curtos.See "Sintaxe SELECT".

Você também pode alterar o código de bloqueioss no mysys/thr_lock.c para usar uma fila simples. Neste caso, bloqueios de escrita e leitura devem ter a mesma prioridade, o que pode ajudar em algumas aplicações.

Retornar