Estou usando PostgreSQL. Eu tentei construir um sistema que utilizasse exclusivamente transações SERIALIZABLE, na expectativa de que isso simplificasse o desenvolvimento do meu aplicativo. Eu marquei transações exclusivamente somente leitura com READ ONLY. No entanto, minhas gravações frequentemente entravam em conflito com SIReadLocks adquiridos por consultas somente leitura, transformando as gravações em novas tentativas contínuas. Desde então, fiz as consultas somente leitura serem executadas com READ COMMITTED e tudo funciona perfeitamente agora.
Agora eu me pergunto - se uma transação é SOMENTE LEITURA, digamos que se eu executar minha consulta no nível de isolamento REPEATABLE READ, quais anomalias de serialização poderiam ter acontecido e são evitadas por SERIALIZABLE (e seus custos associados)? Tenho dificuldade em pensar em um exemplo do benefício fornecido neste caso.
É raro e durante muito tempo não se pensou que fosse possível. O wiki do Postgres sobre Serializable Snapshot Isolation (SSI) contém uma seção dedicada a isso, com alguns exemplos. A seção começa com a seguinte afirmação:
Os exemplos são muito longos e complexos para serem reproduzidos aqui.
Você também pode estar interessado no comportamento relacionado no isolamento de instantâneo (não no SSI), conforme relatado em "Uma anomalia de transação somente leitura sob isolamento de instantâneo", de Alan Fekete, Elizabeth O'Neil e Patrick O'Neil.
O resumo do artigo é: