How to Write to SSDs

Este artigo demonstra que a adoção de escritas fora do local (out-of-place) é essencial para maximizar o desempenho e a vida útil de SSDs em sistemas de banco de dados, propondo otimizações que reduzem significativamente a amplificação de escrita e melhoram a taxa de transferência em benchmarks OLTP.

Bohyun Lee, Tobias Ziegler, Viktor Leis

Publicado Wed, 11 Ma
📖 5 min de leitura🧠 Leitura aprofundada

Each language version is independently generated for its own context, not a direct translation.

Imagine que o seu banco de dados é como uma biblioteca gigante e o SSD (o disco de armazenamento do seu computador) é o prédio da biblioteca.

O problema que este artigo resolve é como os livros (os dados) são guardados e reorganizados nesse prédio.

O Problema: A Biblioteca Bagunçada (Escrita "In-Place")

Hoje, a maioria dos sistemas de banco de dados funciona como um bibliotecário muito rígido que segue uma regra antiga: "Se você precisa atualizar um livro, você tem que apagar o antigo no mesmo lugar exato da prateleira e colocar o novo ali."

Isso parece simples, mas gera dois grandes problemas:

  1. O "Double-Write" (Escrever Duas Vezes): Para garantir que o livro não fique rasgado se a luz acabar, o bibliotecário faz uma cópia de segurança antes de trocar o original. Isso significa que, para cada livro que você pede para atualizar, ele na verdade escreve duas vezes.
  2. O Efeito "Limpeza de Prateleira" (Amplificação de Escrita): Imagine que você tem uma prateleira cheia de livros velhos e novos misturados. Quando você quer colocar um livro novo, a biblioteca às vezes precisa jogar fora uma prateleira inteira (um bloco de dados) para fazer espaço. Mas, como essa prateleira tem alguns livros que ainda são úteis, o bibliotecário é obrigado a copiar esses livros úteis para outra prateleira antes de jogar a velha fora.

O resultado? Para cada 1 livro que você pediu para atualizar, o sistema acabou movendo, copiando e reescrevendo 4 ou 5 livros. Isso é chamado de Amplificação de Escrita.

  • Consequência: O SSD trabalha o dobro (ou o quádruplo) do necessário, gasta mais energia, fica lento e, pior, queima mais rápido (os SSDs têm uma vida útil limitada baseada em quantas vezes você escreve neles).

A Solução: A Biblioteca Moderna (Escrita "Out-of-Place")

Os autores deste artigo propõem mudar a regra do jogo. Em vez de tentar encaixar o livro novo no lugar exato do velho, eles propõem uma abordagem flexível:

"Não se preocupe em apagar o velho agora. Apenas pegue o livro novo, escreva-o em qualquer lugar vazio da biblioteca e atualize o catálogo para dizer onde ele está."

Isso é a Escrita "Out-of-Place" (Fora do Lugar).

Com essa mudança, o sistema ganha superpoderes:

1. Compressão e "Empacotamento" (Compression & Page Packing)

Imagine que os livros são feitos de papel muito fino. Em vez de guardar cada livro em uma caixa de 4cm (o tamanho padrão), o sistema comprime o livro e o coloca em uma caixa menor.

  • O Truque: Se você colocar caixas de tamanhos diferentes aleatoriamente, fica difícil achar o livro depois. A solução é usar um algoritmo inteligente de "empacotamento" (como o Tetris) para encaixar várias caixas pequenas perfeitamente em blocos de 4cm.
  • Resultado: Você escreve muito menos dados físicos no SSD.

2. O "Relógio da Morte" (Deathtime-Based GC)

A biblioteca precisa limpar as prateleiras ocasionalmente (Garbage Collection). O problema é que, se você misturar livros que vão ser atualizados amanhã com livros que ninguém vai ler em 10 anos, a limpeza será um caos.

  • A Solução: O sistema prevê "quando o livro vai morrer" (quando será atualizado ou ficar obsoleto). Ele agrupa os livros que vão "morrer" juntos na mesma prateleira.
  • Resultado: Quando chega a hora de limpar, a prateleira inteira está cheia de livros velhos. Não é necessário mover nenhum livro útil. A limpeza é instantânea e sem desperdício.

3. Conversando com o SSD (ZNS e FDP)

Os SSDs modernos têm "modos de comunicação" especiais (chamados ZNS e FDP).

  • ZNS (Zoned Namespace): É como se a biblioteca tivesse zonas coloridas. O sistema diz ao SSD: "Vou escrever tudo nesta zona vermelha, e só quando ela estiver cheia eu aviso você para limpar". O SSD não precisa fazer nenhuma limpeza interna.
  • FDP (Flexible Data Placement): É como dar um mapa ao SSD. O sistema diz: "Coloque estes livros aqui, e aqueles ali". Isso evita que o SSD misture dados diferentes e precise reorganizar tudo depois.

O Resultado Final: O Milagre

Ao aplicar todas essas técnicas juntas, o que acontece?

  • Menos Trabalho: O SSD escreve 6 a 9 vezes menos dados do que antes para fazer a mesma tarefa.
  • Mais Velocidade: Como o SSD não precisa ficar correndo para limpar e reorganizar prateleiras o tempo todo, ele fica 2 vezes mais rápido.
  • Vida Útil Estendida: Como o SSD sofre muito menos desgaste, ele dura muito mais tempo.

Resumo em uma Analogia Simples

  • Antes (In-Place): Você tenta arrumar sua mesa de escritório. Para colocar um novo documento, você joga fora a gaveta inteira, copia os documentos úteis para outra gaveta, e só então coloca o novo. Você gasta horas e cansa a mão.
  • Depois (Out-of-Place + Otimizações): Você pega o novo documento, coloca em uma gaveta vazia e atualiza o índice. Quando a gaveta enche, você joga fora apenas os documentos que ninguém mais usa, sem precisar mover os que ainda são úteis.

Conclusão: O artigo mostra que, se o banco de dados assumir o controle de como e onde os dados são escritos (em vez de deixar o SSD fazer isso às cegas), podemos ter sistemas muito mais rápidos, baratos e duráveis. É uma mudança de mentalidade: do "escreva onde eu mandei" para "escreva onde faz sentido".