sexta-feira, 24 de fevereiro de 2012

Numeração Contínua com "Sequences" usando NOCACHE ?

Vamos lá: os objetos do tipo "sequence" em Oracle não garantem sequências numéricas sem "gaps". Nunca. Não existe nenhum parâmetro que possa ser setado, nehuma variação na sintaxe do comando CREATE SEQUENCE, nada que possa garantir isso.
_
Por quê ? Ora, porque existe uma coisa chamada "rollback", que acontece automaticamente quando ocorre um erro qualquer dentro de uma transação. Quando você pega um número da sequence (nextval), isso não tem volta. É como se fosse uma transação autônoma. A grosso modo, se você tem um processo qualquer que usa uma sequence para preencher um campo, você terá um buraco na sequence sempre que esse processo der erro.
_
Às vezes encontramos por aí sequences configuradas como NOCACHE, numa tentativa de conseguir esse efeito de numeração contínua. Isso não apenas não resolve um problema, mas cria outro pior. Sequences com NOCACHE prejudicam muito o desempenho, especialmente em processos batch e mais especialmente ainda em ambientes clusterizados (RAC). Se você tiver problemas de desempenho relacionados ao evento de wait "SQ - Sequence Number Enqueue", procure por sequences definidas como NOCACHE.

Nenhum comentário:

Postar um comentário