Dev & Code Jul 18, 2026Adicionar aos favoritos

Julia Evans publica suas anotações sobre SQLite: nada de espetacular, mas tudo muito útil para quem hesita em executar um aplicativo real nesse pequeno arquivo.
Julia Evans — cujos zines e artigos educaram uma geração de devs sobre os internals do Linux, HTTP, DNS — publicou em 17 de julho de 2026 em seu blog jvns.ca um artigo intitulado « Learning a few things about running SQLite ». Não é um tutorial introdutório, nem um manifesto religioso: é um diário de campo de uma pessoa que colocou o SQLite em produção em seu próprio serviço e anota o que a surpreendeu. Um prazer.
Não vamos estragar o artigo — leiam-no, ele está em inglês mas é curto —, mas alguns pontos retornam regularmente nos debates sobre SQLite em produção e merecem ser lembrados aqui para os curiosos:
Por padrão, o SQLite usa o modo de journal DELETE, onde escritas bloqueiam leituras. No modo WAL (Write-Ahead Logging), as leituras não bloqueiam mais as escritas e vice-versa:
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL; synchronous = NORMAL (em vez de FULL) aceita perder no máximo a última transação em caso de corte abrupto de energia, em troca de um ganho massivo de performance. É isso que faz, por exemplo, o Litestream e a maioria dos servidores SQLite modernos.
Ao contrário do PostgreSQL, o SQLite não paraleliza escritas. Um padrão clássico em Rust ou Go: uma única conexão reservada para escrita, um pool de conexões para leituras. É o modelo da crate rusqlite conjugada com deadpool-sqlite com essa separação, ou da lib Go mattn/go-sqlite3 com sql.DB configurado com SetMaxOpenConns(1) para escrita.
Fazer backup de um arquivo SQLite “na cópia” quando uma transação está em andamento é a melhor forma de obter um backup corrompido. Dois ferramentas reinam:
O SQLite aguenta sem problemas dezenas de milhares de requisições por segundo em um único arquivo, desde que esteja em WAL e bem indexado. O verdadeiro limite não é SQL, é o disco: NVMe local >> disco de rede, EBS gp3 >> EFS. Muitos fracassos do SQLite em produção vêm de ter colocado o arquivo em um compartilhamento de rede (NFS, notadamente — o SQLite o desaconselha explicitamente em negrito em sua documentação sqlite.org/faq.html#q5).
O ponto de vista de Julia Evans, como sempre, é: experimentar, medir, escrever o que se encontra. Nada de “SQLite escala” nem “você precisa do Postgres para qualquer coisa real”. Apenas: esse comportamento me surpreendeu, aqui está o porquê, aqui está o que eu mudei.
Para qualquer dev que hesite em usar a pesada artilharia relacional para um app mono-servidor ou um side project, esse tipo de artigo vale cem benchmarks sintéticos.
A query `SELECT * FROM pragma_compile_options;` retorna a lista de flags com as quais seu binário SQLite foi compilado. No Debian/Ubuntu, muitas vezes falta `SQLITE_ENABLE_FTS5` (busca full-text). Verifique antes de basear um app nisso.
Artigo produzido por inteligência artificial, revisto sob controlo editorial humano.