Estou tentando entender por que uma instrução de atualização não faz com que o comprimento da lista de histórico (HLL) aumente quando o banco de dados tem alta carga de gravação. A instrução Select faz com que o HLL cresça no mesmo cenário.
Cenário 1: HLL não está crescendo
- Banco de dados MySQL possui 1 tabela com 2 colunas (1 chave primária)
- Usando o sysbench para executar atualizações e inserir instruções nesta tabela com 8 threads
- Simultaneamente com o carregamento do sysbench, tendo uma transação de longa duração:
> START TRANSACTION;
> UPDATE t1 SET c2 = 'val' WHERE c1 != 'DONE'.
[leaving this terminal open without committing]
Cenário 2: HLL está crescendo (conforme esperado)
- Mesma configuração acima: 1 tabela e sysbench executando instruções de gravação na tabela.
- Simultaneamente com o carregamento do sysbench, a transação de longa execução é apenas uma instrução SELECT:
> START TRANSACTION;
> SELECT * from t1 WHERE c1 != 'DONE'.
[leaving this terminal open without committing]
Expectativa : O HLL deverá crescer rapidamente em ambos os cenários, uma vez que ambos os cenários deverão utilizar uma visualização de leitura.
Observação Real : O HLL cresce rapidamente apenas no Cenário 2. Para o cenário 1, o HLL permanece quase constante.
Pergunta: Por que esse comportamento? Por que uma instrução de atualização com a condição where não faz com que o HLL cresça?