Sintaxe INSERT DELAYED


A opção DELAYED para a instrução INSERT é um opção específica do MariaDB que é muito útil se você tiver clientes que não possam esperar que o INSERT se complete. Este é um problema comum quando você utiliza o MariaDB para fazer log e você também execute periodicamente instruções SELECT e UPDATE que levem muito tempo para completar. DELAYED foi intriduzido no MariaDB versão 3.22.15. Ela é uma extensão do MariaDB ao SQL-92.

INSERT DELAYED só funciona com tabelas ISAM e MyISAM. Note que como tabelas MyISAM suportam SELECT e INSERT concorrentes, se não houver blocos livres no meio do arquivo de dados, você raramente precisará utilizar INSERT DELAYED com MyISAM. Leia "Tabelas MyISAM".

Quando você utiliza INSERT DELAYED, o cliente irá obter um OK de uma vez e a linha será inserida quando a tabela não estiver sendo usada por outra thread.

Outro grande benefício do uso de INSERT DELAYED e que inserções de muitos clientes são empacotados juntos e escritos em um bloco. Isto é muito mais rápido que se fazer muitas inserções seperadas.

Note que atualmente as linhas enfileirdas só são armazenadas em memória até que elas sejam inseridas na tabela. Isto significa que se você matar o mysqld com kill -9 ou se o mysqld finalizar inesperadamente, as linhas enfileiradas que não forma escritas em disco são perdidas.

A seguir temos uma descrição em detalhes do que acontece quando você utiliza a opção DELAYED com INSERT ou REPLACE. Nesta descrição, a thread e a thread que recebe um comando INSERT DELAYED e handler é a thread que trata todas as instruções INSERT DELAYED de uma tabela particular.

Note que INSERT DELAYED é mais lento que um INSERT normal se a tabela não estiver em uso. Também há uma sobrecarga adicional para o servidor tratar um thread separada para cada tabela na qual você utiliza INSERT DELAYED. Isto significa que você só deve usar INSERT DELAYED quando você estiver certo de necessita dele!

Retornar